summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/toki.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/toki.cpp')
-rw-r--r--src/mame/drivers/toki.cpp179
1 files changed, 93 insertions, 86 deletions
diff --git a/src/mame/drivers/toki.cpp b/src/mame/drivers/toki.cpp
index 60070204004..6aa854c7cb7 100644
--- a/src/mame/drivers/toki.cpp
+++ b/src/mame/drivers/toki.cpp
@@ -142,106 +142,113 @@ WRITE8_MEMBER(toki_state::tokib_adpcm_data_w)
/*****************************************************************************/
-ADDRESS_MAP_START(toki_state::toki_map)
- AM_RANGE(0x000000, 0x05ffff) AM_ROM
- AM_RANGE(0x060000, 0x06d7ff) AM_RAM
- AM_RANGE(0x06d800, 0x06dfff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x06e000, 0x06e7ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x06e800, 0x06efff) AM_RAM_WRITE(background1_videoram_w) AM_SHARE("bg1_vram")
- AM_RANGE(0x06f000, 0x06f7ff) AM_RAM_WRITE(background2_videoram_w) AM_SHARE("bg2_vram")
- AM_RANGE(0x06f800, 0x06ffff) AM_RAM_WRITE(foreground_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x080000, 0x08000d) AM_DEVREADWRITE8("seibu_sound", seibu_sound_device, main_r, main_w, 0x00ff)
- AM_RANGE(0x0a0000, 0x0a005f) AM_WRITE(toki_control_w) AM_SHARE("scrollram")
- AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("DSW")
- AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("INPUTS")
- AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("SYSTEM")
-ADDRESS_MAP_END
+void toki_state::toki_map(address_map &map)
+{
+ map(0x000000, 0x05ffff).rom();
+ map(0x060000, 0x06d7ff).ram();
+ map(0x06d800, 0x06dfff).ram().share("spriteram");
+ map(0x06e000, 0x06e7ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x06e800, 0x06efff).ram().w(this, FUNC(toki_state::background1_videoram_w)).share("bg1_vram");
+ map(0x06f000, 0x06f7ff).ram().w(this, FUNC(toki_state::background2_videoram_w)).share("bg2_vram");
+ map(0x06f800, 0x06ffff).ram().w(this, FUNC(toki_state::foreground_videoram_w)).share("videoram");
+ map(0x080000, 0x08000d).rw(m_seibu_sound, FUNC(seibu_sound_device::main_r), FUNC(seibu_sound_device::main_w)).umask16(0x00ff);
+ map(0x0a0000, 0x0a005f).w(this, FUNC(toki_state::toki_control_w)).share("scrollram");
+ map(0x0c0000, 0x0c0001).portr("DSW");
+ map(0x0c0002, 0x0c0003).portr("INPUTS");
+ map(0x0c0004, 0x0c0005).portr("SYSTEM");
+}
/* In the bootleg, sound and sprites are remapped to 0x70000 */
-ADDRESS_MAP_START(toki_state::tokib_map)
- AM_RANGE(0x000000, 0x05ffff) AM_ROM
- AM_RANGE(0x060000, 0x06dfff) AM_RAM
- AM_RANGE(0x06e000, 0x06e7ff) AM_RAM_DEVWRITE("palette", palette_device, write16) AM_SHARE("palette")
- AM_RANGE(0x06e800, 0x06efff) AM_RAM_WRITE(background1_videoram_w) AM_SHARE("bg1_vram")
- AM_RANGE(0x06f000, 0x06f7ff) AM_RAM_WRITE(background2_videoram_w) AM_SHARE("bg2_vram")
- AM_RANGE(0x06f800, 0x06ffff) AM_RAM_WRITE(foreground_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x071000, 0x071001) AM_WRITENOP /* sprite related? seems another scroll register */
+void toki_state::tokib_map(address_map &map)
+{
+ map(0x000000, 0x05ffff).rom();
+ map(0x060000, 0x06dfff).ram();
+ map(0x06e000, 0x06e7ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
+ map(0x06e800, 0x06efff).ram().w(this, FUNC(toki_state::background1_videoram_w)).share("bg1_vram");
+ map(0x06f000, 0x06f7ff).ram().w(this, FUNC(toki_state::background2_videoram_w)).share("bg2_vram");
+ map(0x06f800, 0x06ffff).ram().w(this, FUNC(toki_state::foreground_videoram_w)).share("videoram");
+ map(0x071000, 0x071001).nopw(); /* sprite related? seems another scroll register */
/* gets written the same value as 75000a (bg2 scrollx) */
- AM_RANGE(0x071804, 0x071807) AM_WRITENOP /* sprite related, always 01be0100 */
- AM_RANGE(0x07180e, 0x071e45) AM_WRITEONLY AM_SHARE("spriteram")
- AM_RANGE(0x072000, 0x072001) AM_DEVREAD("watchdog", watchdog_timer_device, reset16_r) /* probably */
- AM_RANGE(0x075000, 0x075001) AM_WRITE(tokib_soundcommand_w)
- AM_RANGE(0x075004, 0x07500b) AM_WRITEONLY AM_SHARE("scrollram")
- AM_RANGE(0x0c0000, 0x0c0001) AM_READ_PORT("DSW")
- AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("INPUTS")
- AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("SYSTEM")
- AM_RANGE(0x0c000e, 0x0c000f) AM_READ(pip_r) /* sound related, if we return 0 the code writes */
+ map(0x071804, 0x071807).nopw(); /* sprite related, always 01be0100 */
+ map(0x07180e, 0x071e45).writeonly().share("spriteram");
+ map(0x072000, 0x072001).r("watchdog", FUNC(watchdog_timer_device::reset16_r)); /* probably */
+ map(0x075000, 0x075001).w(this, FUNC(toki_state::tokib_soundcommand_w));
+ map(0x075004, 0x07500b).writeonly().share("scrollram");
+ map(0x0c0000, 0x0c0001).portr("DSW");
+ map(0x0c0002, 0x0c0003).portr("INPUTS");
+ map(0x0c0004, 0x0c0005).portr("SYSTEM");
+ map(0x0c000e, 0x0c000f).r(this, FUNC(toki_state::pip_r)); /* sound related, if we return 0 the code writes */
/* the sound command quickly followed by 0 and the */
/* sound CPU often misses the command. */
-ADDRESS_MAP_END
+}
/*****************************************************************************/
-ADDRESS_MAP_START(toki_state::toki_audio_map)
- AM_RANGE(0x0000, 0x1fff) AM_DEVREAD("sei80bu", sei80bu_device, data_r)
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START(toki_state::toki_audio_opcodes_map)
- AM_RANGE(0x0000, 0x1fff) AM_DEVREAD("sei80bu", sei80bu_device, opcode_r)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START(toki_state::jujuba_audio_map)
- AM_RANGE(0x0000, 0x1fff) AM_READ(jujuba_z80_data_decrypt)
- AM_RANGE(0x2000, 0x27ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("seibu_sound", seibu_sound_device, pending_w)
- AM_RANGE(0x4001, 0x4001) AM_DEVWRITE("seibu_sound", seibu_sound_device, irq_clear_w)
- AM_RANGE(0x4002, 0x4002) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst10_ack_w)
- AM_RANGE(0x4003, 0x4003) AM_DEVWRITE("seibu_sound", seibu_sound_device, rst18_ack_w)
- AM_RANGE(0x4007, 0x4007) AM_DEVWRITE("seibu_sound", seibu_sound_device, bank_w)
- AM_RANGE(0x4008, 0x4009) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, ym_r, ym_w)
- AM_RANGE(0x4010, 0x4011) AM_DEVREAD("seibu_sound", seibu_sound_device, soundlatch_r)
- AM_RANGE(0x4012, 0x4012) AM_DEVREAD("seibu_sound", seibu_sound_device, main_data_pending_r)
- AM_RANGE(0x4013, 0x4013) AM_READ_PORT("COIN")
- AM_RANGE(0x4018, 0x4019) AM_DEVWRITE("seibu_sound", seibu_sound_device, main_data_w)
- AM_RANGE(0x401b, 0x401b) AM_DEVWRITE("seibu_sound", seibu_sound_device, coin_w)
- AM_RANGE(0x6000, 0x6000) AM_DEVREADWRITE("oki", okim6295_device, read, write)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
-
-ADDRESS_MAP_START(toki_state::jujuba_audio_opcodes_map)
- AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("audiocpu", 0)
- AM_RANGE(0x8000, 0xffff) AM_ROMBANK("seibu_bank1")
-ADDRESS_MAP_END
+void toki_state::toki_audio_map(address_map &map)
+{
+ map(0x0000, 0x1fff).r("sei80bu", FUNC(sei80bu_device::data_r));
+ map(0x2000, 0x27ff).ram();
+ map(0x4000, 0x4000).w(m_seibu_sound, FUNC(seibu_sound_device::pending_w));
+ map(0x4001, 0x4001).w(m_seibu_sound, FUNC(seibu_sound_device::irq_clear_w));
+ map(0x4002, 0x4002).w(m_seibu_sound, FUNC(seibu_sound_device::rst10_ack_w));
+ map(0x4003, 0x4003).w(m_seibu_sound, FUNC(seibu_sound_device::rst18_ack_w));
+ map(0x4007, 0x4007).w(m_seibu_sound, FUNC(seibu_sound_device::bank_w));
+ map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
+ map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
+ map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
+ map(0x4013, 0x4013).portr("COIN");
+ map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
+ map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
+ map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x8000, 0xffff).bankr("seibu_bank1");
+}
+
+void toki_state::toki_audio_opcodes_map(address_map &map)
+{
+ map(0x0000, 0x1fff).r("sei80bu", FUNC(sei80bu_device::opcode_r));
+ map(0x8000, 0xffff).bankr("seibu_bank1");
+}
+
+void toki_state::jujuba_audio_map(address_map &map)
+{
+ map(0x0000, 0x1fff).r(this, FUNC(toki_state::jujuba_z80_data_decrypt));
+ map(0x2000, 0x27ff).ram();
+ map(0x4000, 0x4000).w(m_seibu_sound, FUNC(seibu_sound_device::pending_w));
+ map(0x4001, 0x4001).w(m_seibu_sound, FUNC(seibu_sound_device::irq_clear_w));
+ map(0x4002, 0x4002).w(m_seibu_sound, FUNC(seibu_sound_device::rst10_ack_w));
+ map(0x4003, 0x4003).w(m_seibu_sound, FUNC(seibu_sound_device::rst18_ack_w));
+ map(0x4007, 0x4007).w(m_seibu_sound, FUNC(seibu_sound_device::bank_w));
+ map(0x4008, 0x4009).rw(m_seibu_sound, FUNC(seibu_sound_device::ym_r), FUNC(seibu_sound_device::ym_w));
+ map(0x4010, 0x4011).r(m_seibu_sound, FUNC(seibu_sound_device::soundlatch_r));
+ map(0x4012, 0x4012).r(m_seibu_sound, FUNC(seibu_sound_device::main_data_pending_r));
+ map(0x4013, 0x4013).portr("COIN");
+ map(0x4018, 0x4019).w(m_seibu_sound, FUNC(seibu_sound_device::main_data_w));
+ map(0x401b, 0x401b).w(m_seibu_sound, FUNC(seibu_sound_device::coin_w));
+ map(0x6000, 0x6000).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write));
+ map(0x8000, 0xffff).bankr("seibu_bank1");
+}
+
+void toki_state::jujuba_audio_opcodes_map(address_map &map)
+{
+ map(0x0000, 0x1fff).rom().region("audiocpu", 0);
+ map(0x8000, 0xffff).bankr("seibu_bank1");
+}
READ8_MEMBER(toki_state::jujuba_z80_data_decrypt)
{
return m_audiocpu_rom[offset] ^ 0x55;
}
-ADDRESS_MAP_START(toki_state::tokib_audio_map)
- AM_RANGE(0x0000, 0x7fff) AM_ROM
- AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
- AM_RANGE(0xe000, 0xe000) AM_WRITE(tokib_adpcm_control_w) /* MSM5205 + ROM bank */
- AM_RANGE(0xe400, 0xe400) AM_WRITE(tokib_adpcm_data_w)
- AM_RANGE(0xec00, 0xec01) AM_MIRROR(0x0008) AM_DEVREADWRITE("ymsnd", ym3812_device, read, write)
- AM_RANGE(0xf000, 0xf7ff) AM_RAM
- AM_RANGE(0xf800, 0xf800) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
-ADDRESS_MAP_END
+void toki_state::tokib_audio_map(address_map &map)
+{
+ map(0x0000, 0x7fff).rom();
+ map(0x8000, 0xbfff).bankr("bank1");
+ map(0xe000, 0xe000).w(this, FUNC(toki_state::tokib_adpcm_control_w)); /* MSM5205 + ROM bank */
+ map(0xe400, 0xe400).w(this, FUNC(toki_state::tokib_adpcm_data_w));
+ map(0xec00, 0xec01).mirror(0x0008).rw("ymsnd", FUNC(ym3812_device::read), FUNC(ym3812_device::write));
+ map(0xf000, 0xf7ff).ram();
+ map(0xf800, 0xf800).r(m_soundlatch, FUNC(generic_latch_8_device::read));
+}
/*****************************************************************************/