diff options
Diffstat (limited to 'src/mame/drivers/asuka.cpp')
-rw-r--r-- | src/mame/drivers/asuka.cpp | 218 |
1 files changed, 115 insertions, 103 deletions
diff --git a/src/mame/drivers/asuka.cpp b/src/mame/drivers/asuka.cpp index 8f84cf92c6c..a322a657693 100644 --- a/src/mame/drivers/asuka.cpp +++ b/src/mame/drivers/asuka.cpp @@ -327,108 +327,118 @@ WRITE8_MEMBER(asuka_state::coin_control_w) MEMORY STRUCTURES ***********************************************************/ -ADDRESS_MAP_START(asuka_state::bonzeadv_map) - AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x080000, 0x0fffff) AM_ROM - AM_RANGE(0x10c000, 0x10ffff) AM_RAM - AM_RANGE(0x200000, 0x200007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_device, word_r, step1_word_w) - AM_RANGE(0x390000, 0x390001) AM_READ_PORT("DSWA") - AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w) - AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB") - AM_RANGE(0x3c0000, 0x3c0001) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w) - AM_RANGE(0x3d0000, 0x3d0001) AM_READNOP - AM_RANGE(0x3e0000, 0x3e0001) AM_DEVWRITE8("tc0140syt", tc0140syt_device, master_port_w, 0x00ff) - AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("tc0140syt", tc0140syt_device, master_comm_r, master_comm_w, 0x00ff) - AM_RANGE(0x800000, 0x8007ff) AM_DEVREADWRITE8("cchip", taito_cchip_device, mem68_r, mem68_w, 0x00ff) - AM_RANGE(0x800800, 0x800fff) AM_DEVREADWRITE8("cchip", taito_cchip_device, asic_r, asic68_w, 0x00ff) - AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, word_r, word_w) /* tilemaps */ - AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_word_r, ctrl_word_w) - AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(asuka_state::asuka_map) - AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x103fff) AM_RAM - AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */ - AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_device, word_r, step1_word_w) - AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w) - AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_DEVWRITE8("ciu", pc060ha_device, master_port_w, 0x00ff) - AM_RANGE(0x3e0002, 0x3e0003) AM_DEVREADWRITE8("ciu", pc060ha_device, master_comm_r, master_comm_w, 0x00ff) - AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_device, read, write, 0x00ff) - AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, word_r, word_w) /* tilemaps */ - AM_RANGE(0xc10000, 0xc103ff) AM_WRITENOP /* error in Asuka init code */ - AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_word_r, ctrl_word_w) - AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(asuka_state::cadash_map) - AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x080000, 0x080003) AM_WRITE(asuka_spritectrl_w) - AM_RANGE(0x0c0000, 0x0c0001) AM_READNOP AM_DEVWRITE8("ciu", pc060ha_device, master_port_w, 0x00ff) - AM_RANGE(0x0c0002, 0x0c0003) AM_DEVREADWRITE8("ciu", pc060ha_device, master_comm_r, master_comm_w, 0x00ff) - AM_RANGE(0x100000, 0x107fff) AM_RAM - AM_RANGE(0x800000, 0x800fff) AM_READWRITE(cadash_share_r,cadash_share_w) /* network ram */ - AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_device, read, write, 0x00ff) - AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_device, word_r, step1_4bpg_word_w) - AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */ - AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, word_r, word_w) /* tilemaps */ - AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_word_r, ctrl_word_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(asuka_state::eto_map) /* N.B. tc100scn mirror overlaps spriteram */ - AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_device, word_r, step1_word_w) - AM_RANGE(0x200000, 0x203fff) AM_RAM - AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_device, read, write, 0x00ff) - AM_RANGE(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_device, read, 0x00ff) /* service mode mirror */ - AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w) - AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_DEVWRITE8("ciu", pc060ha_device, master_port_w, 0x00ff) - AM_RANGE(0x4e0002, 0x4e0003) AM_DEVREADWRITE8("ciu", pc060ha_device, master_comm_r, master_comm_w, 0x00ff) - AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_device, word_w) - AM_RANGE(0xc00000, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_device, word_r, word_w) /* sprite ram */ - AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, word_r, word_w) /* tilemaps */ - AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_device, ctrl_word_r, ctrl_word_w) -ADDRESS_MAP_END +void asuka_state::bonzeadv_map(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0x080000, 0x0fffff).rom(); + map(0x10c000, 0x10ffff).ram(); + map(0x200000, 0x200007).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); + map(0x390000, 0x390001).portr("DSWA"); + map(0x3a0000, 0x3a0001).w(this, FUNC(asuka_state::asuka_spritectrl_w)); + map(0x3b0000, 0x3b0001).portr("DSWB"); + map(0x3c0000, 0x3c0001).w("watchdog", FUNC(watchdog_timer_device::reset16_w)); + map(0x3d0000, 0x3d0001).nopr(); + map(0x3e0001, 0x3e0001).w("tc0140syt", FUNC(tc0140syt_device::master_port_w)); + map(0x3e0003, 0x3e0003).rw("tc0140syt", FUNC(tc0140syt_device::master_comm_r), FUNC(tc0140syt_device::master_comm_w)); + map(0x800000, 0x8007ff).rw(m_cchip, FUNC(taito_cchip_device::mem68_r), FUNC(taito_cchip_device::mem68_w)).umask16(0x00ff); + map(0x800800, 0x800fff).rw(m_cchip, FUNC(taito_cchip_device::asic_r), FUNC(taito_cchip_device::asic68_w)).umask16(0x00ff); + map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::word_r), FUNC(tc0100scn_device::word_w)); /* tilemaps */ + map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_word_r), FUNC(tc0100scn_device::ctrl_word_w)); + map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); /* sprite ram */ +} + +void asuka_state::asuka_map(address_map &map) +{ + map(0x000000, 0x0fffff).rom(); + map(0x100000, 0x103fff).ram(); + map(0x1076f0, 0x1076f1).nopr(); /* Mofflott init does dummy reads here */ + map(0x200000, 0x20000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); + map(0x3a0000, 0x3a0003).w(this, FUNC(asuka_state::asuka_spritectrl_w)); + map(0x3e0000, 0x3e0001).nopr(); + map(0x3e0001, 0x3e0001).w("ciu", FUNC(pc060ha_device::master_port_w)); + map(0x3e0003, 0x3e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); + map(0x400000, 0x40000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); + map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::word_r), FUNC(tc0100scn_device::word_w)); /* tilemaps */ + map(0xc10000, 0xc103ff).nopw(); /* error in Asuka init code */ + map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_word_r), FUNC(tc0100scn_device::ctrl_word_w)); + map(0xd00000, 0xd03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); /* sprite ram */ +} + +void asuka_state::cadash_map(address_map &map) +{ + map(0x000000, 0x07ffff).rom(); + map(0x080000, 0x080003).w(this, FUNC(asuka_state::asuka_spritectrl_w)); + map(0x0c0000, 0x0c0001).nopr(); + map(0x0c0001, 0x0c0001).w("ciu", FUNC(pc060ha_device::master_port_w)); + map(0x0c0003, 0x0c0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); + map(0x100000, 0x107fff).ram(); + map(0x800000, 0x800fff).rw(this, FUNC(asuka_state::cadash_share_r), FUNC(asuka_state::cadash_share_w)); /* network ram */ + map(0x900000, 0x90000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); + map(0xa00000, 0xa0000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_4bpg_word_w)); + map(0xb00000, 0xb03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); /* sprite ram */ + map(0xc00000, 0xc0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::word_r), FUNC(tc0100scn_device::word_w)); /* tilemaps */ + map(0xc20000, 0xc2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_word_r), FUNC(tc0100scn_device::ctrl_word_w)); +} + +void asuka_state::eto_map(address_map &map) +{ /* N.B. tc100scn mirror overlaps spriteram */ + map(0x000000, 0x0fffff).rom(); + map(0x100000, 0x10000f).rw(m_tc0110pcr, FUNC(tc0110pcr_device::word_r), FUNC(tc0110pcr_device::step1_word_w)); + map(0x200000, 0x203fff).ram(); + map(0x300000, 0x30000f).rw(m_tc0220ioc, FUNC(tc0220ioc_device::read), FUNC(tc0220ioc_device::write)).umask16(0x00ff); + map(0x400000, 0x40000f).r(m_tc0220ioc, FUNC(tc0220ioc_device::read)).umask16(0x00ff); /* service mode mirror */ + map(0x4a0000, 0x4a0003).w(this, FUNC(asuka_state::asuka_spritectrl_w)); + map(0x4e0000, 0x4e0001).nopr(); + map(0x4e0001, 0x4e0001).w("ciu", FUNC(pc060ha_device::master_port_w)); + map(0x4e0003, 0x4e0003).rw("ciu", FUNC(pc060ha_device::master_comm_r), FUNC(pc060ha_device::master_comm_w)); + map(0xc00000, 0xc0ffff).w(m_tc0100scn, FUNC(tc0100scn_device::word_w)); + map(0xc00000, 0xc03fff).rw(m_pc090oj, FUNC(pc090oj_device::word_r), FUNC(pc090oj_device::word_w)); /* sprite ram */ + map(0xd00000, 0xd0ffff).rw(m_tc0100scn, FUNC(tc0100scn_device::word_r), FUNC(tc0100scn_device::word_w)); /* tilemaps */ + map(0xd20000, 0xd2000f).rw(m_tc0100scn, FUNC(tc0100scn_device::ctrl_word_r), FUNC(tc0100scn_device::ctrl_word_w)); +} /***************************************************************************/ -ADDRESS_MAP_START(asuka_state::bonzeadv_z80_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank") - AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe003) AM_DEVREADWRITE("ymsnd", ym2610_device, read, write) - AM_RANGE(0xe200, 0xe200) AM_DEVWRITE("tc0140syt", tc0140syt_device, slave_port_w) - AM_RANGE(0xe201, 0xe201) AM_DEVREADWRITE("tc0140syt", tc0140syt_device, slave_comm_r, slave_comm_w) - AM_RANGE(0xe400, 0xe403) AM_WRITENOP /* pan */ - AM_RANGE(0xe600, 0xe600) AM_WRITENOP - AM_RANGE(0xee00, 0xee00) AM_WRITENOP - AM_RANGE(0xf000, 0xf000) AM_WRITENOP - AM_RANGE(0xf200, 0xf200) AM_WRITE(sound_bankswitch_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(asuka_state::z80_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank") - AM_RANGE(0x8000, 0x8fff) AM_RAM - AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) -// AM_RANGE(0x9002, 0x9100) AM_READNOP - AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("ciu", pc060ha_device, slave_port_w) - AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("ciu", pc060ha_device, slave_comm_r, slave_comm_w) - AM_RANGE(0xb000, 0xb000) AM_WRITE(asuka_msm5205_address_w) - AM_RANGE(0xc000, 0xc000) AM_WRITE(asuka_msm5205_start_w) - AM_RANGE(0xd000, 0xd000) AM_WRITE(asuka_msm5205_stop_w) -ADDRESS_MAP_END +void asuka_state::bonzeadv_z80_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x7fff).bankr("audiobank"); + map(0xc000, 0xdfff).ram(); + map(0xe000, 0xe003).rw("ymsnd", FUNC(ym2610_device::read), FUNC(ym2610_device::write)); + map(0xe200, 0xe200).w("tc0140syt", FUNC(tc0140syt_device::slave_port_w)); + map(0xe201, 0xe201).rw("tc0140syt", FUNC(tc0140syt_device::slave_comm_r), FUNC(tc0140syt_device::slave_comm_w)); + map(0xe400, 0xe403).nopw(); /* pan */ + map(0xe600, 0xe600).nopw(); + map(0xee00, 0xee00).nopw(); + map(0xf000, 0xf000).nopw(); + map(0xf200, 0xf200).w(this, FUNC(asuka_state::sound_bankswitch_w)); +} + +void asuka_state::z80_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x7fff).bankr("audiobank"); + map(0x8000, 0x8fff).ram(); + map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); +// map(0x9002, 0x9100).nopr(); + map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w)); + map(0xa001, 0xa001).rw("ciu", FUNC(pc060ha_device::slave_comm_r), FUNC(pc060ha_device::slave_comm_w)); + map(0xb000, 0xb000).w(this, FUNC(asuka_state::asuka_msm5205_address_w)); + map(0xc000, 0xc000).w(this, FUNC(asuka_state::asuka_msm5205_start_w)); + map(0xd000, 0xd000).w(this, FUNC(asuka_state::asuka_msm5205_stop_w)); +} /* no MSM5205 */ -ADDRESS_MAP_START(asuka_state::cadash_z80_map) - AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("audiobank") - AM_RANGE(0x8000, 0x8fff) AM_RAM - AM_RANGE(0x9000, 0x9001) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0xa000, 0xa000) AM_DEVWRITE("ciu", pc060ha_device, slave_port_w) - AM_RANGE(0xa001, 0xa001) AM_DEVREADWRITE("ciu", pc060ha_device, slave_comm_r, slave_comm_w) -ADDRESS_MAP_END +void asuka_state::cadash_z80_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x7fff).bankr("audiobank"); + map(0x8000, 0x8fff).ram(); + map(0x9000, 0x9001).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); + map(0xa000, 0xa000).w("ciu", FUNC(pc060ha_device::slave_port_w)); + map(0xa001, 0xa001).rw("ciu", FUNC(pc060ha_device::slave_comm_r), FUNC(pc060ha_device::slave_comm_w)); +} /* Cadash communication CPU is a z180. @@ -446,14 +456,16 @@ communicates with m68k S with its own shared ram. In short: m68k M -> z180 M <-> z180 S <- m68k S */ -ADDRESS_MAP_START(asuka_state::cadash_sub_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("sharedram") -ADDRESS_MAP_END +void asuka_state::cadash_sub_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x87ff).ram().share("sharedram"); +} -ADDRESS_MAP_START(asuka_state::cadash_sub_io) - AM_RANGE(0x00, 0x3f) AM_RAM // z180 internal I/O regs -ADDRESS_MAP_END +void asuka_state::cadash_sub_io(address_map &map) +{ + map(0x00, 0x3f).ram(); // z180 internal I/O regs +} /*********************************************************** INPUT PORTS, DIPs |