From d2a34e1f91c08774d288865f98b85f76f11a8fa1 Mon Sep 17 00:00:00 2001 From: Andrea Date: Thu, 10 Dec 2020 21:08:15 +0000 Subject: [PATCH] Remove VirtualAlloc, VirtualFree & ZeroMemory. (PR #884) . Allocation in Memory.cpp: keep VirtualAlloc of size=64KiB (alignment=64KiB) to ease debugging. --- source/Configuration/PropertySheetHelper.cpp | 4 +- source/Debugger/Debug.cpp | 8 +- source/Debugger/Debugger_Console.cpp | 2 +- source/Debugger/Debugger_Display.cpp | 22 ++--- source/Debugger/Debugger_Help.cpp | 4 +- source/Debugger/Util_MemoryTextFile.cpp | 2 +- source/Disk.cpp | 2 +- source/DiskImage.cpp | 19 ---- source/DiskImage.h | 2 - source/DiskImageHelper.cpp | 39 +++++---- source/DiskImageHelper.h | 10 +-- source/Harddisk.cpp | 8 +- source/LanguageCard.cpp | 21 ++--- source/Memory.cpp | 92 ++++++++++---------- source/RGBMonitor.cpp | 4 +- source/SerialComms.cpp | 4 +- source/SoundCore.cpp | 2 +- source/Windows/AppleWin.cpp | 3 - source/Windows/DirectInput.cpp | 2 +- source/Windows/WinFrame.cpp | 5 +- source/Windows/WinVideo.cpp | 14 ++- test/TestCPU6502/TestCPU6502.cpp | 3 +- 22 files changed, 117 insertions(+), 155 deletions(-) diff --git a/source/Configuration/PropertySheetHelper.cpp b/source/Configuration/PropertySheetHelper.cpp index 97bb0fa7..5a4249f9 100644 --- a/source/Configuration/PropertySheetHelper.cpp +++ b/source/Configuration/PropertySheetHelper.cpp @@ -158,7 +158,7 @@ std::string CPropertySheetHelper::BrowseToFile(HWND hWindow, TCHAR* pszTitle, TC std::string pathname = szFilename; OPENFILENAME ofn; - ZeroMemory(&ofn,sizeof(OPENFILENAME)); + memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWindow; @@ -205,7 +205,7 @@ int CPropertySheetHelper::SaveStateSelectImage(HWND hWindow, TCHAR* pszTitle, bo // OPENFILENAME ofn; - ZeroMemory(&ofn,sizeof(OPENFILENAME)); + memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWindow; diff --git a/source/Debugger/Debug.cpp b/source/Debugger/Debug.cpp index 4819a5a3..e92cb623 100644 --- a/source/Debugger/Debug.cpp +++ b/source/Debugger/Debug.cpp @@ -8831,7 +8831,7 @@ void DebugInitialize () GetConsoleFontDC(); // Load font - ZeroMemory( g_aConsoleDisplay, sizeof( g_aConsoleDisplay ) ); // CONSOLE_WIDTH * CONSOLE_HEIGHT ); + memset( g_aConsoleDisplay, 0, sizeof( g_aConsoleDisplay ) ); // CONSOLE_WIDTH * CONSOLE_HEIGHT ); ConsoleInputReset(); for( int iWindow = 0; iWindow < NUM_WINDOWS; iWindow++ ) @@ -8853,9 +8853,9 @@ void DebugInitialize () WindowUpdateConsoleDisplayedSize(); // CLEAR THE BREAKPOINT AND WATCH TABLES - ZeroMemory( g_aBreakpoints , MAX_BREAKPOINTS * sizeof(Breakpoint_t)); - ZeroMemory( g_aWatches , MAX_WATCHES * sizeof(Watches_t) ); - ZeroMemory( g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS * sizeof(ZeroPagePointers_t)); + memset( g_aBreakpoints , 0, MAX_BREAKPOINTS * sizeof(Breakpoint_t)); + memset( g_aWatches , 0, MAX_WATCHES * sizeof(Watches_t) ); + memset( g_aZeroPagePointers, 0, MAX_ZEROPAGE_POINTERS * sizeof(ZeroPagePointers_t)); // Load Main, Applesoft, and User Symbols extern bool g_bSymbolsDisplayMissingFile; diff --git a/source/Debugger/Debugger_Console.cpp b/source/Debugger/Debugger_Console.cpp index c291d510..4c38d320 100644 --- a/source/Debugger/Debugger_Console.cpp +++ b/source/Debugger/Debugger_Console.cpp @@ -462,7 +462,7 @@ bool ConsoleInputBackSpace () //=========================================================================== bool ConsoleInputClear () { - ZeroMemory( g_aConsoleInput, CONSOLE_WIDTH ); + memset( g_aConsoleInput, 0, CONSOLE_WIDTH ); if (g_nConsoleInputChars) { diff --git a/source/Debugger/Debugger_Display.cpp b/source/Debugger/Debugger_Display.cpp index f2ac73f4..1977f5bb 100644 --- a/source/Debugger/Debugger_Display.cpp +++ b/source/Debugger/Debugger_Display.cpp @@ -557,13 +557,9 @@ HDC GetDebuggerMemDC(void) g_hDebuggerMemDC = CreateCompatibleDC(hFrameDC); // CREATE A BITMAPINFO STRUCTURE FOR THE FRAME BUFFER - g_pDebuggerMemFramebufferinfo = (LPBITMAPINFO)VirtualAlloc( - NULL, - sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD), - MEM_COMMIT, - PAGE_READWRITE); + g_pDebuggerMemFramebufferinfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; - ZeroMemory(g_pDebuggerMemFramebufferinfo, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + memset(g_pDebuggerMemFramebufferinfo, 0, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); g_pDebuggerMemFramebufferinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); g_pDebuggerMemFramebufferinfo->bmiHeader.biWidth = 560; g_pDebuggerMemFramebufferinfo->bmiHeader.biHeight = 384; @@ -598,7 +594,7 @@ void ReleaseDebuggerMemDC(void) FrameReleaseDC(); - VirtualFree(g_pDebuggerMemFramebufferinfo, 0, MEM_RELEASE); + delete [] g_pDebuggerMemFramebufferinfo; g_pDebuggerMemFramebufferinfo = NULL; g_pDebuggerMemFramebits = NULL; } @@ -613,13 +609,9 @@ HDC GetConsoleFontDC(void) g_hConsoleFontDC = CreateCompatibleDC(hFrameDC); // CREATE A BITMAPINFO STRUCTURE FOR THE FRAME BUFFER - g_hConsoleFontFramebufferinfo = (LPBITMAPINFO)VirtualAlloc( - NULL, - sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD), - MEM_COMMIT, - PAGE_READWRITE); + g_hConsoleFontFramebufferinfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; - ZeroMemory(g_hConsoleFontFramebufferinfo, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + memset(g_hConsoleFontFramebufferinfo, 0, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); g_hConsoleFontFramebufferinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); g_hConsoleFontFramebufferinfo->bmiHeader.biWidth = CONSOLE_FONT_BITMAP_WIDTH; g_hConsoleFontFramebufferinfo->bmiHeader.biHeight = CONSOLE_FONT_BITMAP_HEIGHT; @@ -664,7 +656,7 @@ void ReleaseConsoleFontDC(void) DeleteObject( g_hConsoleFontBitmap ); g_hConsoleFontBitmap = NULL; - VirtualFree(g_hConsoleFontFramebufferinfo, 0, MEM_RELEASE); + delete [] g_hConsoleFontFramebufferinfo; g_hConsoleFontFramebufferinfo = NULL; g_hConsoleFontFramebits = NULL; } @@ -3204,7 +3196,7 @@ void DrawSoftSwitches( int iSoftSwitch ) void DrawSourceLine( int iSourceLine, RECT &rect ) { char sLine[ CONSOLE_WIDTH ]; - ZeroMemory( sLine, CONSOLE_WIDTH ); + memset( sLine, 0, CONSOLE_WIDTH ); if ((iSourceLine >=0) && (iSourceLine < g_AssemblerSourceBuffer.GetNumLines() )) { diff --git a/source/Debugger/Debugger_Help.cpp b/source/Debugger/Debugger_Help.cpp index 97e097bb..c1d281ea 100644 --- a/source/Debugger/Debugger_Help.cpp +++ b/source/Debugger/Debugger_Help.cpp @@ -571,8 +571,8 @@ Update_t CmdHelpSpecific (int nArgs) int iArg; char sText[ CONSOLE_WIDTH * 2 ]; char sTemp[ CONSOLE_WIDTH * 2 ]; - ZeroMemory( sText, CONSOLE_WIDTH*2 ); - ZeroMemory( sTemp, CONSOLE_WIDTH*2 ); + memset( sText, 0, CONSOLE_WIDTH*2 ); + memset( sTemp, 0, CONSOLE_WIDTH*2 ); if (! nArgs) { diff --git a/source/Debugger/Util_MemoryTextFile.cpp b/source/Debugger/Util_MemoryTextFile.cpp index 94ee4f2d..980d29c5 100644 --- a/source/Debugger/Util_MemoryTextFile.cpp +++ b/source/Debugger/Util_MemoryTextFile.cpp @@ -67,7 +67,7 @@ void MemoryTextFile_t::GetLine( const int iLine, char *pLine, const int nMaxLine GetLinePointers(); } - ZeroMemory( pLine, nMaxLineChars ); + memset( pLine, 0, nMaxLineChars ); strncpy( pLine, m_vLines[ iLine ], nMaxLineChars-1 ); } diff --git a/source/Disk.cpp b/source/Disk.cpp index cb00bca8..c1772c0e 100644 --- a/source/Disk.cpp +++ b/source/Disk.cpp @@ -1540,7 +1540,7 @@ bool Disk2InterfaceCard::UserSelectNewDiskImage(const int drive, LPCSTR pszFilen _ASSERT(sizeof(OPENFILENAME) == sizeof(OPENFILENAME_NT4)); // Required for Win98/ME support (selected by _WIN32_WINNT=0x0400 in stdafx.h) OPENFILENAME ofn; - ZeroMemory(&ofn,sizeof(OPENFILENAME)); + memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = g_hFrameWindow; ofn.hInstance = g_hInstance; diff --git a/source/DiskImage.cpp b/source/DiskImage.cpp index e3832c98..4ccc160c 100644 --- a/source/DiskImage.cpp +++ b/source/DiskImage.cpp @@ -46,9 +46,6 @@ ImageError_e ImageOpen( const std::string & pszImageFilename, std::string& strFilenameInZip, const bool bExpectFloppy /*=true*/) { - if (bExpectFloppy && sg_DiskImageHelper.GetWorkBuffer() == NULL) - return eIMAGE_ERROR_BAD_POINTER; - if (!(!pszImageFilename.empty() && ppImageInfo && pWriteProtected)) return eIMAGE_ERROR_BAD_POINTER; @@ -114,22 +111,6 @@ BOOL ImageBoot(ImageInfo* const pImageInfo) //=========================================================================== -void ImageDestroy(void) -{ - VirtualFree(sg_DiskImageHelper.GetWorkBuffer(), 0, MEM_RELEASE); - sg_DiskImageHelper.SetWorkBuffer(NULL); -} - -//=========================================================================== - -void ImageInitialize(void) -{ - LPBYTE pBuffer = (LPBYTE) VirtualAlloc(NULL, TRACK_DENIBBLIZED_SIZE*2, MEM_COMMIT, PAGE_READWRITE); - sg_DiskImageHelper.SetWorkBuffer(pBuffer); -} - -//=========================================================================== - void ImageReadTrack( ImageInfo* const pImageInfo, float phase, // phase [0..79] +/- 0.5 LPBYTE pTrackImageBuffer, diff --git a/source/DiskImage.h b/source/DiskImage.h index 3390527e..1d6a30e1 100644 --- a/source/DiskImage.h +++ b/source/DiskImage.h @@ -79,8 +79,6 @@ struct ImageInfo; ImageError_e ImageOpen(const std::string & pszImageFilename, ImageInfo** ppImageInfo, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, const bool bExpectFloppy=true); void ImageClose(ImageInfo* const pImageInfo); BOOL ImageBoot(ImageInfo* const pImageInfo); -void ImageDestroy(void); -void ImageInitialize(void); void ImageReadTrack(ImageInfo* const pImageInfo, float phase, LPBYTE pTrackImageBuffer, int* pNibbles, UINT* pBitCount, bool enhanceDisk); void ImageWriteTrack(ImageInfo* const pImageInfo, float phase, LPBYTE pTrackImageBuffer, int nNibbles); diff --git a/source/DiskImageHelper.cpp b/source/DiskImageHelper.cpp index 202725d7..702a1c51 100644 --- a/source/DiskImageHelper.cpp +++ b/source/DiskImageHelper.cpp @@ -52,7 +52,7 @@ ImageInfo::ImageInfo() uOffset = 0; bWriteProtected = false; uImageSize = 0; - ZeroMemory(&zipFileInfo, sizeof(zipFileInfo)); + memset(&zipFileInfo, 0, sizeof(zipFileInfo)); uNumEntriesInZip = 0; uNumValidImagesInZip = 0; uNumTracks = 0; @@ -63,6 +63,20 @@ ImageInfo::ImageInfo() maxNibblesPerTrack = 0; } +CImageBase::CImageBase() + : m_uNumTracksInImage(0) + , m_uVolumeNumber(DEFAULT_VOLUME_NUMBER) +{ + ms_pWorkBuffer = new BYTE[TRACK_DENIBBLIZED_SIZE * 2]; +} + +CImageBase::~CImageBase() +{ + delete [] ms_pWorkBuffer; + ms_pWorkBuffer = NULL; +} + + /* DO logical order 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* physical order 0 D B 9 7 5 3 1 E C A 8 6 4 2 F */ @@ -88,8 +102,6 @@ BYTE CImageBase::ms_SectorNumber[NUM_SECTOR_ORDERS][0x10] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} }; -LPBYTE CImageBase::ms_pWorkBuffer = NULL; - //----------------------------------------------------------------------------- bool CImageBase::WriteImageHeader(ImageInfo* pImageInfo, LPBYTE pHdr, const UINT hdrSize) @@ -351,7 +363,7 @@ void CImageBase::Decode62(LPBYTE imageptr) static BYTE sixbitbyte[0x80]; if (!tablegenerated) { - ZeroMemory(sixbitbyte,0x80); + memset(sixbitbyte, 0, 0x80); int loop = 0; while (loop < 0x40) { sixbitbyte[ms_DiskByte[loop]-0x80] = loop << 2; @@ -417,7 +429,7 @@ void CImageBase::Decode62(LPBYTE imageptr) void CImageBase::DenibblizeTrack(LPBYTE trackimage, SectorOrder_e SectorOrder, int nibbles) { - ZeroMemory(ms_pWorkBuffer, TRACK_DENIBBLIZED_SIZE); + memset(ms_pWorkBuffer, 0, TRACK_DENIBBLIZED_SIZE); // SEARCH THROUGH THE TRACK IMAGE FOR EACH SECTOR. FOR EVERY SECTOR // WE FIND, COPY THE NIBBLIZED DATA FOR THAT SECTOR INTO THE WORK @@ -494,7 +506,7 @@ void CImageBase::DenibblizeTrack(LPBYTE trackimage, SectorOrder_e SectorOrder, i DWORD CImageBase::NibblizeTrack(LPBYTE trackimagebuffer, SectorOrder_e SectorOrder, int track) { - ZeroMemory(ms_pWorkBuffer+TRACK_DENIBBLIZED_SIZE, TRACK_DENIBBLIZED_SIZE); + memset(ms_pWorkBuffer+TRACK_DENIBBLIZED_SIZE, 0, TRACK_DENIBBLIZED_SIZE); LPBYTE imageptr = trackimagebuffer; BYTE sector = 0; @@ -905,13 +917,8 @@ public: // IF WE HAVEN'T ALREADY DONE SO, READ THE IMAGE FILE HEADER if (!m_pHeader) { - m_pHeader = (LPBYTE) VirtualAlloc(NULL, 88, MEM_COMMIT, PAGE_READWRITE); - if (!m_pHeader) - { - *pNibbles = 0; - return; - } - ZeroMemory(m_pHeader, 88); + m_pHeader = new BYTE[88]; + memset(m_pHeader, 0, 88); DWORD dwBytesRead; SetFilePointer(pImageInfo->hFile, 0, NULL,FILE_BEGIN); ReadFile(pImageInfo->hFile, m_pHeader, 88, &dwBytesRead, NULL); @@ -922,7 +929,7 @@ public: { ConvertSectorOrder(m_pHeader+14); SetFilePointer(pImageInfo->hFile, track*TRACK_DENIBBLIZED_SIZE+30, NULL, FILE_BEGIN); - ZeroMemory(ms_pWorkBuffer, TRACK_DENIBBLIZED_SIZE); + memset(ms_pWorkBuffer, 0, TRACK_DENIBBLIZED_SIZE); DWORD bytesread; ReadFile(pImageInfo->hFile, ms_pWorkBuffer, TRACK_DENIBBLIZED_SIZE, &bytesread, NULL); *pNibbles = NibblizeTrack(pTrackImageBuffer, eSIMSYSTEMOrder, track); @@ -935,7 +942,7 @@ public: while (track--) Offset += *(LPWORD)(m_pHeader+track*2+14); SetFilePointer(pImageInfo->hFile, Offset, NULL,FILE_BEGIN); - ZeroMemory(pTrackImageBuffer, *pNibbles); + memset(pTrackImageBuffer, 0, *pNibbles); DWORD dwBytesRead; ReadFile(pImageInfo->hFile, pTrackImageBuffer, *pNibbles, &dwBytesRead, NULL); } @@ -1855,7 +1862,7 @@ ImageError_e CImageHelperBase::CheckNormalFile(LPCTSTR pszImageFilename, ImageIn } else { - ZeroMemory(pImageInfo->pImageBuffer, dwSize); + memset(pImageInfo->pImageBuffer, 0, dwSize); } } diff --git a/source/DiskImageHelper.h b/source/DiskImageHelper.h index 5576858b..52abafe6 100644 --- a/source/DiskImageHelper.h +++ b/source/DiskImageHelper.h @@ -56,8 +56,8 @@ struct ImageInfo class CImageBase { public: - CImageBase(void) : m_uNumTracksInImage(0), m_uVolumeNumber(DEFAULT_VOLUME_NUMBER) {} - virtual ~CImageBase(void) {} + CImageBase(void); + virtual ~CImageBase(void); virtual bool Boot(ImageInfo* pImageInfo) { return false; } virtual eDetectResult Detect(const LPBYTE pImage, const DWORD dwImageSize, const TCHAR* pszExt) = 0; @@ -99,8 +99,9 @@ protected: DWORD NibblizeTrack (LPBYTE trackimagebuffer, SectorOrder_e SectorOrder, int track); void SkewTrack (const int nTrack, const int nNumNibbles, const LPBYTE pTrackImageBuffer); + LPBYTE ms_pWorkBuffer; + public: - static LPBYTE ms_pWorkBuffer; UINT m_uNumTracksInImage; // Init'd by CDiskImageHelper.Detect()/GetImageForCreation() & possibly updated by IsValidImageSize() protected: @@ -425,9 +426,6 @@ public: UINT GetNumTracksInImage(CImageBase* pImageType) { return pImageType->m_uNumTracksInImage; } void SetNumTracksInImage(CImageBase* pImageType, UINT uNumTracks) { pImageType->m_uNumTracksInImage = uNumTracks; } - LPBYTE GetWorkBuffer(void) { return CImageBase::ms_pWorkBuffer; } - void SetWorkBuffer(LPBYTE pBuffer) { CImageBase::ms_pWorkBuffer = pBuffer; } - private: void SkipMacBinaryHdr(LPBYTE& pImage, DWORD& dwSize, DWORD& dwOffset); diff --git a/source/Harddisk.cpp b/source/Harddisk.cpp index 774afd1b..6b3a7067 100644 --- a/source/Harddisk.cpp +++ b/source/Harddisk.cpp @@ -125,7 +125,7 @@ struct HDD void clear() { // This is not a POD (there is a std::string) - // ZeroMemory does not work + // memset(0) does not work imagename.clear(); fullname.clear(); strFilenameInZip.clear(); @@ -136,7 +136,7 @@ struct HDD hd_diskblock = 0; hd_buf_ptr = 0; hd_imageloaded = false; - ZeroMemory(hd_buf, sizeof(hd_buf)); + memset(hd_buf, 0, sizeof(hd_buf)); #if HD_LED hd_status_next = DISK_STATUS_OFF; hd_status_prev = DISK_STATUS_OFF; @@ -463,7 +463,7 @@ static bool HD_SelectImage(const int drive, LPCSTR pszFilename) _ASSERT(sizeof(OPENFILENAME) == sizeof(OPENFILENAME_NT4)); // Required for Win98/ME support (selected by _WIN32_WINNT=0x0400 in stdafx.h) OPENFILENAME ofn; - ZeroMemory(&ofn,sizeof(OPENFILENAME)); + memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = g_hFrameWindow; ofn.hInstance = g_hInstance; @@ -584,7 +584,7 @@ static BYTE __stdcall HD_IO_EMUL(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG if (bAppendBlocks) { - ZeroMemory(pHDD->hd_buf, HD_BLOCK_SIZE); + memset(pHDD->hd_buf, 0, HD_BLOCK_SIZE); // Inefficient (especially for gzip/zip files!) UINT uBlock = ImageGetImageSize(pHDD->imagehandle) / HD_BLOCK_SIZE; diff --git a/source/LanguageCard.cpp b/source/LanguageCard.cpp index a362e8df..6dbf1ed8 100644 --- a/source/LanguageCard.cpp +++ b/source/LanguageCard.cpp @@ -139,13 +139,13 @@ bool LanguageCardUnit::IsOpcodeRMWabs(WORD addr) LanguageCardSlot0::LanguageCardSlot0(SS_CARDTYPE type/*=CT_LanguageCard*/) : LanguageCardUnit(type) { - m_pMemory = (LPBYTE)VirtualAlloc(NULL, kMemBankSize, MEM_COMMIT, PAGE_READWRITE); + m_pMemory = new BYTE[kMemBankSize]; SetMemMainLanguageCard(m_pMemory); } LanguageCardSlot0::~LanguageCardSlot0(void) { - VirtualFree(m_pMemory, 0, MEM_RELEASE); + delete [] m_pMemory; m_pMemory = NULL; } @@ -218,9 +218,7 @@ bool LanguageCardSlot0::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, if (!m_pMemory) { - m_pMemory = (LPBYTE) VirtualAlloc(NULL, kMemBankSize, MEM_COMMIT, PAGE_READWRITE); - if (!m_pMemory) - throw std::string("Card: mem alloc failed"); + m_pMemory = new BYTE[kMemBankSize]; } if (!yamlLoadHelper.GetSubMap(GetSnapshotMemStructName())) @@ -249,7 +247,7 @@ Saturn128K::Saturn128K(UINT banks) m_aSaturnBanks[0] = m_pMemory; // Reuse memory allocated in base ctor for (UINT i = 1; i < m_uSaturnTotalBanks; i++) - m_aSaturnBanks[i] = (LPBYTE) VirtualAlloc(NULL, kMemBankSize, MEM_COMMIT, PAGE_READWRITE); // Saturn banks are 16K, max 8 banks/card + m_aSaturnBanks[i] = new BYTE[kMemBankSize]; // Saturn banks are 16K, max 8 banks/card SetMemMainLanguageCard( m_aSaturnBanks[ m_uSaturnActiveBank ] ); } @@ -262,7 +260,7 @@ Saturn128K::~Saturn128K(void) { if (m_aSaturnBanks[i]) { - VirtualFree(m_aSaturnBanks[i], 0, MEM_RELEASE); + delete [] m_aSaturnBanks[i]; m_aSaturnBanks[i] = NULL; } } @@ -435,12 +433,9 @@ bool Saturn128K::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT ve for(UINT uBank = 0; uBank < m_uSaturnTotalBanks; uBank++) { - LPBYTE pBank = m_aSaturnBanks[uBank]; - if (!pBank) + if (!m_aSaturnBanks[uBank]) { - pBank = m_aSaturnBanks[uBank] = (LPBYTE) VirtualAlloc(NULL, kMemBankSize, MEM_COMMIT, PAGE_READWRITE); - if (!pBank) - throw std::string("Card: mem alloc failed"); + m_aSaturnBanks[uBank] = new BYTE[kMemBankSize]; } // "Memory Bankxx" @@ -451,7 +446,7 @@ bool Saturn128K::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT slot, UINT ve if (!yamlLoadHelper.GetSubMap(memName)) throw std::string("Memory: Missing map name: " + memName); - yamlLoadHelper.LoadMemory(pBank, kMemBankSize); + yamlLoadHelper.LoadMemory(m_aSaturnBanks[uBank], kMemBankSize); yamlLoadHelper.PopMap(); } diff --git a/source/Memory.cpp b/source/Memory.cpp index aeae07f1..cdd4fcd5 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -61,6 +61,23 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #include "Debugger/DebugDefs.h" #include "YamlHelper.h" +// in this file use allocate the 64KB of RAM with an aligned memory allocations (0x1000) +// to ease mapping between Apple ][ and host memory space (while debugging) + +// this is not available in Visual Studio +// https://en.cppreference.com/w/c/memory/aligned_alloc + +#ifdef _MSC_VER +// VirtualAlloc is aligned +#define ALIGNED_ALLOC(size) (LPBYTE)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE) +#define ALIGNED_FREE(ptr) VirtualFree(ptr, 0, MEM_RELEASE) +#else +// use plain "new" in gcc (where debugging needs are less important) +#define ALIGNED_ALLOC(size) new BYTE[size] +#define ALIGNED_FREE(ptr) delete [] ptr +#endif + + // UTAIIe:5-28 (GH#419) // . Sather uses INTCXROM instead of SLOTCXROM' (used by the Apple//e Tech Ref Manual), so keep to this // convention too since UTAIIe is the reference for most of the logic that we implement in the emulator. @@ -1244,21 +1261,22 @@ static void UpdatePaging(BOOL initialize) void MemDestroy() { - VirtualFree(memaux ,0,MEM_RELEASE); - VirtualFree(memmain ,0,MEM_RELEASE); - VirtualFree(memdirty,0,MEM_RELEASE); - VirtualFree(memrom ,0,MEM_RELEASE); - VirtualFree(memimage,0,MEM_RELEASE); + ALIGNED_FREE(memaux); + ALIGNED_FREE(memmain); + ALIGNED_FREE(memimage); - VirtualFree(pCxRomInternal,0,MEM_RELEASE); - VirtualFree(pCxRomPeripheral,0,MEM_RELEASE); + delete [] memdirty; + delete [] memrom; + + delete [] pCxRomInternal; + delete [] pCxRomPeripheral; #ifdef RAMWORKS for (UINT i=1; iGetCaps(&DSCaps); if(FAILED(hr)) diff --git a/source/Windows/AppleWin.cpp b/source/Windows/AppleWin.cpp index 91a66d7d..a8c52ebe 100644 --- a/source/Windows/AppleWin.cpp +++ b/source/Windows/AppleWin.cpp @@ -770,9 +770,6 @@ static void OneTimeInitialization(HINSTANCE passinstance) FrameRegisterClass(); LogFileOutput("Init: FrameRegisterClass()\n"); - - ImageInitialize(); - LogFileOutput("Init: ImageInitialize()\n"); } // DO INITIALIZATION THAT MUST BE REPEATED FOR A RESTART diff --git a/source/Windows/DirectInput.cpp b/source/Windows/DirectInput.cpp index 86597a67..6a1a3ec7 100644 --- a/source/Windows/DirectInput.cpp +++ b/source/Windows/DirectInput.cpp @@ -222,7 +222,7 @@ namespace DIMouse return S_OK; // Get the input's device state, and put the state in dims - ZeroMemory( &dims2, sizeof(dims2) ); + memset( &dims2, 0, sizeof(dims2) ); hr = g_pMouse->GetDeviceState( sizeof(DIMOUSESTATE2), &dims2 ); if( FAILED(hr) ) { diff --git a/source/Windows/WinFrame.cpp b/source/Windows/WinFrame.cpp index 5922d61a..c774cf53 100644 --- a/source/Windows/WinFrame.cpp +++ b/source/Windows/WinFrame.cpp @@ -284,7 +284,7 @@ static void FullScreenRevealCursor(void) static void CreateGdiObjects(void) { - ZeroMemory(buttonbitmap, BUTTONS*sizeof(HBITMAP)); + memset(buttonbitmap, 0, BUTTONS*sizeof(HBITMAP)); buttonbitmap[BTN_HELP] = (HBITMAP)LOADBUTTONBITMAP(TEXT("HELP_BUTTON")); @@ -1059,7 +1059,6 @@ LRESULT CALLBACK FrameWndProc ( DebugDestroy(); if (!g_bRestart) { GetCardMgr().GetDisk2CardMgr().Destroy(); - ImageDestroy(); HD_Destroy(); } PrintDestroy(); @@ -2584,7 +2583,7 @@ void FrameRefreshStatus (int drawflags, bool bUpdateDiskStatus) { //=========================================================================== void FrameRegisterClass () { WNDCLASSEX wndclass; - ZeroMemory(&wndclass,sizeof(WNDCLASSEX)); + memset(&wndclass, 0, sizeof(WNDCLASSEX)); wndclass.cbSize = sizeof(WNDCLASSEX); wndclass.style = CS_OWNDC | CS_BYTEALIGNCLIENT; wndclass.lpfnWndProc = FrameWndProc; diff --git a/source/Windows/WinVideo.cpp b/source/Windows/WinVideo.cpp index 9fbffa91..c0d4e86e 100644 --- a/source/Windows/WinVideo.cpp +++ b/source/Windows/WinVideo.cpp @@ -73,7 +73,7 @@ static void videoCreateDIBSection() SelectObject(g_hDeviceDC, g_hDeviceBitmap); // DRAW THE SOURCE IMAGE INTO THE SOURCE BIT BUFFER - ZeroMemory(g_pFramebufferbits, GetFrameBufferWidth() * GetFrameBufferHeight() * sizeof(bgra_t)); + memset(g_pFramebufferbits, 0, GetFrameBufferWidth() * GetFrameBufferHeight() * sizeof(bgra_t)); // CREATE THE OFFSET TABLE FOR EACH SCAN LINE IN THE FRAME BUFFER NTSC_VideoInit(g_pFramebufferbits); @@ -92,13 +92,9 @@ void WinVideoInitialize() g_hLogoBitmap = LoadBitmap(g_hInstance, MAKEINTRESOURCE(IDB_APPLEWIN)); // CREATE A BITMAPINFO STRUCTURE FOR THE FRAME BUFFER - g_pFramebufferinfo = (LPBITMAPINFO)VirtualAlloc( - NULL, - sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD), - MEM_COMMIT, - PAGE_READWRITE); + g_pFramebufferinfo = (LPBITMAPINFO) new BYTE[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)]; - ZeroMemory(g_pFramebufferinfo, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); + memset(g_pFramebufferinfo, 0, sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD)); g_pFramebufferinfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); g_pFramebufferinfo->bmiHeader.biWidth = GetFrameBufferWidth(); g_pFramebufferinfo->bmiHeader.biHeight = GetFrameBufferHeight(); @@ -114,7 +110,7 @@ void WinVideoDestroy() { // DESTROY BUFFERS - VirtualFree(g_pFramebufferinfo, 0, MEM_RELEASE); + delete [] g_pFramebufferinfo; g_pFramebufferinfo = NULL; // DESTROY FRAME BUFFER @@ -312,7 +308,7 @@ void VideoBenchmark () { void VideoChooseMonochromeColor () { CHOOSECOLOR cc; - ZeroMemory(&cc,sizeof(CHOOSECOLOR)); + memset(&cc, 0, sizeof(CHOOSECOLOR)); cc.lStructSize = sizeof(CHOOSECOLOR); cc.hwndOwner = g_hFrameWindow; cc.rgbResult = g_nMonochromeRGB; diff --git a/test/TestCPU6502/TestCPU6502.cpp b/test/TestCPU6502/TestCPU6502.cpp index 05289c27..2c3cf3a5 100644 --- a/test/TestCPU6502/TestCPU6502.cpp +++ b/test/TestCPU6502/TestCPU6502.cpp @@ -112,7 +112,8 @@ void NTSC_VideoUpdateCycles( long cycles6502 ) void init(void) { - mem = (LPBYTE)VirtualAlloc(NULL,64*1024,MEM_COMMIT,PAGE_READWRITE); + // memory must be zero initialised like MemInitiaize() does. + mem = (LPBYTE)calloc(64, 1024); for (UINT i=0; i<256; i++) memwrite[i] = mem+i*256;