Fix for loading save-state, to set global memmode

This commit is contained in:
tomcw 2024-03-10 11:14:34 +00:00
parent 43bac35c08
commit 55e87d9a5c
3 changed files with 18 additions and 10 deletions

View File

@ -52,7 +52,7 @@ LanguageCardUnit * LanguageCardUnit::create(UINT slot)
LanguageCardUnit::LanguageCardUnit(SS_CARDTYPE type, UINT slot) :
Card(type, slot),
m_uLastRamWrite(0),
m_memmode(kMemModeInitialState),
m_memMode(kMemModeInitialState),
m_pMemory(NULL)
{
if (type != CT_Saturn128K && m_slot != LanguageCardUnit::kSlot0)
@ -80,8 +80,8 @@ BYTE __stdcall LanguageCardUnit::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValu
LanguageCardUnit* pLC = (LanguageCardUnit*) MemGetSlotParameters(uSlot);
_ASSERT(uSlot == SLOT0);
DWORD memmode = pLC->GetLCMemMode();
DWORD lastmemmode = memmode;
UINT memmode = pLC->GetLCMemMode();
UINT lastmemmode = memmode;
memmode &= ~(MF_BANK2 | MF_HIGHRAM);
if (!(uAddr & 8))
@ -167,6 +167,11 @@ bool LanguageCardUnit::IsOpcodeRMWabs(WORD addr)
return false;
}
void LanguageCardUnit::SetGlobalLCMemMode(void)
{
SetMemMode((GetMemMode() & ~MF_LANGCARD_MASK) | (GetLCMemMode() & MF_LANGCARD_MASK));
}
//-------------------------------------
LanguageCardSlot0 * LanguageCardSlot0::create(UINT slot)
@ -213,15 +218,15 @@ const std::string& LanguageCardSlot0::GetSnapshotCardName(void)
void LanguageCardSlot0::SaveLCState(YamlSaveHelper& yamlSaveHelper)
{
yamlSaveHelper.SaveHexUint32(SS_YAML_KEY_MEMORYMODE, GetMemMode() & MF_LANGCARD_MASK);
yamlSaveHelper.SaveHexUint32(SS_YAML_KEY_MEMORYMODE, GetLCMemMode() & MF_LANGCARD_MASK);
yamlSaveHelper.SaveUint(SS_YAML_KEY_LASTRAMWRITE, GetLastRamWrite() ? 1 : 0);
}
void LanguageCardSlot0::LoadLCState(YamlLoadHelper& yamlLoadHelper)
{
DWORD memMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_MEMORYMODE) & MF_LANGCARD_MASK;
UINT memMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_MEMORYMODE) & MF_LANGCARD_MASK;
BOOL lastRamWrite = yamlLoadHelper.LoadUint(SS_YAML_KEY_LASTRAMWRITE) ? TRUE : FALSE;
SetMemMode( (GetMemMode() & ~MF_LANGCARD_MASK) | memMode );
SetLCMemMode(memMode);
SetLastRamWrite(lastRamWrite);
}
@ -347,7 +352,7 @@ BYTE __stdcall Saturn128K::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO
return bWrite ? 0 : MemReadFloatingBus(nExecutedCycles);
bool bBankChanged = false;
DWORD memmode=0, lastmemmode=0;
UINT memmode=0, lastmemmode=0;
if (uAddr & (1<<2))
{

View File

@ -26,8 +26,9 @@ public:
BOOL GetLastRamWrite(void) { return m_uLastRamWrite; }
void SetLastRamWrite(BOOL count) { m_uLastRamWrite = count; }
UINT GetLCMemMode(void) { return m_memmode; }
void SetLCMemMode(UINT memmode) { m_memmode = memmode; }
UINT GetLCMemMode(void) { return m_memMode; }
void SetLCMemMode(UINT memMode) { m_memMode = memMode; }
void SetGlobalLCMemMode(void);
SS_CARDTYPE GetMemoryType(void) { return QueryType(); }
bool IsOpcodeRMWabs(WORD addr);
@ -43,7 +44,7 @@ protected:
private:
UINT m_uLastRamWrite;
UINT m_memmode;
UINT m_memMode;
};
//

View File

@ -1794,6 +1794,8 @@ void MemInitializeFromSnapshot(void)
saturn.SetMemMainLanguageCard();
}
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(g_lastSlotToSetMainMemLCFromSnapshot)).SetGlobalLCMemMode();
// Finally setup the paging tables
MemUpdatePaging(TRUE);