parent
1162ac4a12
commit
572d989a94
Binary file not shown.
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue