mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-06-09 07:29:33 +00:00
Fix for loading save-state, to set global memmode
This commit is contained in:
parent
43bac35c08
commit
55e87d9a5c
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user