diff options
Diffstat (limited to 'src/mame/drivers/zn.c')
-rw-r--r-- | src/mame/drivers/zn.c | 46 |
1 files changed, 44 insertions, 2 deletions
diff --git a/src/mame/drivers/zn.c b/src/mame/drivers/zn.c index af0ac51738c..3c0a1103d1a 100644 --- a/src/mame/drivers/zn.c +++ b/src/mame/drivers/zn.c @@ -83,6 +83,7 @@ public: DECLARE_READ16_MEMBER(bam2_unk_r); DECLARE_WRITE16_MEMBER(acpsx_00_w); DECLARE_WRITE16_MEMBER(acpsx_10_w); + DECLARE_WRITE16_MEMBER(nbajamex_bank_w); DECLARE_WRITE16_MEMBER(nbajamex_80_w); DECLARE_READ16_MEMBER(nbajamex_08_r); DECLARE_READ16_MEMBER(nbajamex_80_r); @@ -2034,17 +2035,55 @@ WRITE16_MEMBER(zn_state::acpsx_00_w) verboselog(0, "acpsx_00_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); } +WRITE16_MEMBER(zn_state::nbajamex_bank_w) +{ + UINT32 newbank = 0; + + verboselog(0, "nbajamex_bank_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); + + if (offset > 1) + { + logerror("Unknown banking offset %x!\n", offset); + } + + if (offset == 1) + { + data -= 1; + } + + if (data <= 1) + { + newbank = (data * 0x400000); + } + else if (data >= 0x10) + { + data -= 0x10; + newbank = (data * 0x400000); + newbank += 0x200000; + } + + if (offset == 0) + { + membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + newbank); + } + else if (offset == 1) + { + newbank += 0x200000; + membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + newbank); + } +} + WRITE16_MEMBER(zn_state::acpsx_10_w) { verboselog(0, "acpsx_10_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); } +// all 16 bits goes to the external soundboard's latch (see sound test menu) WRITE16_MEMBER(zn_state::nbajamex_80_w) { verboselog(0, "nbajamex_80_w( %08x, %08x, %08x )\n", offset, data, mem_mask ); psxirq_device *psxirq = (psxirq_device *) machine().device("maincpu:irq"); psxirq->intin10(1); - membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() + (data ? 0xe00000 : 0)); } READ16_MEMBER(zn_state::nbajamex_08_r) @@ -2054,6 +2093,7 @@ READ16_MEMBER(zn_state::nbajamex_08_r) return data; } +// possibly a readback from the external soundboard? READ16_MEMBER(zn_state::nbajamex_80_r) { UINT32 data = 0xffffffff; @@ -2070,7 +2110,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START(nbajamex_map, AS_PROGRAM, 32, zn_state) AM_RANGE(0x1f000000, 0x1f1fffff) AM_ROMBANK("bankedroms") - AM_RANGE(0x1f200000, 0x1f207fff) AM_RAM AM_SHARE("eeprom") + AM_RANGE(0x1f200000, 0x1f7fffff) AM_ROMBANK("bankedroms2") + AM_RANGE(0x1fbfff00, 0x1fbfff07) AM_WRITE16(nbajamex_bank_w, 0xffffffff) AM_RANGE(0x1fbfff08, 0x1fbfff0b) AM_READ16(nbajamex_08_r, 0xffff) AM_RANGE(0x1fbfff80, 0x1fbfff83) AM_READWRITE16(nbajamex_80_r, nbajamex_80_w, 0xffff) @@ -2080,6 +2121,7 @@ ADDRESS_MAP_END MACHINE_RESET_MEMBER(zn_state,nbajamex) { membank( "bankedroms" )->set_base( memregion( "bankedroms" )->base() ); + membank( "bankedroms2" )->set_base( memregion( "bankedroms" )->base() + 0x200000 ); } static ADDRESS_MAP_START(jdredd_map, AS_PROGRAM, 32, zn_state) |