diff --git a/source/Debugger/Debugger_Display.cpp b/source/Debugger/Debugger_Display.cpp index 7febe15c..eaf033dc 100644 --- a/source/Debugger/Debugger_Display.cpp +++ b/source/Debugger/Debugger_Display.cpp @@ -2794,7 +2794,7 @@ void _DrawTriStateSoftSwitch( RECT & rect, int nAddress, int iDisplay, int iActi else // Main Memory is active, or Bank # is not active { RECT temp = rect; - int iBank = (memmode & MF_BANK2) + int iBank = (GetMemMode() & MF_BANK2) ? 2 : 1 ; @@ -2858,9 +2858,9 @@ void _DrawSoftSwitchLanguageCardBank( RECT & rect, int iBankDisplay, int bg_defa // 0 = RAM // 1 = Bank 1 // 2 = Bank 2 - bool bBankWritable = (memmode & MF_WRITERAM) ? 1 : 0; - int iBankActive = (memmode & MF_HIGHRAM) - ? (memmode & MF_BANK2) + bool bBankWritable = (GetMemMode() & MF_WRITERAM) ? 1 : 0; + int iBankActive = (GetMemMode() & MF_HIGHRAM) + ? (GetMemMode() & MF_BANK2) ? 2 : 1 : 0 @@ -2959,8 +2959,8 @@ void _DrawSoftSwitchMainAuxBanks( RECT & rect, int bg_default = BG_INFO ) int dx = 7 * w; int nAddress = 0xC002; - bool bMainRead = (memmode & MF_AUXREAD) ? true : false; - bool bAuxWrite = (memmode & MF_AUXWRITE) ? true : false; + bool bMainRead = (GetMemMode() & MF_AUXREAD) ? true : false; + bool bAuxWrite = (GetMemMode() & MF_AUXWRITE) ? true : false; temp.right = rect.left + dx; _DrawSoftSwitch( temp, nAddress, !bMainRead, "R", "m", "x", NULL, BG_DATA_2 ); diff --git a/source/Frame.cpp b/source/Frame.cpp index efcd19fc..64e498e8 100644 --- a/source/Frame.cpp +++ b/source/Frame.cpp @@ -2174,19 +2174,27 @@ void ResetMachineState () //=========================================================================== +/* + * In comments, UTAII is an abbreviation for a reference to "Understanding the Apple II" by James Sather + */ + // todo: consolidate CtrlReset() and ResetMachineState() +// Ctrl+Reset - TODO: This is a terrible place for this code! Should be in AppleWin.cpp void CtrlReset() { - // Ctrl+Reset - TODO: This is a terrible place for this code! - if (!IS_APPLE2) // TODO: Why not for A][ & A][+ too? + if (!IS_APPLE2) + { + // For A][ & A][+, reset doesn't reset the LC switches (UTAII:5-29) MemResetPaging(); + // For A][ & A][+, reset doesn't reset the video mode (UTAII:4-4) + VideoResetState(); // Switch Alternate char set off + } + PravetsReset(); DiskReset(); HD_Reset(); KeybReset(); - if (!IS_APPLE2) // TODO: Why not for A][ & A][+ too? - VideoResetState(); // Switch Alternate char set off sg_SSC.CommReset(); MB_Reset(); sg_Mouse.Reset(); // Deassert any pending IRQs - GH#514 diff --git a/source/Memory.cpp b/source/Memory.cpp index e13e502d..171c99cf 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -178,7 +178,8 @@ static LPBYTE memimage = NULL; static LPBYTE pCxRomInternal = NULL; static LPBYTE pCxRomPeripheral = NULL; - DWORD memmode = MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM; // 2.9.0.4 now global as Debugger needs access for LC status info in DrawSoftSwitches() +static const DWORD kMemModeInitialState = MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM; +static DWORD memmode = kMemModeInitialState; static BOOL modechanging = 0; // An Optimisation: means delay calling UpdatePaging() for 1 instruction static BOOL Pravets8charmode = 0; @@ -824,6 +825,11 @@ static void BackMainImage(void) //=========================================================================== +DWORD GetMemMode(void) +{ + return memmode; +} + static void SetMemMode(const DWORD uNewMemMode) { #if defined(_DEBUG) && 0 @@ -860,7 +866,7 @@ static void ResetPaging(BOOL initialize); static void UpdatePaging(BOOL initialize); // Call by: -// . CtrlReset() Soft-reset (Ctrl+Reset) +// . CtrlReset() Soft-reset (Ctrl+Reset) for //e void MemResetPaging() { ResetPaging(0); // Initialize=0 @@ -869,7 +875,7 @@ void MemResetPaging() static void ResetPaging(BOOL initialize) { g_bLastWriteRam = 0; - SetMemMode(MF_BANK2 | MF_SLOTCXROM | MF_WRITERAM); + SetMemMode(kMemModeInitialState); UpdatePaging(initialize); } diff --git a/source/Memory.h b/source/Memory.h index c43fc1f8..60bfd61d 100644 --- a/source/Memory.h +++ b/source/Memory.h @@ -56,7 +56,6 @@ extern iofunction IOWrite[256]; extern LPBYTE memwrite[0x100]; extern LPBYTE mem; extern LPBYTE memdirty; -extern DWORD memmode; #ifdef RAMWORKS const UINT kMaxExMemoryBanks = 127; // 127 * aux mem(64K) + main mem(64K) = 8MB @@ -78,6 +77,7 @@ LPBYTE MemGetAuxPtr(const WORD); LPBYTE MemGetMainPtr(const WORD); LPBYTE MemGetBankPtr(const UINT nBank); LPBYTE MemGetCxRomPeripheral(); +DWORD GetMemMode(void); bool MemIsAddrCodeMemory(const USHORT addr); void MemInitialize (); void MemInitializeROM(void);