diff options
Diffstat (limited to 'src/mame/drivers/pacman.cpp')
-rw-r--r-- | src/mame/drivers/pacman.cpp | 806 |
1 files changed, 417 insertions, 389 deletions
diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 481bc0236e2..51c2e588687 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -996,354 +996,369 @@ READ8_MEMBER(pacman_state::pacman_read_nop) * *************************************/ -ADDRESS_MAP_START(pacman_state::pacman_map) +void pacman_state::pacman_map(address_map &map) +{ //A lot of games don't have an a15 at the cpu. Generally only games with a cpu daughter board can access the full 32k of romspace. - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", addressable_latch_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::birdiy_map) - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") + map(0x0000, 0x3fff).mirror(0x8000).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(addressable_latch_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); +} + + +void pacman_state::birdiy_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x8000).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); // AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5080, 0x509f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x50a0, 0x50af) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5080, 0x509f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x50a0, 0x50af).mirror(0xaf00).writeonly().share("spriteram2"); // AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP // AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") -ADDRESS_MAP_END + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); +} -ADDRESS_MAP_START(pacman_state::mspacman_map) +void pacman_state::mspacman_map(address_map &map) +{ /* start with 0000-3fff and 8000-bfff mapped to the ROMs */ - AM_RANGE(0x0000, 0xffff) AM_ROMBANK("bank1") - AM_RANGE(0x4000, 0x7fff) AM_MIRROR(0x8000) AM_UNMAP - - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") + map(0x0000, 0xffff).bankr("bank1"); + map(0x4000, 0x7fff).mirror(0x8000).unmaprw(); + + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); /* overlay decode enable/disable on top */ - AM_RANGE(0x0038, 0x003f) AM_READWRITE(mspacman_disable_decode_r_0x0038,mspacman_disable_decode_w) - AM_RANGE(0x03b0, 0x03b7) AM_READWRITE(mspacman_disable_decode_r_0x03b0,mspacman_disable_decode_w) - AM_RANGE(0x1600, 0x1607) AM_READWRITE(mspacman_disable_decode_r_0x1600,mspacman_disable_decode_w) - AM_RANGE(0x2120, 0x2127) AM_READWRITE(mspacman_disable_decode_r_0x2120,mspacman_disable_decode_w) - AM_RANGE(0x3ff0, 0x3ff7) AM_READWRITE(mspacman_disable_decode_r_0x3ff0,mspacman_disable_decode_w) - AM_RANGE(0x3ff8, 0x3fff) AM_READWRITE(mspacman_enable_decode_r_0x3ff8,mspacman_enable_decode_w) - AM_RANGE(0x8000, 0x8007) AM_READWRITE(mspacman_disable_decode_r_0x8000,mspacman_disable_decode_w) - AM_RANGE(0x97f0, 0x97f7) AM_READWRITE(mspacman_disable_decode_r_0x97f0,mspacman_disable_decode_w) -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::woodpek_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") - AM_RANGE(0x8000, 0xbfff) AM_ROM -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::numcrash_map) - AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0x2000, 0x27ff) AM_ROM + map(0x0038, 0x003f).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x0038), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x03b0, 0x03b7).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x03b0), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x1600, 0x1607).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x1600), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x2120, 0x2127).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x2120), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x3ff0, 0x3ff7).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x3ff0), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x3ff8, 0x3fff).rw(this, FUNC(pacman_state::mspacman_enable_decode_r_0x3ff8), FUNC(pacman_state::mspacman_enable_decode_w)); + map(0x8000, 0x8007).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x8000), FUNC(pacman_state::mspacman_disable_decode_w)); + map(0x97f0, 0x97f7).rw(this, FUNC(pacman_state::mspacman_disable_decode_r_0x97f0), FUNC(pacman_state::mspacman_disable_decode_w)); +} + + +void pacman_state::woodpek_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); + map(0x8000, 0xbfff).rom(); +} + + +void pacman_state::numcrash_map(address_map &map) +{ + map(0x0000, 0x1fff).rom(); + map(0x2000, 0x27ff).rom(); /* 0x2800 - 0x2fff unmapped? */ - AM_RANGE(0x3000, 0x37ff) AM_ROM + map(0x3000, 0x37ff).rom(); /* 0x3800 - 0x3fff unmapped? */ - AM_RANGE(0x8000, 0x9fff) AM_ROM + map(0x8000, 0x9fff).rom(); - AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") + map(0x4000, 0x43ff).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); - AM_RANGE(0x4c00, 0x4fef) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_WRITEONLY AM_SHARE("spriteram2") + map(0x4c00, 0x4fef).ram(); + map(0x4ff0, 0x4fff).ram().share("spriteram"); + map(0x5000, 0x5007).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).writeonly().share("spriteram2"); // AM_RANGE(0x5070, 0x507f) AM_WRITENOP // AM_RANGE(0x5080, 0x5080) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_READ_PORT("DSW1") + map(0x50c0, 0x50c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).portr("IN0"); + map(0x5040, 0x5040).portr("IN1"); + map(0x5080, 0x5080).portr("DSW1"); // AM_RANGE(0x50c0, 0x50c0) AM_READ_PORT("DSW2") // only one DSW on the PCB -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::alibaba_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4eef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ef0, 0x4eff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x4f00, 0x4fff) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("latch1", ls259_device, write_d0) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf38) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5040, 0x506f) AM_MIRROR(0xaf00) AM_WRITE(alibaba_sound_w) /* the sound region is not contiguous */ - AM_RANGE(0x5050, 0x505f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c7) AM_MIRROR(0xaf00) AM_DEVWRITE("latch2", ls259_device, write_d0) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf00) AM_READ(alibaba_mystery_1_r) - AM_RANGE(0x50c1, 0x50c1) AM_MIRROR(0xaf00) AM_READ(alibaba_mystery_2_r) - AM_RANGE(0x50c2, 0x50ff) AM_MIRROR(0xaf00) AM_READ(pacman_read_nop) - AM_RANGE(0x8000, 0x8fff) AM_ROM - AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0c00) AM_RAM - AM_RANGE(0xa000, 0xa7ff) AM_MIRROR(0x1800) AM_ROM -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::dremshpr_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) +} + + +void pacman_state::alibaba_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4eef).mirror(0xa000).ram(); + map(0x4ef0, 0x4eff).mirror(0xa000).ram().share("spriteram"); + map(0x4f00, 0x4fff).mirror(0xa000).ram(); + map(0x5000, 0x5007).mirror(0xaf38).w("latch1", FUNC(ls259_device::write_d0)); + map(0x5000, 0x5000).mirror(0xaf38).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5040, 0x506f).mirror(0xaf00).w(this, FUNC(pacman_state::alibaba_sound_w)); /* the sound region is not contiguous */ + map(0x5050, 0x505f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c7).mirror(0xaf00).w("latch2", FUNC(ls259_device::write_d0)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf00).r(this, FUNC(pacman_state::alibaba_mystery_1_r)); + map(0x50c1, 0x50c1).mirror(0xaf00).r(this, FUNC(pacman_state::alibaba_mystery_2_r)); + map(0x50c2, 0x50ff).mirror(0xaf00).r(this, FUNC(pacman_state::pacman_read_nop)); + map(0x8000, 0x8fff).rom(); + map(0x9000, 0x93ff).mirror(0x0c00).ram(); + map(0xa000, 0xa7ff).mirror(0x1800).rom(); +} + + +void pacman_state::dremshpr_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); // AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") - AM_RANGE(0x8000, 0xbfff) AM_ROM + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); + map(0x8000, 0xbfff).rom(); /* vanvan: probably a leftover from development: the Sanritsu version writes the color lookup table here, while the Karateco version writes garbage. */ - AM_RANGE(0xb800, 0xb87f) AM_WRITENOP -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::epos_map) - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROMBANK("bank1") - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::s2650games_map) - AM_RANGE(0x0000, 0x0fff) AM_ROMBANK("bank1") - AM_RANGE(0x1000, 0x13ff) AM_MIRROR(0x6000) AM_WRITE(s2650games_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x1400, 0x141f) AM_MIRROR(0x6000) AM_WRITE(s2650games_scroll_w) - AM_RANGE(0x1420, 0x148f) AM_MIRROR(0x6000) AM_WRITEONLY - AM_RANGE(0x1490, 0x149f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("s2650_spriteram") - AM_RANGE(0x14a0, 0x14bf) AM_MIRROR(0x6000) AM_WRITE(s2650games_tilesbank_w) AM_SHARE("s2650_tileram") - AM_RANGE(0x14c0, 0x14ff) AM_MIRROR(0x6000) AM_WRITEONLY - AM_RANGE(0x1500, 0x1507) AM_MIRROR(0x6000) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x1508, 0x155f) AM_MIRROR(0x6000) AM_WRITEONLY - AM_RANGE(0x1560, 0x156f) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x1570, 0x157f) AM_MIRROR(0x6000) AM_WRITEONLY - AM_RANGE(0x1586, 0x1587) AM_MIRROR(0x6000) AM_WRITENOP - AM_RANGE(0x15c0, 0x15c0) AM_MIRROR(0x6000) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x15c7, 0x15c7) AM_MIRROR(0x6000) AM_WRITE(porky_banking_w) - AM_RANGE(0x1500, 0x1500) AM_MIRROR(0x6000) AM_READ_PORT("IN0") - AM_RANGE(0x1540, 0x1540) AM_MIRROR(0x6000) AM_READ_PORT("IN1") - AM_RANGE(0x1580, 0x1580) AM_MIRROR(0x6000) AM_READ_PORT("DSW0") - AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_WRITE(s2650games_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x1c00, 0x1fef) AM_MIRROR(0x6000) AM_RAM - AM_RANGE(0x1ff0, 0x1fff) AM_MIRROR(0x6000) AM_WRITEONLY AM_SHARE("spriteram") - AM_RANGE(0x2000, 0x2fff) AM_ROMBANK("bank2") - AM_RANGE(0x4000, 0x4fff) AM_ROMBANK("bank3") - AM_RANGE(0x6000, 0x6fff) AM_ROMBANK("bank4") -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::rocktrv2_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4c00, 0x4fff) AM_RAM - AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5fe0, 0x5fe3) AM_WRITE(rocktrv2_prot_data_w) AM_SHARE("rocktrv2_prot") - AM_RANGE(0x5ff0, 0x5ff0) AM_WRITE(rocktrv2_question_bank_w) - AM_RANGE(0x5000, 0x5000) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x507f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_READ_PORT("DSW2") - AM_RANGE(0x5fe0, 0x5fe0) AM_READ(rocktrv2_prot1_data_r) - AM_RANGE(0x5fe4, 0x5fe4) AM_READ(rocktrv2_prot2_data_r) - AM_RANGE(0x5fe8, 0x5fe8) AM_READ(rocktrv2_prot3_data_r) - AM_RANGE(0x5fec, 0x5fec) AM_READ(rocktrv2_prot4_data_r) - AM_RANGE(0x5fff, 0x5fff) AM_READ_PORT("DSW2") /* DSW2 mirrored */ - AM_RANGE(0x6000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xffff) AM_READ(rocktrv2_question_r) -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::bigbucks_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4c00, 0x4fff) AM_RAM - AM_RANGE(0x5000, 0x5007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x50c0, 0x50c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x503f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x507f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x50bf) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50ff) AM_READ_PORT("DSW2") - AM_RANGE(0x5100, 0x5100) AM_WRITENOP /*?*/ - AM_RANGE(0x6000, 0x6000) AM_WRITE(bigbucks_bank_w) - AM_RANGE(0x8000, 0x9fff) AM_ROM -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::mschamp_map) - AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank1") - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::superabc_map) - AM_RANGE(0x0000, 0x3fff) AM_ROMBANK("bank1") - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4fef) AM_MIRROR(0xa000) AM_RAM AM_SHARE("28c16.u17") // nvram - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5002, 0x5002) AM_MIRROR(0xaf3c) AM_WRITE(superabc_bank_w) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5040, 0x5040) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW1") - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_READ_PORT("DSW2") - AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank2") - AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank3") -ADDRESS_MAP_END - - -ADDRESS_MAP_START(pacman_state::crushs_map) - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x8000) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4400, 0x47ff) AM_MIRROR(0xa000) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0xa000) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x4c00, 0x4fef) AM_MIRROR(0xa000) AM_RAM - AM_RANGE(0x4ff0, 0x4fff) AM_MIRROR(0xa000) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x5000, 0x5007) AM_MIRROR(0xaf38) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x5040, 0x505f) AM_MIRROR(0xaf00) AM_WRITENOP // doesn't use pacman sound hw - AM_RANGE(0x5060, 0x506f) AM_MIRROR(0xaf00) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x5070, 0x507f) AM_MIRROR(0xaf00) AM_WRITENOP - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_WRITENOP - AM_RANGE(0x50c0, 0x50c0) AM_MIRROR(0xaf3f) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x5000, 0x5000) AM_MIRROR(0xaf3f) AM_READ_PORT("IN0") - AM_RANGE(0x5080, 0x5080) AM_MIRROR(0xaf3f) AM_READ_PORT("IN1") -ADDRESS_MAP_END - - - -ADDRESS_MAP_START(pacman_state::pengojpm_map) - AM_RANGE(0x0000, 0x0fff) AM_ROM + map(0xb800, 0xb87f).nopw(); +} + + +void pacman_state::epos_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x8000).bankr("bank1"); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); +} + + +void pacman_state::s2650games_map(address_map &map) +{ + map(0x0000, 0x0fff).bankr("bank1"); + map(0x1000, 0x13ff).mirror(0x6000).w(this, FUNC(pacman_state::s2650games_colorram_w)).share("colorram"); + map(0x1400, 0x141f).mirror(0x6000).w(this, FUNC(pacman_state::s2650games_scroll_w)); + map(0x1420, 0x148f).mirror(0x6000).writeonly(); + map(0x1490, 0x149f).mirror(0x6000).writeonly().share("s2650_spriteram"); + map(0x14a0, 0x14bf).mirror(0x6000).w(this, FUNC(pacman_state::s2650games_tilesbank_w)).share("s2650_tileram"); + map(0x14c0, 0x14ff).mirror(0x6000).writeonly(); + map(0x1500, 0x1507).mirror(0x6000).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x1508, 0x155f).mirror(0x6000).writeonly(); + map(0x1560, 0x156f).mirror(0x6000).writeonly().share("spriteram2"); + map(0x1570, 0x157f).mirror(0x6000).writeonly(); + map(0x1586, 0x1587).mirror(0x6000).nopw(); + map(0x15c0, 0x15c0).mirror(0x6000).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x15c7, 0x15c7).mirror(0x6000).w(this, FUNC(pacman_state::porky_banking_w)); + map(0x1500, 0x1500).mirror(0x6000).portr("IN0"); + map(0x1540, 0x1540).mirror(0x6000).portr("IN1"); + map(0x1580, 0x1580).mirror(0x6000).portr("DSW0"); + map(0x1800, 0x1bff).mirror(0x6000).w(this, FUNC(pacman_state::s2650games_videoram_w)).share("videoram"); + map(0x1c00, 0x1fef).mirror(0x6000).ram(); + map(0x1ff0, 0x1fff).mirror(0x6000).writeonly().share("spriteram"); + map(0x2000, 0x2fff).bankr("bank2"); + map(0x4000, 0x4fff).bankr("bank3"); + map(0x6000, 0x6fff).bankr("bank4"); +} + + +void pacman_state::rocktrv2_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x43ff).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4c00, 0x4fff).ram(); + map(0x5000, 0x5007).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x50c0, 0x50c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5fe0, 0x5fe3).w(this, FUNC(pacman_state::rocktrv2_prot_data_w)).share("rocktrv2_prot"); + map(0x5ff0, 0x5ff0).w(this, FUNC(pacman_state::rocktrv2_question_bank_w)); + map(0x5000, 0x5000).portr("IN0"); + map(0x5040, 0x507f).portr("IN1"); + map(0x5080, 0x5080).portr("DSW1"); + map(0x50c0, 0x50c0).portr("DSW2"); + map(0x5fe0, 0x5fe0).r(this, FUNC(pacman_state::rocktrv2_prot1_data_r)); + map(0x5fe4, 0x5fe4).r(this, FUNC(pacman_state::rocktrv2_prot2_data_r)); + map(0x5fe8, 0x5fe8).r(this, FUNC(pacman_state::rocktrv2_prot3_data_r)); + map(0x5fec, 0x5fec).r(this, FUNC(pacman_state::rocktrv2_prot4_data_r)); + map(0x5fff, 0x5fff).portr("DSW2"); /* DSW2 mirrored */ + map(0x6000, 0x7fff).rom(); + map(0x8000, 0xffff).r(this, FUNC(pacman_state::rocktrv2_question_r)); +} + + +void pacman_state::bigbucks_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x43ff).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4c00, 0x4fff).ram(); + map(0x5000, 0x5007).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x50c0, 0x50c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x503f).portr("IN0"); + map(0x5040, 0x507f).portr("IN1"); + map(0x5080, 0x50bf).portr("DSW1"); + map(0x50c0, 0x50ff).portr("DSW2"); + map(0x5100, 0x5100).nopw(); /*?*/ + map(0x6000, 0x6000).w(this, FUNC(pacman_state::bigbucks_bank_w)); + map(0x8000, 0x9fff).rom(); +} + + +void pacman_state::mschamp_map(address_map &map) +{ + map(0x0000, 0x3fff).bankr("bank1"); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); + map(0x8000, 0xbfff).bankr("bank2"); +} + + +void pacman_state::superabc_map(address_map &map) +{ + map(0x0000, 0x3fff).bankr("bank1"); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4fef).mirror(0xa000).ram().share("28c16.u17"); // nvram + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5002, 0x5002).mirror(0xaf3c).w(this, FUNC(pacman_state::superabc_bank_w)); + map(0x5040, 0x505f).mirror(0xaf00).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5040, 0x5040).mirror(0xaf3f).portr("IN1"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("DSW1"); + map(0x50c0, 0x50c0).mirror(0xaf3f).portr("DSW2"); + map(0x8000, 0x9fff).bankr("bank2"); + map(0xa000, 0xbfff).bankr("bank3"); +} + + +void pacman_state::crushs_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x8000).rom(); + map(0x4000, 0x43ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x4400, 0x47ff).mirror(0xa000).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); + map(0x4800, 0x4bff).mirror(0xa000).r(this, FUNC(pacman_state::pacman_read_nop)).nopw(); + map(0x4c00, 0x4fef).mirror(0xa000).ram(); + map(0x4ff0, 0x4fff).mirror(0xa000).ram().share("spriteram"); + map(0x5000, 0x5007).mirror(0xaf38).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x5040, 0x505f).mirror(0xaf00).nopw(); // doesn't use pacman sound hw + map(0x5060, 0x506f).mirror(0xaf00).writeonly().share("spriteram2"); + map(0x5070, 0x507f).mirror(0xaf00).nopw(); + map(0x5080, 0x5080).mirror(0xaf3f).nopw(); + map(0x50c0, 0x50c0).mirror(0xaf3f).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x5000, 0x5000).mirror(0xaf3f).portr("IN0"); + map(0x5080, 0x5080).mirror(0xaf3f).portr("IN1"); +} + + + +void pacman_state::pengojpm_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); // AM_RANGE(0x1000, 0x1fff) // header check for 0x55aa at POST, diagnostic ROM? - AM_RANGE(0x4000, 0x7fff) AM_ROM + map(0x4000, 0x7fff).rom(); - AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(pacman_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(pacman_colorram_w) AM_SHARE("colorram") + map(0x8000, 0x83ff).ram().w(this, FUNC(pacman_state::pacman_videoram_w)).share("videoram"); + map(0x8400, 0x87ff).ram().w(this, FUNC(pacman_state::pacman_colorram_w)).share("colorram"); - AM_RANGE(0x8800, 0x8bff) AM_RAM + map(0x8800, 0x8bff).ram(); // AM_RANGE(0x8800, 0x8bff) AM_READ(pacman_read_nop) AM_WRITENOP - AM_RANGE(0x8c00, 0x8fef) AM_RAM - AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x9000, 0x9007) AM_DEVWRITE("mainlatch", ls259_device, write_d0) - AM_RANGE(0x9040, 0x905f) AM_DEVWRITE("namco", namco_device, pacman_sound_w) - AM_RANGE(0x9060, 0x906f) AM_WRITEONLY AM_SHARE("spriteram2") - AM_RANGE(0x9070, 0x907f) AM_WRITENOP - AM_RANGE(0x9080, 0x9080) AM_WRITENOP - AM_RANGE(0x90c0, 0x90c0) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN0") - AM_RANGE(0x9040, 0x9040) AM_READ_PORT("IN1") - AM_RANGE(0x9080, 0x9080) AM_READ_PORT("DSW1") - AM_RANGE(0x90c0, 0x90c0) AM_READ_PORT("DSW2") - - AM_RANGE(0xf000, 0xffff) AM_RAM -ADDRESS_MAP_END + map(0x8c00, 0x8fef).ram(); + map(0x8ff0, 0x8fff).ram().share("spriteram"); + map(0x9000, 0x9007).w("mainlatch", FUNC(ls259_device::write_d0)); + map(0x9040, 0x905f).w(m_namco_sound, FUNC(namco_device::pacman_sound_w)); + map(0x9060, 0x906f).writeonly().share("spriteram2"); + map(0x9070, 0x907f).nopw(); + map(0x9080, 0x9080).nopw(); + map(0x90c0, 0x90c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w)); + map(0x9000, 0x9000).portr("IN0"); + map(0x9040, 0x9040).portr("IN1"); + map(0x9080, 0x9080).portr("DSW1"); + map(0x90c0, 0x90c0).portr("DSW2"); + + map(0xf000, 0xffff).ram(); +} /************************************* @@ -1352,71 +1367,84 @@ ADDRESS_MAP_END * *************************************/ -ADDRESS_MAP_START(pacman_state::writeport) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(pacman_interrupt_vector_w) /* Pac-Man only */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::vanvan_portmap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("sn1", sn76496_device, write) - AM_RANGE(0x02, 0x02) AM_DEVWRITE("sn2", sn76496_device, write) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::dremshpr_portmap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x06, 0x07) AM_DEVWRITE("ay8910", ay8910_device, data_address_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::piranha_portmap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(piranha_interrupt_vector_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::nmouse_portmap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITE(nmouse_interrupt_vector_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::epos_portmap) - AM_IMPORT_FROM(writeport) - AM_RANGE(0x00, 0xff) AM_READ(epos_decryption_w) /* Switch protection logic */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::mschamp_portmap) - AM_IMPORT_FROM(writeport) - AM_RANGE(0x00, 0x00) AM_READ(mschamp_kludge_r) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::bigbucks_portmap) - AM_RANGE(0x0000, 0xffff) AM_READ(bigbucks_question_r) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::s2650games_dataport) - AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_DEVWRITE("sn1", sn76496_device, write) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::drivfrcp_portmap) - AM_RANGE(0x00, 0x00) AM_READNOP - AM_RANGE(0x01, 0x01) AM_READ(drivfrcp_port1_r) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::_8bpm_portmap) - AM_RANGE(0x00, 0x00) AM_READNOP - AM_RANGE(0x01, 0x01) AM_READ(_8bpm_port1_r) - AM_RANGE(0xe0, 0xe0) AM_READNOP -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::porky_portmap) - AM_RANGE(0x01, 0x01) AM_READ(porky_port1_r) -ADDRESS_MAP_END - -ADDRESS_MAP_START(pacman_state::crushs_portmap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVWRITE("ay8912", ay8912_device, data_address_w) - AM_RANGE(0x01, 0x01) AM_READ_PORT("DSW2") - AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW1") -ADDRESS_MAP_END +void pacman_state::writeport(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).w(this, FUNC(pacman_state::pacman_interrupt_vector_w)); /* Pac-Man only */ +} + +void pacman_state::vanvan_portmap(address_map &map) +{ + map.global_mask(0xff); + map(0x01, 0x01).w("sn1", FUNC(sn76496_device::write)); + map(0x02, 0x02).w("sn2", FUNC(sn76496_device::write)); +} + +void pacman_state::dremshpr_portmap(address_map &map) +{ + map.global_mask(0xff); + map(0x06, 0x07).w("ay8910", FUNC(ay8910_device::data_address_w)); +} + +void pacman_state::piranha_portmap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).w(this, FUNC(pacman_state::piranha_interrupt_vector_w)); +} + +void pacman_state::nmouse_portmap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).w(this, FUNC(pacman_state::nmouse_interrupt_vector_w)); +} + +void pacman_state::epos_portmap(address_map &map) +{ + writeport(map); + map(0x00, 0xff).r(this, FUNC(pacman_state::epos_decryption_w)); /* Switch protection logic */ +} + +void pacman_state::mschamp_portmap(address_map &map) +{ + writeport(map); + map(0x00, 0x00).r(this, FUNC(pacman_state::mschamp_kludge_r)); +} + +void pacman_state::bigbucks_portmap(address_map &map) +{ + map(0x0000, 0xffff).r(this, FUNC(pacman_state::bigbucks_question_r)); +} + +void pacman_state::s2650games_dataport(address_map &map) +{ + map(S2650_DATA_PORT, S2650_DATA_PORT).w("sn1", FUNC(sn76496_device::write)); +} + +void pacman_state::drivfrcp_portmap(address_map &map) +{ + map(0x00, 0x00).nopr(); + map(0x01, 0x01).r(this, FUNC(pacman_state::drivfrcp_port1_r)); +} + +void pacman_state::_8bpm_portmap(address_map &map) +{ + map(0x00, 0x00).nopr(); + map(0x01, 0x01).r(this, FUNC(pacman_state::_8bpm_port1_r)); + map(0xe0, 0xe0).nopr(); +} + +void pacman_state::porky_portmap(address_map &map) +{ + map(0x01, 0x01).r(this, FUNC(pacman_state::porky_port1_r)); +} + +void pacman_state::crushs_portmap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).w("ay8912", FUNC(ay8912_device::data_address_w)); + map(0x01, 0x01).portr("DSW2"); + map(0x02, 0x02).portr("DSW1"); +} |