mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-05-28 17:41:37 +00:00
Add LanguageCardManager class
This commit is contained in:
parent
37c031c193
commit
729cd56093
|
@ -116,21 +116,16 @@ void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
|
||||||
m_slot[slot] = new Uthernet2(slot);
|
m_slot[slot] = new Uthernet2(slot);
|
||||||
break;
|
break;
|
||||||
case CT_LanguageCard:
|
case CT_LanguageCard:
|
||||||
_ASSERT(m_pLanguageCard == NULL);
|
|
||||||
if (m_pLanguageCard) break; // Only support one language card
|
|
||||||
m_slot[slot] = m_pLanguageCard = LanguageCardSlot0::create(slot);
|
|
||||||
break;
|
|
||||||
case CT_LanguageCardIIe:
|
case CT_LanguageCardIIe:
|
||||||
_ASSERT(m_pLanguageCard == NULL);
|
_ASSERT(slot == SLOT0);
|
||||||
if (m_pLanguageCard) break; // Only support one language card
|
if (GetLanguageCardMgr().SetLanguageCard(type))
|
||||||
m_slot[slot] = m_pLanguageCard = LanguageCardUnit::create(slot);
|
m_slot[SLOT0] = GetLanguageCardMgr().GetLanguageCard();
|
||||||
break;
|
break;
|
||||||
case CT_Saturn128K:
|
case CT_Saturn128K:
|
||||||
if (slot == SLOT0)
|
if (slot == SLOT0)
|
||||||
{
|
{
|
||||||
_ASSERT(m_pLanguageCard == NULL);
|
if (GetLanguageCardMgr().SetLanguageCard(type))
|
||||||
if (m_pLanguageCard) break; // Only support one language card
|
m_slot[SLOT0] = GetLanguageCardMgr().GetLanguageCard();
|
||||||
m_slot[slot] = m_pLanguageCard = new Saturn128K(slot, Saturn128K::GetSaturnMemorySize());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -173,11 +168,11 @@ void CardManager::RemoveInternal(UINT slot)
|
||||||
case CT_LanguageCard:
|
case CT_LanguageCard:
|
||||||
case CT_LanguageCardIIe:
|
case CT_LanguageCardIIe:
|
||||||
_ASSERT(slot == SLOT0);
|
_ASSERT(slot == SLOT0);
|
||||||
m_pLanguageCard = NULL;
|
GetLanguageCardMgr().SetLanguageCard(CT_Empty);
|
||||||
break;
|
break;
|
||||||
case CT_Saturn128K:
|
case CT_Saturn128K:
|
||||||
if (slot == SLOT0)
|
if (slot == SLOT0)
|
||||||
m_pLanguageCard = NULL;
|
GetLanguageCardMgr().SetLanguageCard(CT_Empty);
|
||||||
break;
|
break;
|
||||||
case CT_Z80:
|
case CT_Z80:
|
||||||
m_pZ80Card = NULL;
|
m_pZ80Card = NULL;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "Card.h"
|
#include "Card.h"
|
||||||
#include "Disk2CardManager.h"
|
#include "Disk2CardManager.h"
|
||||||
|
#include "LanguageCard.h"
|
||||||
#include "MockingboardCardManager.h"
|
#include "MockingboardCardManager.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
|
@ -11,7 +12,6 @@ public:
|
||||||
CardManager(void) :
|
CardManager(void) :
|
||||||
m_pMouseCard(NULL),
|
m_pMouseCard(NULL),
|
||||||
m_pSSC(NULL),
|
m_pSSC(NULL),
|
||||||
m_pLanguageCard(NULL),
|
|
||||||
m_pParallelPrinterCard(NULL),
|
m_pParallelPrinterCard(NULL),
|
||||||
m_pZ80Card(NULL)
|
m_pZ80Card(NULL)
|
||||||
{
|
{
|
||||||
|
@ -53,6 +53,7 @@ public:
|
||||||
//
|
//
|
||||||
|
|
||||||
Disk2CardManager& GetDisk2CardMgr(void) { return m_disk2CardMgr; }
|
Disk2CardManager& GetDisk2CardMgr(void) { return m_disk2CardMgr; }
|
||||||
|
LanguageCardManager& GetLanguageCardMgr(void) { return m_languageCardMgr; }
|
||||||
MockingboardCardManager& GetMockingboardCardMgr(void) { return m_mockingboardCardMgr; }
|
MockingboardCardManager& GetMockingboardCardMgr(void) { return m_mockingboardCardMgr; }
|
||||||
class CMouseInterface* GetMouseCard(void) { return m_pMouseCard; }
|
class CMouseInterface* GetMouseCard(void) { return m_pMouseCard; }
|
||||||
bool IsMouseCardInstalled(void) { return m_pMouseCard != NULL; }
|
bool IsMouseCardInstalled(void) { return m_pMouseCard != NULL; }
|
||||||
|
@ -61,8 +62,6 @@ public:
|
||||||
class ParallelPrinterCard* GetParallelPrinterCard(void) { return m_pParallelPrinterCard; }
|
class ParallelPrinterCard* GetParallelPrinterCard(void) { return m_pParallelPrinterCard; }
|
||||||
bool IsParallelPrinterCardInstalled(void) { return m_pParallelPrinterCard != NULL; }
|
bool IsParallelPrinterCardInstalled(void) { return m_pParallelPrinterCard != NULL; }
|
||||||
|
|
||||||
class LanguageCardUnit* GetLanguageCard(void) { return m_pLanguageCard; }
|
|
||||||
|
|
||||||
void InitializeIO(LPBYTE pCxRomPeripheral);
|
void InitializeIO(LPBYTE pCxRomPeripheral);
|
||||||
void Destroy(void);
|
void Destroy(void);
|
||||||
void Reset(const bool powerCycle);
|
void Reset(const bool powerCycle);
|
||||||
|
@ -78,10 +77,10 @@ private:
|
||||||
Card* m_slot[NUM_SLOTS];
|
Card* m_slot[NUM_SLOTS];
|
||||||
Card* m_aux;
|
Card* m_aux;
|
||||||
Disk2CardManager m_disk2CardMgr;
|
Disk2CardManager m_disk2CardMgr;
|
||||||
|
LanguageCardManager m_languageCardMgr;
|
||||||
MockingboardCardManager m_mockingboardCardMgr;
|
MockingboardCardManager m_mockingboardCardMgr;
|
||||||
class CMouseInterface* m_pMouseCard;
|
class CMouseInterface* m_pMouseCard;
|
||||||
class CSuperSerialCard* m_pSSC;
|
class CSuperSerialCard* m_pSSC;
|
||||||
class LanguageCardUnit* m_pLanguageCard;
|
|
||||||
class ParallelPrinterCard* m_pParallelPrinterCard;
|
class ParallelPrinterCard* m_pParallelPrinterCard;
|
||||||
class Z80Card* m_pZ80Card;
|
class Z80Card* m_pZ80Card;
|
||||||
};
|
};
|
||||||
|
|
|
@ -2594,7 +2594,7 @@ void _DrawSoftSwitchLanguageCardBank( RECT & rect, const int iBankDisplay, int b
|
||||||
int iActiveBank = -1;
|
int iActiveBank = -1;
|
||||||
char cMemType = '?'; // Default to RAMWORKS
|
char cMemType = '?'; // Default to RAMWORKS
|
||||||
if (GetCurrentExpansionMemType() == CT_RamWorksIII) { cMemType = 'r'; iActiveBank = GetRamWorksActiveBank(); }
|
if (GetCurrentExpansionMemType() == CT_RamWorksIII) { cMemType = 'r'; iActiveBank = GetRamWorksActiveBank(); }
|
||||||
if (GetCurrentExpansionMemType() == CT_Saturn128K) { cMemType = 's'; iActiveBank = GetCardMgr().GetLanguageCard()->GetActiveBank(); }
|
if (GetCurrentExpansionMemType() == CT_Saturn128K) { cMemType = 's'; iActiveBank = GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->GetActiveBank(); }
|
||||||
|
|
||||||
if (iActiveBank >= 0)
|
if (iActiveBank >= 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -44,16 +44,12 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
* Also see UTAII 6-6, where Firmware card and 16K RAM card are described.
|
* Also see UTAII 6-6, where Firmware card and 16K RAM card are described.
|
||||||
* . Sather refers to the Apple 16K RAM card, which is just the Apple Language Card.
|
* . Sather refers to the Apple 16K RAM card, which is just the Apple Language Card.
|
||||||
*
|
*
|
||||||
* Note: Consider adding a LangauageCardManager class:
|
|
||||||
* . would manage g_lastSlotToSetMainMemLC (so move out of Memory.cpp)
|
|
||||||
* . would manage reset for all cards (eg. II/II+'s LC is unaffected, whereas //e's LC is)
|
|
||||||
* . assist with debugger's display of "sNN" for active 16K bank
|
|
||||||
* Currently conclude that there's not much point.
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "StdAfx.h"
|
#include "StdAfx.h"
|
||||||
|
|
||||||
#include "LanguageCard.h"
|
#include "LanguageCard.h"
|
||||||
|
#include "CardManager.h"
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
#include "CPU.h" // GH#700
|
#include "CPU.h" // GH#700
|
||||||
#include "Log.h"
|
#include "Log.h"
|
||||||
|
@ -128,7 +124,7 @@ BYTE __stdcall LanguageCardUnit::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValu
|
||||||
pLC->SetLastRamWrite( ((uAddr & 1) && !bWrite) ); // UTAIIe:5-23
|
pLC->SetLastRamWrite( ((uAddr & 1) && !bWrite) ); // UTAIIe:5-23
|
||||||
pLC->SetLCMemMode(memmode);
|
pLC->SetLCMemMode(memmode);
|
||||||
|
|
||||||
const bool bCardChanged = GetLastSlotToSetMainMemLC() != SLOT0;
|
const bool bCardChanged = GetCardMgr().GetLanguageCardMgr().GetLastSlotToSetMainMemLC() != SLOT0;
|
||||||
if (bCardChanged)
|
if (bCardChanged)
|
||||||
{
|
{
|
||||||
if (pLC->QueryType() == CT_LanguageCardIIe)
|
if (pLC->QueryType() == CT_LanguageCardIIe)
|
||||||
|
@ -410,7 +406,7 @@ BYTE __stdcall Saturn128K::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO
|
||||||
pLC->SetLastRamWrite(uAddr & 1); // Saturn differs from Apple's 16K LC: any access (LC is read-only)
|
pLC->SetLastRamWrite(uAddr & 1); // Saturn differs from Apple's 16K LC: any access (LC is read-only)
|
||||||
pLC->SetLCMemMode(memmode);
|
pLC->SetLCMemMode(memmode);
|
||||||
|
|
||||||
bBankChanged = GetLastSlotToSetMainMemLC() != uSlot;
|
bBankChanged = GetCardMgr().GetLanguageCardMgr().GetLastSlotToSetMainMemLC() != uSlot;
|
||||||
if (bBankChanged)
|
if (bBankChanged)
|
||||||
{
|
{
|
||||||
::SetMemMainLanguageCard(pLC->m_aSaturnBanks[pLC->m_uSaturnActiveBank], uSlot);
|
::SetMemMainLanguageCard(pLC->m_aSaturnBanks[pLC->m_uSaturnActiveBank], uSlot);
|
||||||
|
@ -529,3 +525,80 @@ UINT Saturn128K::GetSaturnMemorySize()
|
||||||
{
|
{
|
||||||
return g_uSaturnBanksFromCmdLine;
|
return g_uSaturnBanksFromCmdLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------------------
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LangauageCardManager:
|
||||||
|
* . manage reset for all cards (eg. II/II+'s LC is unaffected, whereas //e's LC is)
|
||||||
|
* . manage lastSlotToSetMainMemLC
|
||||||
|
* . TODO: assist with debugger's display of "sNN" for active 16K bank
|
||||||
|
*/
|
||||||
|
|
||||||
|
void LanguageCardManager::Reset(const bool powerCycle /*=false*/)
|
||||||
|
{
|
||||||
|
if (GetLanguageCard())
|
||||||
|
GetLanguageCard()->SetLastRamWrite(0);
|
||||||
|
|
||||||
|
if (IsApple2PlusOrClone(GetApple2Type()) && GetCardMgr().QuerySlot(SLOT0) == CT_Empty)
|
||||||
|
SetMemMode(0);
|
||||||
|
else
|
||||||
|
SetMemMode(LanguageCardUnit::kMemModeInitialState);
|
||||||
|
|
||||||
|
// For power on: card's ctor will have set card's local memmode to LanguageCardUnit::kMemModeInitialState.
|
||||||
|
// For reset: II/II+ unaffected, so only for //e or above.
|
||||||
|
if (IsAppleIIeOrAbove(GetApple2Type()))
|
||||||
|
{
|
||||||
|
if (GetCardMgr().QuerySlot(SLOT0) != CT_Empty) // LC or Saturn
|
||||||
|
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(SLOT0)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
||||||
|
for (UINT i = SLOT1; i < NUM_SLOTS; i++)
|
||||||
|
{
|
||||||
|
if (GetCardMgr().QuerySlot(i) == CT_Saturn128K)
|
||||||
|
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(i)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void LanguageCardManager::SetMemModeFromSnapshot(void)
|
||||||
|
{
|
||||||
|
// If multiple "Language Cards" (eg. LC+Saturn or 2xSaturn) then setup via the last card that selected the 16KB LC bank.
|
||||||
|
// NB. Skip if not Saturn card (ie. a LC), since LC's are only in slot0 and in the ctor it has called SetMainMemLanguageCard()
|
||||||
|
if (GetCardMgr().QuerySlot(m_lastSlotToSetMainMemLCFromSnapshot) == CT_Saturn128K)
|
||||||
|
{
|
||||||
|
Saturn128K& saturn = dynamic_cast<Saturn128K&>(GetCardMgr().GetRef(m_lastSlotToSetMainMemLCFromSnapshot));
|
||||||
|
saturn.SetMemMainLanguageCard();
|
||||||
|
}
|
||||||
|
|
||||||
|
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(m_lastSlotToSetMainMemLCFromSnapshot)).SetGlobalLCMemMode();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LanguageCardManager::SetLanguageCard(SS_CARDTYPE type)
|
||||||
|
{
|
||||||
|
if (type == CT_Empty)
|
||||||
|
{
|
||||||
|
m_pLanguageCard = NULL;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_ASSERT(GetLanguageCard() == NULL);
|
||||||
|
if (GetLanguageCard())
|
||||||
|
return false; // Only support one language card
|
||||||
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case CT_LanguageCard:
|
||||||
|
m_pLanguageCard = LanguageCardSlot0::create(SLOT0);
|
||||||
|
break;
|
||||||
|
case CT_LanguageCardIIe:
|
||||||
|
m_pLanguageCard = LanguageCardUnit::create(SLOT0);
|
||||||
|
break;
|
||||||
|
case CT_Saturn128K:
|
||||||
|
m_pLanguageCard = new Saturn128K(SLOT0, Saturn128K::GetSaturnMemorySize());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
_ASSERT(0);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -18,7 +18,6 @@ public:
|
||||||
virtual void Reset(const bool powerCycle) {}
|
virtual void Reset(const bool powerCycle) {}
|
||||||
virtual void Update(const ULONG nExecutedCycles) {}
|
virtual void Update(const ULONG nExecutedCycles) {}
|
||||||
|
|
||||||
|
|
||||||
virtual void InitializeIO(LPBYTE pCxRomPeripheral);
|
virtual void InitializeIO(LPBYTE pCxRomPeripheral);
|
||||||
virtual UINT GetActiveBank(void) { return 0; } // Always 0 as only 1x 16K bank
|
virtual UINT GetActiveBank(void) { return 0; } // Always 0 as only 1x 16K bank
|
||||||
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper) { } // A no-op for //e - called from CardManager::SaveSnapshot()
|
virtual void SaveSnapshot(YamlSaveHelper& yamlSaveHelper) { } // A no-op for //e - called from CardManager::SaveSnapshot()
|
||||||
|
@ -109,3 +108,34 @@ private:
|
||||||
UINT m_uSaturnActiveBank; // Saturn 128K Language Card Bank 0 .. 7
|
UINT m_uSaturnActiveBank; // Saturn 128K Language Card Bank 0 .. 7
|
||||||
LPBYTE m_aSaturnBanks[kMaxSaturnBanks];
|
LPBYTE m_aSaturnBanks[kMaxSaturnBanks];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Language Card manager
|
||||||
|
//
|
||||||
|
|
||||||
|
class LanguageCardManager
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LanguageCardManager(void) :
|
||||||
|
m_pLanguageCard(NULL),
|
||||||
|
m_lastSlotToSetMainMemLC(SLOT0),
|
||||||
|
m_lastSlotToSetMainMemLCFromSnapshot(SLOT0)
|
||||||
|
{}
|
||||||
|
~LanguageCardManager(void) {}
|
||||||
|
|
||||||
|
void Reset(const bool powerCycle = false);
|
||||||
|
|
||||||
|
UINT GetLastSlotToSetMainMemLC(void) { return m_lastSlotToSetMainMemLC; }
|
||||||
|
void SetLastSlotToSetMainMemLC(UINT slot) { m_lastSlotToSetMainMemLC = slot; }
|
||||||
|
void SetLastSlotToSetMainMemLCFromSnapshot(UINT slot) { m_lastSlotToSetMainMemLCFromSnapshot = slot; }
|
||||||
|
|
||||||
|
LanguageCardUnit* GetLanguageCard(void) { return m_pLanguageCard; }
|
||||||
|
bool SetLanguageCard(SS_CARDTYPE type);
|
||||||
|
|
||||||
|
void SetMemModeFromSnapshot(void);
|
||||||
|
|
||||||
|
private:
|
||||||
|
LanguageCardUnit* m_pLanguageCard;
|
||||||
|
UINT m_lastSlotToSetMainMemLC;
|
||||||
|
UINT m_lastSlotToSetMainMemLCFromSnapshot;
|
||||||
|
};
|
||||||
|
|
|
@ -241,8 +241,6 @@ static LPBYTE RWpages[kMaxExMemoryBanks]; // pointers to RW memory banks
|
||||||
|
|
||||||
static const UINT kNumAnnunciators = 4;
|
static const UINT kNumAnnunciators = 4;
|
||||||
static bool g_Annunciator[kNumAnnunciators] = {};
|
static bool g_Annunciator[kNumAnnunciators] = {};
|
||||||
static UINT g_lastSlotToSetMainMemLC = SLOT0;
|
|
||||||
static UINT g_lastSlotToSetMainMemLCFromSnapshot = SLOT0;
|
|
||||||
|
|
||||||
BYTE __stdcall IO_Annunciator(WORD programcounter, WORD address, BYTE write, BYTE value, ULONG nCycles);
|
BYTE __stdcall IO_Annunciator(WORD programcounter, WORD address, BYTE write, BYTE value, ULONG nCycles);
|
||||||
|
|
||||||
|
@ -373,15 +371,15 @@ UINT GetRamWorksActiveBank(void)
|
||||||
|
|
||||||
static BOOL GetLastRamWrite(void)
|
static BOOL GetLastRamWrite(void)
|
||||||
{
|
{
|
||||||
if (GetCardMgr().GetLanguageCard())
|
if (GetCardMgr().GetLanguageCardMgr().GetLanguageCard())
|
||||||
return GetCardMgr().GetLanguageCard()->GetLastRamWrite();
|
return GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->GetLastRamWrite();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetLastRamWrite(BOOL count)
|
static void SetLastRamWrite(BOOL count)
|
||||||
{
|
{
|
||||||
if (GetCardMgr().GetLanguageCard())
|
if (GetCardMgr().GetLanguageCardMgr().GetLanguageCard())
|
||||||
GetCardMgr().GetLanguageCard()->SetLastRamWrite(count);
|
GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->SetLastRamWrite(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -393,7 +391,7 @@ void SetMemMainLanguageCard(LPBYTE ptr, UINT slot, bool bMemMain /*=false*/)
|
||||||
else
|
else
|
||||||
g_pMemMainLanguageCard = ptr;
|
g_pMemMainLanguageCard = ptr;
|
||||||
|
|
||||||
g_lastSlotToSetMainMemLC = slot;
|
GetCardMgr().GetLanguageCardMgr().SetLastSlotToSetMainMemLC(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
LPBYTE GetCxRomPeripheral(void)
|
LPBYTE GetCxRomPeripheral(void)
|
||||||
|
@ -401,11 +399,6 @@ LPBYTE GetCxRomPeripheral(void)
|
||||||
return pCxRomPeripheral; // Can be NULL if at MODE_LOGO
|
return pCxRomPeripheral; // Can be NULL if at MODE_LOGO
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT GetLastSlotToSetMainMemLC(void)
|
|
||||||
{
|
|
||||||
return g_lastSlotToSetMainMemLC;
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
static BYTE __stdcall IORead_C00x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles)
|
static BYTE __stdcall IORead_C00x(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULONG nExecutedCycles)
|
||||||
|
@ -1147,26 +1140,7 @@ void MemResetPaging()
|
||||||
// . MemReset() -> ResetPaging(TRUE)
|
// . MemReset() -> ResetPaging(TRUE)
|
||||||
static void ResetPaging(BOOL initialize)
|
static void ResetPaging(BOOL initialize)
|
||||||
{
|
{
|
||||||
SetLastRamWrite(0);
|
GetCardMgr().GetLanguageCardMgr().Reset(initialize);
|
||||||
|
|
||||||
if (IsApple2PlusOrClone(GetApple2Type()) && GetCardMgr().QuerySlot(SLOT0) == CT_Empty)
|
|
||||||
SetMemMode(0);
|
|
||||||
else
|
|
||||||
SetMemMode(LanguageCardUnit::kMemModeInitialState);
|
|
||||||
|
|
||||||
// For power on: card's ctor will have set card's local memmode to LanguageCardUnit::kMemModeInitialState.
|
|
||||||
// For reset: II/II+ unaffected, so only for //e or above.
|
|
||||||
if (IsAppleIIeOrAbove(GetApple2Type()))
|
|
||||||
{
|
|
||||||
if (GetCardMgr().QuerySlot(SLOT0) != CT_Empty) // LC or Saturn
|
|
||||||
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(SLOT0)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
|
||||||
for (UINT i = SLOT1; i < NUM_SLOTS; i++)
|
|
||||||
{
|
|
||||||
if (GetCardMgr().QuerySlot(i) == CT_Saturn128K)
|
|
||||||
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(i)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdatePaging(initialize);
|
UpdatePaging(initialize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1802,15 +1776,7 @@ void MemInitializeFromSnapshot(void)
|
||||||
// NB. Copied to /mem/ by UpdatePaging(TRUE)
|
// NB. Copied to /mem/ by UpdatePaging(TRUE)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If multiple "Language Cards" (eg. LC+Saturn or 2xSaturn) then setup via the last card that selected the 16KB LC bank.
|
GetCardMgr().GetLanguageCardMgr().SetMemModeFromSnapshot();
|
||||||
// NB. Skip if not Saturn card (ie. a LC), since LC's are only in slot0 and in the ctor it has called SetMainMemLanguageCard()
|
|
||||||
if (GetCardMgr().QuerySlot(g_lastSlotToSetMainMemLCFromSnapshot) == CT_Saturn128K)
|
|
||||||
{
|
|
||||||
Saturn128K& saturn = dynamic_cast<Saturn128K&>(GetCardMgr().GetRef(g_lastSlotToSetMainMemLCFromSnapshot));
|
|
||||||
saturn.SetMemMainLanguageCard();
|
|
||||||
}
|
|
||||||
|
|
||||||
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(g_lastSlotToSetMainMemLCFromSnapshot)).SetGlobalLCMemMode();
|
|
||||||
|
|
||||||
// Finally setup the paging tables
|
// Finally setup the paging tables
|
||||||
MemUpdatePaging(TRUE);
|
MemUpdatePaging(TRUE);
|
||||||
|
@ -2328,7 +2294,7 @@ void MemSaveSnapshot(YamlSaveHelper& yamlSaveHelper)
|
||||||
yamlSaveHelper.SaveHexUint8(SS_YAML_KEY_IOSELECT_INT, INTC8ROM ? 1 : 0);
|
yamlSaveHelper.SaveHexUint8(SS_YAML_KEY_IOSELECT_INT, INTC8ROM ? 1 : 0);
|
||||||
yamlSaveHelper.SaveUint(SS_YAML_KEY_EXPANSIONROMTYPE, (UINT) g_eExpansionRomType);
|
yamlSaveHelper.SaveUint(SS_YAML_KEY_EXPANSIONROMTYPE, (UINT) g_eExpansionRomType);
|
||||||
yamlSaveHelper.SaveUint(SS_YAML_KEY_PERIPHERALROMSLOT, g_uPeripheralRomSlot);
|
yamlSaveHelper.SaveUint(SS_YAML_KEY_PERIPHERALROMSLOT, g_uPeripheralRomSlot);
|
||||||
yamlSaveHelper.SaveUint(SS_YAML_KEY_LASTSLOTTOSETMAINMEMLC, g_lastSlotToSetMainMemLC);
|
yamlSaveHelper.SaveUint(SS_YAML_KEY_LASTSLOTTOSETMAINMEMLC, GetCardMgr().GetLanguageCardMgr().GetLastSlotToSetMainMemLC());
|
||||||
|
|
||||||
for (UINT i=0; i<kNumAnnunciators; i++)
|
for (UINT i=0; i<kNumAnnunciators; i++)
|
||||||
{
|
{
|
||||||
|
@ -2399,10 +2365,10 @@ bool MemLoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT unitVersion)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
g_lastSlotToSetMainMemLCFromSnapshot = SLOT0;
|
GetCardMgr().GetLanguageCardMgr().SetLastSlotToSetMainMemLCFromSnapshot(SLOT0);
|
||||||
if (unitVersion >= 9)
|
if (unitVersion >= 9)
|
||||||
{
|
{
|
||||||
g_lastSlotToSetMainMemLCFromSnapshot = yamlLoadHelper.LoadUint(SS_YAML_KEY_LASTSLOTTOSETMAINMEMLC);
|
GetCardMgr().GetLanguageCardMgr().SetLastSlotToSetMainMemLCFromSnapshot(yamlLoadHelper.LoadUint(SS_YAML_KEY_LASTSLOTTOSETMAINMEMLC));
|
||||||
}
|
}
|
||||||
|
|
||||||
yamlLoadHelper.PopMap();
|
yamlLoadHelper.PopMap();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user