Draft27 is working for IIe

This commit is contained in:
tomcw 2024-03-09 21:01:12 +00:00
parent c7335600c4
commit 8e4c3366fb
3 changed files with 23 additions and 2 deletions

View File

@ -112,11 +112,21 @@ BYTE __stdcall LanguageCardUnit::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValu
if (MemOptimizeForModeChanging(PC, uAddr))
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
// WRITE TABLES.
if (lastmemmode != memmode)
if ((lastmemmode != memmode) || bBankChanged)
{
SetMemMode((GetMemMode() & ~MF_LANGCARD_MASK) | (memmode & MF_LANGCARD_MASK));
if (lastmemmode != memmode)
{
// UINT oldmode = GetMemMode();
SetMemMode((GetMemMode() & ~MF_LANGCARD_MASK) | (memmode & MF_LANGCARD_MASK));
// UINT newmode = GetMemMode();
// LogOutput("[s%d] LC memmode: %08X -> %08X\n", pLC->m_slot, oldmode, newmode);
}
MemUpdatePaging(0); // Initialize=0
}
@ -383,7 +393,12 @@ BYTE __stdcall Saturn128K::IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULO
if ((lastmemmode != memmode) || bBankChanged)
{
if (lastmemmode != memmode)
{
// UINT oldmode = GetMemMode();
SetMemMode((GetMemMode() & ~MF_LANGCARD_MASK) | (memmode & MF_LANGCARD_MASK));
// UINT newmode = GetMemMode();
// LogOutput("[s%d] LC memmode: %08X -> %08X\n", pLC->m_slot, oldmode, newmode);
}
MemUpdatePaging(0); // Initialize=0
}

View File

@ -401,6 +401,11 @@ LPBYTE GetCxRomPeripheral(void)
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)

View File

@ -118,3 +118,4 @@ UINT GetRamWorksActiveBank(void);
void SetMemMainLanguageCard(LPBYTE ptr, UINT slot, bool bMemMain=false);
LPBYTE GetCxRomPeripheral(void);
UINT GetLastSlotToSetMainMemLC(void);