mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-05-28 17:41:37 +00:00
Fixes for II+ with (a) s0=LC or (b) s0=Saturn
This commit is contained in:
parent
8e4c3366fb
commit
d17e108b30
|
@ -52,7 +52,8 @@ 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)
|
||||||
{
|
{
|
||||||
if (type != CT_Saturn128K && m_slot != LanguageCardUnit::kSlot0)
|
if (type != CT_Saturn128K && m_slot != LanguageCardUnit::kSlot0)
|
||||||
ThrowErrorInvalidSlot();
|
ThrowErrorInvalidSlot();
|
||||||
|
@ -77,6 +78,7 @@ BYTE __stdcall LanguageCardUnit::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValu
|
||||||
{
|
{
|
||||||
UINT uSlot = ((uAddr & 0xff) >> 4) - 8;
|
UINT uSlot = ((uAddr & 0xff) >> 4) - 8;
|
||||||
LanguageCardUnit* pLC = (LanguageCardUnit*) MemGetSlotParameters(uSlot);
|
LanguageCardUnit* pLC = (LanguageCardUnit*) MemGetSlotParameters(uSlot);
|
||||||
|
_ASSERT(uSlot == SLOT0);
|
||||||
|
|
||||||
DWORD memmode = pLC->GetLCMemMode();
|
DWORD memmode = pLC->GetLCMemMode();
|
||||||
DWORD lastmemmode = memmode;
|
DWORD lastmemmode = memmode;
|
||||||
|
@ -107,15 +109,20 @@ 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 bBankChanged = GetLastSlotToSetMainMemLC() != SLOT0;
|
||||||
|
if (bBankChanged)
|
||||||
|
{
|
||||||
|
if (pLC->QueryType() == CT_LanguageCardIIe)
|
||||||
|
SetMemMainLanguageCard(NULL, SLOT0, true);
|
||||||
|
else // CT_LanguageCard
|
||||||
|
SetMemMainLanguageCard(pLC->m_pMemory, SLOT0);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
if (MemOptimizeForModeChanging(PC, uAddr))
|
if (MemOptimizeForModeChanging(PC, uAddr))
|
||||||
return bWrite ? 0 : MemReadFloatingBus(nExecutedCycles);
|
return bWrite ? 0 : MemReadFloatingBus(nExecutedCycles);
|
||||||
|
|
||||||
bool bBankChanged = GetLastSlotToSetMainMemLC() != SLOT0;
|
|
||||||
if (bBankChanged)
|
|
||||||
SetMemMainLanguageCard(NULL, SLOT0, true); // TODO: fix for non-//e
|
|
||||||
|
|
||||||
// IF THE MEMORY PAGING MODE HAS CHANGED, UPDATE OUR MEMORY IMAGES AND
|
// IF THE MEMORY PAGING MODE HAS CHANGED, UPDATE OUR MEMORY IMAGES AND
|
||||||
// WRITE TABLES.
|
// WRITE TABLES.
|
||||||
if ((lastmemmode != memmode) || bBankChanged)
|
if ((lastmemmode != memmode) || bBankChanged)
|
||||||
|
@ -383,6 +390,12 @@ 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;
|
||||||
|
if (bBankChanged)
|
||||||
|
{
|
||||||
|
::SetMemMainLanguageCard(pLC->m_pMemory, uSlot);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// NB. Saturn can be put in any slot but MemOptimizeForModeChanging() currently only supports LC in slot 0.
|
// NB. Saturn can be put in any slot but MemOptimizeForModeChanging() currently only supports LC in slot 0.
|
||||||
|
|
|
@ -39,6 +39,8 @@ public:
|
||||||
protected:
|
protected:
|
||||||
LanguageCardUnit(SS_CARDTYPE type, UINT slot);
|
LanguageCardUnit(SS_CARDTYPE type, UINT slot);
|
||||||
|
|
||||||
|
LPBYTE m_pMemory;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
UINT m_uLastRamWrite;
|
UINT m_uLastRamWrite;
|
||||||
UINT m_memmode;
|
UINT m_memmode;
|
||||||
|
@ -67,8 +69,6 @@ protected:
|
||||||
void SaveLCState(class YamlSaveHelper& yamlSaveHelper);
|
void SaveLCState(class YamlSaveHelper& yamlSaveHelper);
|
||||||
void LoadLCState(class YamlLoadHelper& yamlLoadHelper);
|
void LoadLCState(class YamlLoadHelper& yamlLoadHelper);
|
||||||
|
|
||||||
LPBYTE m_pMemory;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string& GetSnapshotMemStructName(void);
|
const std::string& GetSnapshotMemStructName(void);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user