Fixed an edge case when switching from IIe to II+, and the Mockingboard wasn't visible in memory.

. Due to INTCXROM still being set and it not being excluded when in II+ mode.
. Fix is to reinit memmode on restart and only check INTCXROM if IIe or above.
This commit is contained in:
tomcw 2020-06-07 18:25:34 +01:00
parent 41203f5d2d
commit 80eb33012f
2 changed files with 14 additions and 3 deletions

View File

@ -161,7 +161,7 @@ enum eIRQSRC {IS_6522=0, IS_SPEECH, IS_SSC, IS_MOUSE};
#define APPLECLONE_MASK 0x100
#define IS_APPLE2 ((g_Apple2Type & (APPLE2E_MASK|APPLE2C_MASK)) == 0)
#define IS_APPLE2E() (g_Apple2Type & APPLE2E_MASK)
//#define IS_APPLE2E() (g_Apple2Type & APPLE2E_MASK) // unused
#define IS_APPLE2C() (g_Apple2Type & APPLE2C_MASK)
#define IS_CLONE() (g_Apple2Type & APPLECLONE_MASK)
@ -218,6 +218,11 @@ inline bool IsApple2PlusOrClone(eApple2Type type) // Apple ][,][+,][J-Plus or cl
return (type & (APPLE2E_MASK|APPLE2C_MASK)) == 0;
}
inline bool IsAppleIIeOrAbove(eApple2Type type) // Apple //e,Enhanced//e,//c or clone //e,Enhanced//e
{
return !IsApple2PlusOrClone(type);
}
extern eApple2Type g_Apple2Type;
inline bool IsEnhancedIIE(void)
{

View File

@ -1499,6 +1499,12 @@ void MemInitialize()
CreateLanguageCard();
// Reinit memmode on a restart (eg. h/w config changes)
if (IsApple2PlusOrClone(GetApple2Type()) && g_CardMgr.QuerySlot(SLOT0) == CT_Empty)
SetMemMode(0);
else
SetMemMode(LanguageCardUnit::kMemModeInitialState);
MemInitializeROM();
MemInitializeCustomROM();
MemInitializeCustomF8ROM();
@ -1768,7 +1774,7 @@ void MemInitializeIO(void)
// Finally remove the cards' ROMs at $Csnn if internal ROM is enabled
// . required when restoring saved-state
if (SW_INTCXROM)
if (IsAppleIIeOrAbove(GetApple2Type()) && SW_INTCXROM)
IoHandlerCardsOut();
}
@ -2092,7 +2098,7 @@ BYTE __stdcall MemSetPaging(WORD programcounter, WORD address, BYTE write, BYTE
bool MemOptimizeForModeChanging(WORD programcounter, WORD address)
{
if (IS_APPLE2E())
if (IsAppleIIeOrAbove(GetApple2Type()))
{
// IF THE EMULATED PROGRAM HAS JUST UPDATED THE MEMORY WRITE MODE AND IS
// ABOUT TO UPDATE THE MEMORY READ MODE, HOLD OFF ON ANY PROCESSING UNTIL