Skip to content

Commit

Permalink
Load save-state:
Browse files Browse the repository at this point in the history
. fix for II/II+ when VidHD's SHR is being updated (init memVidHD ptr).
. refactor to consolidate all Mem* related initialisation.
  • Loading branch information
tomcw committed Dec 23, 2021
1 parent 0f2d4b1 commit a727db7
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 14 deletions.
37 changes: 31 additions & 6 deletions source/Memory.cpp
Expand Up @@ -1731,22 +1731,45 @@ void MemInitializeIO(void)

// Called by:
// . Snapshot_LoadState_v2()
void MemInitializeCardSlotAndExpansionRomFromSnapshot(void)
void MemInitializeFromSnapshot(void)
{
MemInitializeROM();
MemInitializeCustomROM();
MemInitializeCustomF8ROM();
MemInitializeIO();

//
// Card and Expansion ROM
//

// Remove all the cards' ROMs at $Csnn if internal ROM is enabled
if (IsAppleIIeOrAbove(GetApple2Type()) && SW_INTCXROM)
IoHandlerCardsOut();

// Potentially init a card's expansion ROM
const UINT uSlot = g_uPeripheralRomSlot;

if (ExpansionRom[uSlot] == NULL)
return;
if (ExpansionRom[uSlot] != NULL)
{
_ASSERT(g_eExpansionRomType == eExpRomPeripheral);

_ASSERT(g_eExpansionRomType == eExpRomPeripheral);
memcpy(pCxRomPeripheral + 0x800, ExpansionRom[uSlot], FIRMWARE_EXPANSION_SIZE);
// NB. Copied to /mem/ by UpdatePaging(TRUE)
}

MemUpdatePaging(TRUE);

//
// VidHD
//

memcpy(pCxRomPeripheral+0x800, ExpansionRom[uSlot], FIRMWARE_EXPANSION_SIZE);
// NB. Copied to /mem/ by UpdatePaging(TRUE)
memVidHD = NULL;

if (IsApple2PlusOrClone(GetApple2Type()) && (GetCardMgr().QuerySlot(SLOT3) == CT_VidHD))
{
VidHDCard* vidHD = dynamic_cast<VidHDCard*>(GetCardMgr().GetObj(SLOT3));
memVidHD = vidHD->IsWriteAux() ? memaux : NULL;
}
}

inline DWORD getRandomTime()
Expand Down Expand Up @@ -1778,6 +1801,8 @@ void MemReset()

memset(memdirty, 0, 0x100);

memVidHD = NULL;

//

int iByte;
Expand Down
2 changes: 1 addition & 1 deletion source/Memory.h
Expand Up @@ -84,7 +84,7 @@ void MemInitializeROM(void);
void MemInitializeCustomROM(void);
void MemInitializeCustomF8ROM(void);
void MemInitializeIO(void);
void MemInitializeCardSlotAndExpansionRomFromSnapshot(void);
void MemInitializeFromSnapshot(void);
BYTE MemReadFloatingBus(const ULONG uExecutedCycles);
BYTE MemReadFloatingBus(const BYTE highbit, const ULONG uExecutedCycles);
void MemReset ();
Expand Down
8 changes: 1 addition & 7 deletions source/SaveState.cpp
Expand Up @@ -499,13 +499,7 @@ static void Snapshot_LoadState_v2(void)
const CConfigNeedingRestart configNew = CConfigNeedingRestart::Create();
GetPropertySheet().ApplyNewConfigFromSnapshot(configNew); // Saves new state to Registry (not slot/cards though)

MemInitializeROM();
MemInitializeCustomROM();
MemInitializeCustomF8ROM();
MemInitializeIO();
MemInitializeCardSlotAndExpansionRomFromSnapshot();

MemUpdatePaging(TRUE);
MemInitializeFromSnapshot();

DebugReset();
if (g_nAppMode == MODE_DEBUG)
Expand Down

0 comments on commit a727db7

Please sign in to comment.