Save-state: Fix for when SSC's expansion ROM is active and PC is running in this space (GH#486)

This commit is contained in:
tomcw 2017-09-22 22:23:13 +01:00
parent 72dc573ce1
commit 3a5bf012f1
3 changed files with 20 additions and 1 deletions

View file

@ -921,7 +921,8 @@ static void UpdatePaging(BOOL initialize)
for (loop = 0xC8; loop < 0xD0; loop++)
{
const UINT uRomOffset = (loop & 0x0f) * 0x100;
memshadow[loop] = pCxRomInternal+uRomOffset; // C800..CFFF - Internal ROM
memshadow[loop] = (SW_SLOTCXROM && !INTC8ROM) ? pCxRomPeripheral+uRomOffset // C800..CFFF - Peripheral ROM (GH#486)
: pCxRomInternal+uRomOffset; // C800..CFFF - Internal ROM
}
for (loop = 0xD0; loop < 0xE0; loop++)
@ -1430,6 +1431,21 @@ void MemInitializeIO(void)
IoHandlerCardsOut();
}
// Called by:
// . Snapshot_LoadState_v2()
void MemInitializeCardExpansionRomFromSnapshot(void)
{
const UINT uSlot = g_uPeripheralRomSlot;
if (ExpansionRom[uSlot] == NULL)
return;
_ASSERT(g_eExpansionRomType == eExpRomPeripheral);
memcpy(pCxRomPeripheral+0x800, ExpansionRom[uSlot], FIRMWARE_EXPANSION_SIZE);
// NB. Copied to /mem/ by UpdatePaging(TRUE)
}
inline DWORD getRandomTime()
{
return rand() ^ timeGetTime(); // We can't use g_nCumulativeCycles as it will be zero on a fresh execution.
@ -1950,6 +1966,7 @@ bool MemLoadSnapshot(YamlLoadHelper& yamlLoadHelper)
modechanging = 0;
// NB. MemUpdatePaging(TRUE) called at end of Snapshot_LoadState_v2()
UpdatePaging(1); // Initialize=1 (Still needed, even with call to MemUpdatePaging() - why?)
// TC-TODO: At this point, the cards haven't been loaded, so the card's expansion ROM is unknown - so pointless(?) calling this now
return true;
}

View file

@ -84,6 +84,7 @@ void MemInitialize ();
void MemInitializeROM(void);
void MemInitializeCustomF8ROM(void);
void MemInitializeIO(void);
void MemInitializeCardExpansionRomFromSnapshot(void);
BYTE MemReadFloatingBus(const ULONG uExecutedCycles);
BYTE MemReadFloatingBus(const BYTE highbit, const ULONG uExecutedCycles);
void MemReset ();

View file

@ -523,6 +523,7 @@ static void Snapshot_LoadState_v2(void)
MemInitializeROM();
MemInitializeCustomF8ROM();
MemInitializeIO();
MemInitializeCardExpansionRomFromSnapshot();
MemUpdatePaging(TRUE);
}