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

View File

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

View File

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