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:
parent
72dc573ce1
commit
3a5bf012f1
3 changed files with 20 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 ();
|
||||
|
|
|
@ -523,6 +523,7 @@ static void Snapshot_LoadState_v2(void)
|
|||
MemInitializeROM();
|
||||
MemInitializeCustomF8ROM();
|
||||
MemInitializeIO();
|
||||
MemInitializeCardExpansionRomFromSnapshot();
|
||||
|
||||
MemUpdatePaging(TRUE);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue