From 55e87d9a5c7bc218b9d80dff020c3c8238fbadfe Mon Sep 17 00:00:00 2001 From: tomcw Date: Sun, 10 Mar 2024 11:14:34 +0000 Subject: [PATCH] Fix for loading save-state, to set global memmode --- source/LanguageCard.cpp | 19 ++++++++++++------- source/LanguageCard.h | 7 ++++--- source/Memory.cpp | 2 ++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/source/LanguageCard.cpp b/source/LanguageCard.cpp index fb42ffd8..3dce7c15 100644 --- a/source/LanguageCard.cpp +++ b/source/LanguageCard.cpp @@ -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)) { diff --git a/source/LanguageCard.h b/source/LanguageCard.h index 74fa7114..bc2bb054 100644 --- a/source/LanguageCard.h +++ b/source/LanguageCard.h @@ -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; }; // diff --git a/source/Memory.cpp b/source/Memory.cpp index 171d4d5d..9afd4b21 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -1794,6 +1794,8 @@ void MemInitializeFromSnapshot(void) saturn.SetMemMainLanguageCard(); } + dynamic_cast(GetCardMgr().GetRef(g_lastSlotToSetMainMemLCFromSnapshot)).SetGlobalLCMemMode(); + // Finally setup the paging tables MemUpdatePaging(TRUE);