fixes #3850
This commit is contained in:
CasualPokePlayer 2024-01-28 06:12:02 -08:00
parent 1162ac4a12
commit 572d989a94
2 changed files with 72 additions and 0 deletions

Binary file not shown.

View File

@ -658,6 +658,8 @@ void ctrl_io_write_byte(unsigned int address, unsigned int data)
case 0x01: /* SUB-CPU control */
{
unsigned int halted = s68k.stopped;
/* RESET bit */
if (data & 0x01)
{
@ -686,6 +688,40 @@ void ctrl_io_write_byte(unsigned int address, unsigned int data)
s68k_pulse_halt();
}
/* check if SUB-CPU halt status has changed */
if (s68k.stopped != halted)
{
int i;
/* PRG-RAM can only be accessed from MAIN 68K & Z80 when SUB-CPU is halted (Dungeon Explorer USA version) */
if ((data & 0x03) != 0x01)
{
/* $020000-$03FFFF (resp. $420000-$43FFFF) is mapped to PRG-RAM 128K bank (mirrored every 256 KB) */
for (i=scd.cartridge.boot+0x02; i<scd.cartridge.boot+0x20; i+=4)
{
m68k.memory_map[i].read8 = m68k.memory_map[i+1].read8 = NULL;
m68k.memory_map[i].read16 = m68k.memory_map[i+1].read16 = NULL;
m68k.memory_map[i].write8 = m68k.memory_map[i+1].write8 = NULL;
m68k.memory_map[i].write16 = m68k.memory_map[i+1].write16 = NULL;
zbank_memory_map[i].read = zbank_memory_map[i+1].read = NULL;
zbank_memory_map[i].write = zbank_memory_map[i+1].write = NULL;
}
}
else
{
/* $020000-$03FFFF (resp. $420000-$43FFFF) is not mapped (mirrored every 256 KB) */
for (i=scd.cartridge.boot+0x02; i<scd.cartridge.boot+0x20; i+=4)
{
m68k.memory_map[i].read8 = m68k.memory_map[i+1].read8 = m68k_read_bus_8;
m68k.memory_map[i].read16 = m68k.memory_map[i+1].read16 = m68k_read_bus_16;
m68k.memory_map[i].write8 = m68k.memory_map[i+1].write8 = m68k_unused_8_w;
m68k.memory_map[i].write16 = m68k.memory_map[i+1].write16 = m68k_unused_16_w;
zbank_memory_map[i].read = zbank_memory_map[i+1].read = zbank_unused_r;
zbank_memory_map[i].write = zbank_memory_map[i+1].write = zbank_unused_w;
}
}
}
scd.regs[0x00].byte.l = data;
return;
}
@ -854,6 +890,8 @@ void ctrl_io_write_word(unsigned int address, unsigned int data)
{
case 0x00: /* SUB-CPU interrupt & control */
{
unsigned int halted = s68k.stopped;
/* RESET bit */
if (data & 0x01)
{
@ -882,6 +920,40 @@ void ctrl_io_write_word(unsigned int address, unsigned int data)
s68k_pulse_halt();
}
/* check if SUB-CPU halt status has changed */
if (s68k.stopped != halted)
{
int i;
/* PRG-RAM can only be accessed from MAIN 68K & Z80 when SUB-CPU is halted (Dungeon Explorer USA version) */
if ((data & 0x03) != 0x01)
{
/* $020000-$03FFFF (resp. $420000-$43FFFF) is mapped to PRG-RAM 128K bank (mirrored every 256 KB) */
for (i=scd.cartridge.boot+0x02; i<scd.cartridge.boot+0x20; i+=4)
{
m68k.memory_map[i].read8 = m68k.memory_map[i+1].read8 = NULL;
m68k.memory_map[i].read16 = m68k.memory_map[i+1].read16 = NULL;
m68k.memory_map[i].write8 = m68k.memory_map[i+1].write8 = NULL;
m68k.memory_map[i].write16 = m68k.memory_map[i+1].write16 = NULL;
zbank_memory_map[i].read = zbank_memory_map[i+1].read = NULL;
zbank_memory_map[i].write = zbank_memory_map[i+1].write = NULL;
}
}
else
{
/* $020000-$03FFFF (resp. $420000-$43FFFF) is not mapped (mirrored every 256 KB) */
for (i=scd.cartridge.boot+0x02; i<scd.cartridge.boot+0x20; i+=4)
{
m68k.memory_map[i].read8 = m68k.memory_map[i+1].read8 = m68k_read_bus_8;
m68k.memory_map[i].read16 = m68k.memory_map[i+1].read16 = m68k_read_bus_16;
m68k.memory_map[i].write8 = m68k.memory_map[i+1].write8 = m68k_unused_8_w;
m68k.memory_map[i].write16 = m68k.memory_map[i+1].write16 = m68k_unused_16_w;
zbank_memory_map[i].read = zbank_memory_map[i+1].read = zbank_unused_r;
zbank_memory_map[i].write = zbank_memory_map[i+1].write = zbank_unused_w;
}
}
}
/* IFL2 bit */
if (data & 0x100)
{