mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-06-02 20:41:38 +00:00
Save-state: when loading state, correctly use C3 ROM when INTCXROM=0 && SLOTC3ROM=0. (Fixes #1108)
This commit is contained in:
parent
0f750ee167
commit
cd0c3b00f8
|
@ -1025,7 +1025,7 @@ static void IoHandlerCardsOut(void)
|
||||||
{
|
{
|
||||||
_ASSERT( SW_INTCXROM );
|
_ASSERT( SW_INTCXROM );
|
||||||
|
|
||||||
for (UINT uSlot=1; uSlot<NUM_SLOTS; uSlot++)
|
for (UINT uSlot=SLOT1; uSlot<NUM_SLOTS; uSlot++)
|
||||||
{
|
{
|
||||||
for (UINT i=0; i<16; i++)
|
for (UINT i=0; i<16; i++)
|
||||||
{
|
{
|
||||||
|
@ -1035,26 +1035,38 @@ static void IoHandlerCardsOut(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// From UTAIIe:5-28: If INTCXROM==0 && SLOTC3ROM==0 Then $C300-C3FF is internal ROM
|
||||||
|
static void IoHandlerSlot3CardOut(void)
|
||||||
|
{
|
||||||
|
_ASSERT(!SW_INTCXROM && !SW_SLOTC3ROM);
|
||||||
|
|
||||||
|
for (UINT i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
IORead[SLOT3 * 16 + i] = IO_Cxxx;
|
||||||
|
IOWrite[SLOT3 * 16 + i] = IO_Cxxx;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void IoHandlerCardsIn(void)
|
static void IoHandlerCardsIn(void)
|
||||||
{
|
{
|
||||||
_ASSERT( !SW_INTCXROM );
|
_ASSERT( !SW_INTCXROM );
|
||||||
|
|
||||||
for (UINT uSlot=1; uSlot<NUM_SLOTS; uSlot++)
|
for (UINT uSlot=SLOT1; uSlot<NUM_SLOTS; uSlot++)
|
||||||
{
|
{
|
||||||
iofunction ioreadcx = g_SlotInfo[uSlot].IOReadCx;
|
if (uSlot == SLOT3 && !SW_SLOTC3ROM)
|
||||||
iofunction iowritecx = g_SlotInfo[uSlot].IOWriteCx;
|
|
||||||
|
|
||||||
if (uSlot == 3 && !SW_SLOTC3ROM)
|
|
||||||
{
|
{
|
||||||
// From UTAIIe:5-28: If INTCXROM==0 && SLOTC3ROM==0 Then $C300-C3FF is internal ROM
|
IoHandlerSlot3CardOut();
|
||||||
ioreadcx = IO_Cxxx;
|
|
||||||
iowritecx = IO_Cxxx;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
for (UINT i=0; i<16; i++)
|
|
||||||
{
|
{
|
||||||
IORead[uSlot*16+i] = ioreadcx;
|
iofunction ioreadcx = g_SlotInfo[uSlot].IOReadCx;
|
||||||
IOWrite[uSlot*16+i] = iowritecx;
|
iofunction iowritecx = g_SlotInfo[uSlot].IOWriteCx;
|
||||||
|
|
||||||
|
for (UINT i = 0; i < 16; i++)
|
||||||
|
{
|
||||||
|
IORead[uSlot * 16 + i] = ioreadcx;
|
||||||
|
IOWrite[uSlot * 16 + i] = iowritecx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1745,8 +1757,14 @@ void MemInitializeFromSnapshot(void)
|
||||||
//
|
//
|
||||||
|
|
||||||
// Remove all the cards' ROMs at $Csnn if internal ROM is enabled
|
// Remove all the cards' ROMs at $Csnn if internal ROM is enabled
|
||||||
if (IsAppleIIeOrAbove(GetApple2Type()) && SW_INTCXROM)
|
// Or just $C3nn if SLOT3 ROM is disabled
|
||||||
IoHandlerCardsOut();
|
if (IsAppleIIeOrAbove(GetApple2Type()))
|
||||||
|
{
|
||||||
|
if (SW_INTCXROM)
|
||||||
|
IoHandlerCardsOut();
|
||||||
|
else if (!SW_SLOTC3ROM)
|
||||||
|
IoHandlerSlot3CardOut();
|
||||||
|
}
|
||||||
|
|
||||||
// Potentially init a card's expansion ROM
|
// Potentially init a card's expansion ROM
|
||||||
const UINT uSlot = g_uPeripheralRomSlot;
|
const UINT uSlot = g_uPeripheralRomSlot;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user