mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-01-01 12:31:59 +00:00
Fix for write to 0xCFFF (wasn't implemented), and clear IO_SELECT_InternalROM on 0xC006 (SLOTCXROM) access (#392)
This commit is contained in:
parent
87862bcf28
commit
5470febbf8
@ -535,7 +535,7 @@ BYTE __stdcall IORead_Cxxx(WORD programcounter, WORD address, BYTE write, BYTE v
|
|||||||
if (address == 0xCFFF)
|
if (address == 0xCFFF)
|
||||||
{
|
{
|
||||||
// Disable expansion ROM at [$C800..$CFFF]
|
// Disable expansion ROM at [$C800..$CFFF]
|
||||||
// . SSC will disable on an access to $CFxx - but ROM only writes to $CFFF, so it doesn't matter
|
// . SSC will disable on an access to $CFxx - but ROM only access $CFFF, so it doesn't matter
|
||||||
IO_SELECT = 0;
|
IO_SELECT = 0;
|
||||||
IO_SELECT_InternalROM = 0;
|
IO_SELECT_InternalROM = 0;
|
||||||
g_uPeripheralRomSlot = 0;
|
g_uPeripheralRomSlot = 0;
|
||||||
@ -659,15 +659,9 @@ BYTE __stdcall IORead_Cxxx(WORD programcounter, WORD address, BYTE write, BYTE v
|
|||||||
return mem[address];
|
return mem[address];
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Check if a write to [C800..CFFF] can set IO_STROBE=1 (like the IORead_Cxxx case does)
|
|
||||||
BYTE __stdcall IOWrite_Cxxx(WORD programcounter, WORD address, BYTE write, BYTE value, ULONG nCyclesLeft)
|
BYTE __stdcall IOWrite_Cxxx(WORD programcounter, WORD address, BYTE write, BYTE value, ULONG nCyclesLeft)
|
||||||
{
|
{
|
||||||
if (IsPotentialNoSlotClockAccess(address))
|
return IORead_Cxxx(programcounter, address, write, value, nCyclesLeft); // GH#392
|
||||||
{
|
|
||||||
g_NoSlotClock.Write(address);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
@ -1641,7 +1635,6 @@ BYTE __stdcall MemSetPaging(WORD programcounter, WORD address, BYTE write, BYTE
|
|||||||
if (!write) // GH#392
|
if (!write) // GH#392
|
||||||
{
|
{
|
||||||
BOOL bWriteRam = (address & 1);
|
BOOL bWriteRam = (address & 1);
|
||||||
// g_bLastWriteRam = 1; // note: because diags.do doesn't set switches twice!
|
|
||||||
if (g_bLastWriteRam && bWriteRam)
|
if (g_bLastWriteRam && bWriteRam)
|
||||||
SetMemMode(memmode | MF_WRITERAM);
|
SetMemMode(memmode | MF_WRITERAM);
|
||||||
g_bLastWriteRam = bWriteRam;
|
g_bLastWriteRam = bWriteRam;
|
||||||
@ -1716,6 +1709,7 @@ BYTE __stdcall MemSetPaging(WORD programcounter, WORD address, BYTE write, BYTE
|
|||||||
// Disable Internal ROM
|
// Disable Internal ROM
|
||||||
// . Similar to $CFFF access
|
// . Similar to $CFFF access
|
||||||
// . None of the peripheral cards can be driving the bus - so use the null ROM
|
// . None of the peripheral cards can be driving the bus - so use the null ROM
|
||||||
|
IO_SELECT_InternalROM = 0; // GH#392
|
||||||
memset(pCxRomPeripheral+0x800, 0, FIRMWARE_EXPANSION_SIZE);
|
memset(pCxRomPeripheral+0x800, 0, FIRMWARE_EXPANSION_SIZE);
|
||||||
memset(mem+FIRMWARE_EXPANSION_BEGIN, 0, FIRMWARE_EXPANSION_SIZE);
|
memset(mem+FIRMWARE_EXPANSION_BEGIN, 0, FIRMWARE_EXPANSION_SIZE);
|
||||||
g_eExpansionRomType = eExpRomNull;
|
g_eExpansionRomType = eExpRomNull;
|
||||||
|
Loading…
Reference in New Issue
Block a user