From f93fc25d54424df7bcbd1144dfd16aaa3d052ef5 Mon Sep 17 00:00:00 2001 From: tomch Date: Fri, 26 Apr 2013 21:55:45 +0000 Subject: [PATCH] 1.22.1.5: . Allow debugging of save-state image from start-up "logo" screen. . Fixed inserting of disk images from save-state when drive-2 contained the disk required for drive-1. --- AppleWin/docs/History.txt | 12 +++++------- AppleWin/resource/Applewin.rc | 8 ++++---- AppleWin/source/Applewin.cpp | 21 ++++++++++++++++++++- AppleWin/source/Applewin.h | 2 ++ AppleWin/source/Disk.cpp | 11 ++++++----- AppleWin/source/Frame.cpp | 3 ++- AppleWin/source/Memory.cpp | 13 +++++++++++++ AppleWin/source/Memory.h | 1 + AppleWin/source/SaveState.cpp | 2 ++ 9 files changed, 55 insertions(+), 18 deletions(-) diff --git a/AppleWin/docs/History.txt b/AppleWin/docs/History.txt index 0a071b73..3631cf69 100644 --- a/AppleWin/docs/History.txt +++ b/AppleWin/docs/History.txt @@ -13,19 +13,17 @@ Tom Charlesworth tomch at users.berlios.de -Restrictions/bugs: -- SSI263 emulation is very basic: there is no attempt to emulate rate, inflection or filters. -- During Mockingboard playback, Speaker emulation isn't precise. - -1.22.1.4 - 28 Mar 2013 +1.22.1.5 - 26 Apr 2013 ---------------------- Changes: -. Extended logging support. +. Extended logging support during startup and shutdown. +. Allow debugging of save-state image from start-up "logo" screen. Fixes: . Screenshot 280x192: - [Bug #018928] Correction for left edge loss of scaled scanline. - - In 50% scanline mode got an all black image. + - A screenshot in 50% scanline mode would produce an all black image. +. Fixed inserting of disk images from save-state when drive-2 contained the disk required for drive-1. 1.22.1 - 7 Mar 2013 -------------------- diff --git a/AppleWin/resource/Applewin.rc b/AppleWin/resource/Applewin.rc index e7b2fc16..558d4ce8 100644 --- a/AppleWin/resource/Applewin.rc +++ b/AppleWin/resource/Applewin.rc @@ -253,8 +253,8 @@ DISK_ICON ICON "DISK.ICO" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,22,1,4 - PRODUCTVERSION 1,22,1,4 + FILEVERSION 1,22,1,5 + PRODUCTVERSION 1,22,1,5 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -272,12 +272,12 @@ BEGIN VALUE "Comments", "http://applewin.berlios.de" VALUE "CompanyName", "AppleWin" VALUE "FileDescription", "Apple //e Emulator for Windows" - VALUE "FileVersion", "1, 22, 1, 4" + VALUE "FileVersion", "1, 22, 1, 5" VALUE "InternalName", "APPLEWIN" VALUE "LegalCopyright", " 1994-2013 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis" VALUE "OriginalFilename", "APPLEWIN.EXE" VALUE "ProductName", "Apple //e Emulator" - VALUE "ProductVersion", "1, 22, 1, 4" + VALUE "ProductVersion", "1, 22, 1, 5" END END BLOCK "VarFileInfo" diff --git a/AppleWin/source/Applewin.cpp b/AppleWin/source/Applewin.cpp index fa6cf7ab..607bc1a7 100644 --- a/AppleWin/source/Applewin.cpp +++ b/AppleWin/source/Applewin.cpp @@ -61,6 +61,7 @@ bool P8Shift = false; HINSTANCE g_hInstance = (HINSTANCE)0; AppMode_e g_nAppMode = MODE_LOGO; +static bool g_bLoadedSaveState = false; static int lastmode = MODE_LOGO; DWORD needsprecision = 0; // Redundant @@ -113,6 +114,24 @@ ULONGLONG g_nPerfFreq = 0; //--------------------------------------------------------------------------- +bool GetLoadedSaveStateFlag(void) +{ + return g_bLoadedSaveState; +} + +void SetLoadedSaveStateFlag(const bool bFlag) +{ + g_bLoadedSaveState = bFlag; +} + +static void ResetToLogoMode(void) +{ + g_nAppMode = MODE_LOGO; + SetLoadedSaveStateFlag(false); +} + +//--------------------------------------------------------------------------- + static bool g_bPriorityNormal = true; // Make APPLEWIN process higher priority @@ -955,7 +974,7 @@ int APIENTRY WinMain(HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int) { // DO INITIALIZATION THAT MUST BE REPEATED FOR A RESTART restart = 0; - g_nAppMode = MODE_LOGO; + ResetToLogoMode(); LoadConfiguration(); LogFileOutput("Main: LoadConfiguration()\n"); diff --git a/AppleWin/source/Applewin.h b/AppleWin/source/Applewin.h index 8de9c0c8..924efea2 100644 --- a/AppleWin/source/Applewin.h +++ b/AppleWin/source/Applewin.h @@ -25,6 +25,8 @@ extern bool P8Shift; extern HINSTANCE g_hInstance; extern AppMode_e g_nAppMode; +bool GetLoadedSaveStateFlag(void); +void SetLoadedSaveStateFlag(const bool bFlag); extern DWORD needsprecision; extern TCHAR g_sProgramDir[MAX_PATH]; diff --git a/AppleWin/source/Disk.cpp b/AppleWin/source/Disk.cpp index fa90df14..b1474be7 100644 --- a/AppleWin/source/Disk.cpp +++ b/AppleWin/source/Disk.cpp @@ -1049,18 +1049,18 @@ DWORD DiskSetSnapshot(SS_CARD_DISK2* pSS, DWORD /*dwSlot*/) floppymotoron = pSS->floppymotoron; floppywritemode = pSS->floppywritemode; + // Eject all disks first in case Drive-2 contains disk to be inserted into Drive-1 for(UINT i=0; iUnit[i].szFileName[0] == 0x00) continue; - // - DWORD dwAttributes = GetFileAttributes(pSS->Unit[i].szFileName); if(dwAttributes == INVALID_FILE_ATTRIBUTES) { @@ -1070,6 +1070,7 @@ DWORD DiskSetSnapshot(SS_CARD_DISK2* pSS, DWORD /*dwSlot*/) dwAttributes = GetFileAttributes(pSS->Unit[i].szFileName); } + bool bImageError = false; if(dwAttributes != INVALID_FILE_ATTRIBUTES) { if(DiskInsert(i, pSS->Unit[i].szFileName, dwAttributes & FILE_ATTRIBUTE_READONLY, IMAGE_DONT_CREATE) != eIMAGE_ERROR_NONE) diff --git a/AppleWin/source/Frame.cpp b/AppleWin/source/Frame.cpp index 8903cd09..d4fc1275 100644 --- a/AppleWin/source/Frame.cpp +++ b/AppleWin/source/Frame.cpp @@ -1551,10 +1551,11 @@ void ProcessButtonClick (int button) break; case BTN_DEBUG: - if (g_nAppMode == MODE_LOGO) + if (g_nAppMode == MODE_LOGO && !GetLoadedSaveStateFlag()) { ResetMachineState(); } + // Allow F7 to enter debugger even though emulator isn't "running" if (g_nAppMode == MODE_STEPPING) { diff --git a/AppleWin/source/Memory.cpp b/AppleWin/source/Memory.cpp index 0098b2af..58a2bbf2 100644 --- a/AppleWin/source/Memory.cpp +++ b/AppleWin/source/Memory.cpp @@ -1023,6 +1023,19 @@ LPBYTE MemGetMainPtr (WORD offset) //=========================================================================== +LPBYTE MemGetBankPtr(const UINT nBank) +{ + if (nBank == 0) + return mem; + + if (nBank > g_uMaxExPages) + return NULL; + + return RWpages[nBank-1]; +} + +//=========================================================================== + LPBYTE MemGetCxRomPeripheral() { return pCxRomPeripheral; diff --git a/AppleWin/source/Memory.h b/AppleWin/source/Memory.h index 11484375..ef9989d3 100644 --- a/AppleWin/source/Memory.h +++ b/AppleWin/source/Memory.h @@ -38,6 +38,7 @@ bool MemGet80Store(); bool MemCheckSLOTCXROM(); LPBYTE MemGetAuxPtr (WORD); LPBYTE MemGetMainPtr (WORD); +LPBYTE MemGetBankPtr(const UINT nBank); LPBYTE MemGetCxRomPeripheral(); void MemInitialize (); BYTE MemReadFloatingBus(const ULONG uExecutedCycles); diff --git a/AppleWin/source/SaveState.cpp b/AppleWin/source/SaveState.cpp index 7713303a..5e1e1819 100644 --- a/AppleWin/source/SaveState.cpp +++ b/AppleWin/source/SaveState.cpp @@ -149,6 +149,8 @@ void Snapshot_LoadState() // // Slot6: Disk][ DiskSetSnapshot(&pSS->Disk2, 6); + + SetLoadedSaveStateFlag(true); } catch(int) {