From cbacd7e61db417ab8306620404353bf827a9ffc4 Mon Sep 17 00:00:00 2001 From: tomcw Date: Wed, 6 Mar 2024 21:38:18 +0000 Subject: [PATCH] A few changes in dtors --- source/LanguageCard.cpp | 17 +++++++++++------ source/LanguageCard.h | 2 +- source/Memory.cpp | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/source/LanguageCard.cpp b/source/LanguageCard.cpp index bcce7e75..cfcce48c 100644 --- a/source/LanguageCard.cpp +++ b/source/LanguageCard.cpp @@ -56,8 +56,9 @@ LanguageCardUnit::LanguageCardUnit(SS_CARDTYPE type, UINT slot) : LanguageCardUnit::~LanguageCardUnit(void) { - if (m_slot == SLOT0) - SetMemMainLanguageCard(NULL, SLOT0); + // Nothing to do for SetMemMainLanguageCard(): + // . if //e, then no ptr to clean up (since just using memmain) + // . else: subclass will do ptr clean up } void LanguageCardUnit::InitializeIO(LPBYTE pCxRomPeripheral) @@ -164,6 +165,8 @@ LanguageCardSlot0::~LanguageCardSlot0(void) { delete [] m_pMemory; m_pMemory = NULL; + if (m_slot == SLOT0) + SetMemMainLanguageCard(NULL, SLOT0); } // @@ -265,7 +268,7 @@ Saturn128K::Saturn128K(UINT slot, UINT banks) m_aSaturnBanks[i] = new BYTE[kMemBankSize]; // Saturn banks are 16K, max 8 banks/card if (slot == SLOT0) - SetMemMainLanguageCard(m_aSaturnBanks[m_uSaturnActiveBank], SLOT0); + ::SetMemMainLanguageCard(m_aSaturnBanks[m_uSaturnActiveBank], SLOT0); } Saturn128K::~Saturn128K(void) @@ -280,6 +283,8 @@ Saturn128K::~Saturn128K(void) m_aSaturnBanks[i] = NULL; } } + + // TODO: want the Saturn128K object that set the ptr via ::SetMemMainLanguageCard() to now set it to NULL (may be from SLOT0 or another slot) } UINT Saturn128K::GetActiveBank(void) @@ -338,7 +343,7 @@ BYTE __stdcall Saturn128K::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO pLC->m_uSaturnActiveBank = pLC->m_uSaturnTotalBanks-1; // FIXME: just prevent crash for now! } - SetMemMainLanguageCard(pLC->m_aSaturnBanks[pLC->m_uSaturnActiveBank], uSlot); + ::SetMemMainLanguageCard(pLC->m_aSaturnBanks[pLC->m_uSaturnActiveBank], uSlot); bBankChanged = true; } else @@ -464,9 +469,9 @@ bool Saturn128K::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version) return true; } -void Saturn128K::SetMainMemLanguageCard(void) +void Saturn128K::SetMemMainLanguageCard(void) { - SetMemMainLanguageCard(m_aSaturnBanks[m_uSaturnActiveBank], m_slot); + ::SetMemMainLanguageCard(m_aSaturnBanks[m_uSaturnActiveBank], m_slot); } void Saturn128K::SetSaturnMemorySize(UINT banks) diff --git a/source/LanguageCard.h b/source/LanguageCard.h index 88e3f0a3..bad7d982 100644 --- a/source/LanguageCard.h +++ b/source/LanguageCard.h @@ -85,7 +85,7 @@ public: virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper); virtual bool LoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT version); - void SetMainMemLanguageCard(void); + void SetMemMainLanguageCard(void); static UINT GetSaturnMemorySize(); static void SetSaturnMemorySize(UINT banks); diff --git a/source/Memory.cpp b/source/Memory.cpp index d2778e9d..3c291fa5 100644 --- a/source/Memory.cpp +++ b/source/Memory.cpp @@ -1786,7 +1786,7 @@ void MemInitializeFromSnapshot(void) if (GetCardMgr().QuerySlot(g_lastSlotToSetMainMemLCFromSnapshot) == CT_Saturn128K) { Saturn128K& saturn = dynamic_cast(GetCardMgr().GetRef(g_lastSlotToSetMainMemLCFromSnapshot)); - saturn.SetMainMemLanguageCard(); + saturn.SetMemMainLanguageCard(); } // Finally setup the paging tables