diff options
Diffstat (limited to 'src/mame/drivers/suna16.cpp')
-rw-r--r-- | src/mame/drivers/suna16.cpp | 268 |
1 files changed, 142 insertions, 126 deletions
diff --git a/src/mame/drivers/suna16.cpp b/src/mame/drivers/suna16.cpp index 121c6d0da25..eb125547a6c 100644 --- a/src/mame/drivers/suna16.cpp +++ b/src/mame/drivers/suna16.cpp @@ -95,19 +95,20 @@ WRITE16_MEMBER(suna16_state::bestbest_coin_w) Back Street Soccer ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::bssoccer_map) - AM_RANGE(0x000000, 0x1fffff) AM_ROM // ROM - AM_RANGE(0x200000, 0x203fff) AM_RAM // RAM - AM_RANGE(0x400000, 0x4001ff) AM_READWRITE(paletteram_r, paletteram_w) // Banked Palette - AM_RANGE(0x400200, 0x400fff) AM_RAM // - AM_RANGE(0x600000, 0x61ffff) AM_RAM AM_SHARE("spriteram") // Sprites - AM_RANGE(0xa00000, 0xa00001) AM_READ_PORT("P1") AM_WRITE(soundlatch_w) // To Sound CPU - AM_RANGE(0xa00002, 0xa00003) AM_READ_PORT("P2") AM_WRITE(flipscreen_w) // Flip Screen - AM_RANGE(0xa00004, 0xa00005) AM_READ_PORT("P3") AM_WRITE(bssoccer_leds_w) // Leds - AM_RANGE(0xa00006, 0xa00007) AM_READ_PORT("P4") AM_WRITENOP // ? IRQ 1 Ack - AM_RANGE(0xa00008, 0xa00009) AM_READ_PORT("DSW1") AM_WRITENOP // ? IRQ 2 Ack - AM_RANGE(0xa0000a, 0xa0000b) AM_READ_PORT("DSW2") -ADDRESS_MAP_END +void suna16_state::bssoccer_map(address_map &map) +{ + map(0x000000, 0x1fffff).rom(); // ROM + map(0x200000, 0x203fff).ram(); // RAM + map(0x400000, 0x4001ff).rw(this, FUNC(suna16_state::paletteram_r), FUNC(suna16_state::paletteram_w)); // Banked Palette + map(0x400200, 0x400fff).ram(); // + map(0x600000, 0x61ffff).ram().share("spriteram"); // Sprites + map(0xa00000, 0xa00001).portr("P1").w(this, FUNC(suna16_state::soundlatch_w)); // To Sound CPU + map(0xa00002, 0xa00003).portr("P2").w(this, FUNC(suna16_state::flipscreen_w)); // Flip Screen + map(0xa00004, 0xa00005).portr("P3").w(this, FUNC(suna16_state::bssoccer_leds_w)); // Leds + map(0xa00006, 0xa00007).portr("P4").nopw(); // ? IRQ 1 Ack + map(0xa00008, 0xa00009).portr("DSW1").nopw(); // ? IRQ 2 Ack + map(0xa0000a, 0xa0000b).portr("DSW2"); +} /*************************************************************************** @@ -151,38 +152,40 @@ WRITE8_MEMBER(suna16_state::uballoon_prot_w) } } -ADDRESS_MAP_START(suna16_state::uballoon_map) - AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM - AM_RANGE(0x800000, 0x803fff) AM_RAM // RAM - AM_RANGE(0x200000, 0x2001ff) AM_READWRITE(paletteram_r, paletteram_w) // Banked Palette - AM_RANGE(0x200200, 0x200fff) AM_RAM // - AM_RANGE(0x400000, 0x41ffff) AM_MIRROR(0x1e0000) AM_RAM AM_SHARE("spriteram") // Sprites - AM_RANGE(0x600000, 0x600001) AM_READ_PORT("P1") AM_WRITE(soundlatch_w) // To Sound CPU - AM_RANGE(0x600002, 0x600003) AM_READ_PORT("P2") - AM_RANGE(0x600004, 0x600005) AM_READ_PORT("DSW1") AM_WRITE(flipscreen_w) // Flip Screen - AM_RANGE(0x600006, 0x600007) AM_READ_PORT("DSW2") - AM_RANGE(0x600008, 0x600009) AM_WRITE(uballoon_leds_w) // Leds - AM_RANGE(0x60000c, 0x60000d) AM_WRITENOP // ? IRQ 1 Ack - AM_RANGE(0x600010, 0x600011) AM_WRITENOP // ? IRQ 1 Ack - AM_RANGE(0xa00000, 0xa0ffff) AM_READWRITE8(uballoon_prot_r, uballoon_prot_w, 0x00ff) // Protection -ADDRESS_MAP_END +void suna16_state::uballoon_map(address_map &map) +{ + map(0x000000, 0x0fffff).rom(); // ROM + map(0x800000, 0x803fff).ram(); // RAM + map(0x200000, 0x2001ff).rw(this, FUNC(suna16_state::paletteram_r), FUNC(suna16_state::paletteram_w)); // Banked Palette + map(0x200200, 0x200fff).ram(); // + map(0x400000, 0x41ffff).mirror(0x1e0000).ram().share("spriteram"); // Sprites + map(0x600000, 0x600001).portr("P1").w(this, FUNC(suna16_state::soundlatch_w)); // To Sound CPU + map(0x600002, 0x600003).portr("P2"); + map(0x600004, 0x600005).portr("DSW1").w(this, FUNC(suna16_state::flipscreen_w)); // Flip Screen + map(0x600006, 0x600007).portr("DSW2"); + map(0x600008, 0x600009).w(this, FUNC(suna16_state::uballoon_leds_w)); // Leds + map(0x60000c, 0x60000d).nopw(); // ? IRQ 1 Ack + map(0x600010, 0x600011).nopw(); // ? IRQ 1 Ack + map(0xa00000, 0xa0ffff).rw(this, FUNC(suna16_state::uballoon_prot_r), FUNC(suna16_state::uballoon_prot_w)).umask16(0x00ff); // Protection +} /*************************************************************************** Suna Quiz 6000 Academy ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::sunaq_map) - AM_RANGE(0x000000, 0x0fffff) AM_ROM // ROM - AM_RANGE(0x500000, 0x500001) AM_READ_PORT("P1") AM_WRITE(soundlatch_w) // To Sound CPU - AM_RANGE(0x500002, 0x500003) AM_READ_PORT("P2") AM_WRITE(flipscreen_w) // Flip Screen - AM_RANGE(0x500004, 0x500005) AM_READ_PORT("DSW1") - AM_RANGE(0x500006, 0x500007) AM_READ_PORT("DSW2") // (unused?) - AM_RANGE(0x540000, 0x5401ff) AM_READWRITE(paletteram_r, paletteram_w) - AM_RANGE(0x540200, 0x540fff) AM_RAM // RAM - AM_RANGE(0x580000, 0x583fff) AM_RAM // RAM - AM_RANGE(0x5c0000, 0x5dffff) AM_RAM AM_SHARE("spriteram") // Sprites -ADDRESS_MAP_END +void suna16_state::sunaq_map(address_map &map) +{ + map(0x000000, 0x0fffff).rom(); // ROM + map(0x500000, 0x500001).portr("P1").w(this, FUNC(suna16_state::soundlatch_w)); // To Sound CPU + map(0x500002, 0x500003).portr("P2").w(this, FUNC(suna16_state::flipscreen_w)); // Flip Screen + map(0x500004, 0x500005).portr("DSW1"); + map(0x500006, 0x500007).portr("DSW2"); // (unused?) + map(0x540000, 0x5401ff).rw(this, FUNC(suna16_state::paletteram_r), FUNC(suna16_state::paletteram_w)); + map(0x540200, 0x540fff).ram(); // RAM + map(0x580000, 0x583fff).ram(); // RAM + map(0x5c0000, 0x5dffff).ram().share("spriteram"); // Sprites +} /*************************************************************************** @@ -205,20 +208,21 @@ WRITE8_MEMBER(suna16_state::bestbest_prot_w) } } -ADDRESS_MAP_START(suna16_state::bestbest_map) - AM_RANGE( 0x000000, 0x03ffff ) AM_ROM AM_MIRROR(0xc0000) // ROM - AM_RANGE( 0x200000, 0x2fffff ) AM_ROM AM_REGION("user1", 0) // ROM - AM_RANGE( 0x500000, 0x500001 ) AM_READ_PORT("P1") AM_WRITE(soundlatch_w) // To Sound CPU - AM_RANGE( 0x500002, 0x500003 ) AM_READ_PORT("P2") AM_WRITE(bestbest_flipscreen_w) // P2 + Coins, Flip Screen - AM_RANGE( 0x500004, 0x500005 ) AM_READ_PORT("DSW") AM_WRITE(bestbest_coin_w) // Coin Counter - AM_RANGE( 0x500008, 0x500009 ) AM_WRITE8(bestbest_prot_w, 0x00ff) // Protection - AM_RANGE( 0x500018, 0x500019 ) AM_READ8(bestbest_prot_r, 0x00ff) // " - AM_RANGE( 0x540000, 0x540fff ) AM_READWRITE(paletteram_r, paletteram_w ) // Banked(?) Palette - AM_RANGE( 0x541000, 0x54ffff ) AM_RAM // - AM_RANGE( 0x580000, 0x58ffff ) AM_RAM // RAM - AM_RANGE( 0x5c0000, 0x5dffff ) AM_RAM AM_SHARE("spriteram") // Sprites (Chip 1) - AM_RANGE( 0x5e0000, 0x5fffff ) AM_RAM AM_SHARE("spriteram2") // Sprites (Chip 2) -ADDRESS_MAP_END +void suna16_state::bestbest_map(address_map &map) +{ + map(0x000000, 0x03ffff).rom().mirror(0xc0000); // ROM + map(0x200000, 0x2fffff).rom().region("user1", 0); // ROM + map(0x500000, 0x500001).portr("P1").w(this, FUNC(suna16_state::soundlatch_w)); // To Sound CPU + map(0x500002, 0x500003).portr("P2").w(this, FUNC(suna16_state::bestbest_flipscreen_w)); // P2 + Coins, Flip Screen + map(0x500004, 0x500005).portr("DSW").w(this, FUNC(suna16_state::bestbest_coin_w)); // Coin Counter + map(0x500009, 0x500009).w(this, FUNC(suna16_state::bestbest_prot_w)); // Protection + map(0x500019, 0x500019).r(this, FUNC(suna16_state::bestbest_prot_r)); // " + map(0x540000, 0x540fff).rw(this, FUNC(suna16_state::paletteram_r), FUNC(suna16_state::paletteram_w)); // Banked(?) Palette + map(0x541000, 0x54ffff).ram(); // + map(0x580000, 0x58ffff).ram(); // RAM + map(0x5c0000, 0x5dffff).ram().share("spriteram"); // Sprites (Chip 1) + map(0x5e0000, 0x5fffff).ram().share("spriteram2"); // Sprites (Chip 2) +} MACHINE_START_MEMBER(suna16_state,bestbest) { @@ -241,49 +245,53 @@ MACHINE_START_MEMBER(suna16_state,bestbest) Back Street Soccer ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::bssoccer_sound_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM // ROM - AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM - AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU - AM_RANGE(0xfd00, 0xfd00) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 #1 - AM_RANGE(0xfe00, 0xfe00) AM_DEVWRITE("soundlatch3", generic_latch_8_device, write) // To PCM Z80 #2 -ADDRESS_MAP_END +void suna16_state::bssoccer_sound_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); // ROM + map(0xf000, 0xf7ff).ram(); // RAM + map(0xf800, 0xf801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); // YM2151 + map(0xfc00, 0xfc00).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU + map(0xfd00, 0xfd00).w("soundlatch2", FUNC(generic_latch_8_device::write)); // To PCM Z80 #1 + map(0xfe00, 0xfe00).w("soundlatch3", FUNC(generic_latch_8_device::write)); // To PCM Z80 #2 +} /*************************************************************************** Ultra Balloon ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::uballoon_sound_map) - AM_RANGE(0x0000, 0xefff) AM_ROM // ROM - AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM - AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 -ADDRESS_MAP_END +void suna16_state::uballoon_sound_map(address_map &map) +{ + map(0x0000, 0xefff).rom(); // ROM + map(0xf000, 0xf7ff).ram(); // RAM + map(0xf800, 0xf801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); // YM2151 + map(0xfc00, 0xfc00).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write)); // To PCM Z80 +} /*************************************************************************** Suna Quiz 6000 Academy ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::sunaq_sound_map) - AM_RANGE(0x0000, 0xe82f) AM_ROM // ROM - AM_RANGE(0xe830, 0xf7ff) AM_RAM // RAM (writes to efxx, could be a program bug tho) - AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) // YM2151 - AM_RANGE(0xfc00, 0xfc00) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 -ADDRESS_MAP_END +void suna16_state::sunaq_sound_map(address_map &map) +{ + map(0x0000, 0xe82f).rom(); // ROM + map(0xe830, 0xf7ff).ram(); // RAM (writes to efxx, could be a program bug tho) + map(0xf800, 0xf801).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); // YM2151 + map(0xfc00, 0xfc00).r(m_soundlatch, FUNC(generic_latch_8_device::read)).w("soundlatch2", FUNC(generic_latch_8_device::write)); // To PCM Z80 +} /*************************************************************************** Best Of Best ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::bestbest_sound_map) - AM_RANGE( 0x0000, 0xbfff ) AM_ROM // ROM - AM_RANGE( 0xc000, 0xc001 ) AM_DEVWRITE("ymsnd", ym3526_device, write) - AM_RANGE( 0xc002, 0xc003 ) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) // AY8910 - AM_RANGE( 0xe000, 0xe7ff ) AM_RAM // RAM - AM_RANGE( 0xf000, 0xf000 ) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write) // To PCM Z80 - AM_RANGE( 0xf800, 0xf800 ) AM_DEVREAD("soundlatch", generic_latch_8_device, read) // From Main CPU -ADDRESS_MAP_END +void suna16_state::bestbest_sound_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); // ROM + map(0xc000, 0xc001).w("ymsnd", FUNC(ym3526_device::write)); + map(0xc002, 0xc003).w("aysnd", FUNC(ay8910_device::address_data_w)); // AY8910 + map(0xe000, 0xe7ff).ram(); // RAM + map(0xf000, 0xf000).w("soundlatch2", FUNC(generic_latch_8_device::write)); // To PCM Z80 + map(0xf800, 0xf800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); // From Main CPU +} /*************************************************************************** @@ -325,33 +333,37 @@ WRITE8_MEMBER(suna16_state::bssoccer_pcm_2_bankswitch_w) /* Memory maps: Yes, *no* RAM */ -ADDRESS_MAP_START(suna16_state::bssoccer_pcm_1_map) - AM_RANGE(0x0000, 0x0fff) AM_ROM // ROM - AM_RANGE(0x1000, 0xffff) AM_ROMBANK("bank1") // Banked ROM -ADDRESS_MAP_END +void suna16_state::bssoccer_pcm_1_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); // ROM + map(0x1000, 0xffff).bankr("bank1"); // Banked ROM +} -ADDRESS_MAP_START(suna16_state::bssoccer_pcm_2_map) - AM_RANGE(0x0000, 0x0fff) AM_ROM // ROM - AM_RANGE(0x1000, 0xffff) AM_ROMBANK("bank2") // Banked ROM -ADDRESS_MAP_END +void suna16_state::bssoccer_pcm_2_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); // ROM + map(0x1000, 0xffff).bankr("bank2"); // Banked ROM +} -ADDRESS_MAP_START(suna16_state::bssoccer_pcm_1_io_map) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 - AM_RANGE(0x00, 0x00) AM_DEVWRITE("ldac", dac_byte_interface, write) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("rdac", dac_byte_interface, write) - AM_RANGE(0x03, 0x03) AM_WRITE(bssoccer_pcm_1_bankswitch_w) // Rom Bank -ADDRESS_MAP_END +void suna16_state::bssoccer_pcm_1_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).r("soundlatch2", FUNC(generic_latch_8_device::read)); // From The Sound Z80 + map(0x00, 0x00).w("ldac", FUNC(dac_byte_interface::write)); + map(0x01, 0x01).w("rdac", FUNC(dac_byte_interface::write)); + map(0x03, 0x03).w(this, FUNC(suna16_state::bssoccer_pcm_1_bankswitch_w)); // Rom Bank +} -ADDRESS_MAP_START(suna16_state::bssoccer_pcm_2_io_map) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch3", generic_latch_8_device, read) // From The Sound Z80 - AM_RANGE(0x00, 0x00) AM_DEVWRITE("ldac2", dac_byte_interface, write) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("rdac2", dac_byte_interface, write) - AM_RANGE(0x03, 0x03) AM_WRITE(bssoccer_pcm_2_bankswitch_w) // Rom Bank -ADDRESS_MAP_END +void suna16_state::bssoccer_pcm_2_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).r("soundlatch3", FUNC(generic_latch_8_device::read)); // From The Sound Z80 + map(0x00, 0x00).w("ldac2", FUNC(dac_byte_interface::write)); + map(0x01, 0x01).w("rdac2", FUNC(dac_byte_interface::write)); + map(0x03, 0x03).w(this, FUNC(suna16_state::bssoccer_pcm_2_bankswitch_w)); // Rom Bank +} /*************************************************************************** @@ -369,18 +381,20 @@ WRITE8_MEMBER(suna16_state::uballoon_pcm_1_bankswitch_w) /* Memory maps: Yes, *no* RAM */ -ADDRESS_MAP_START(suna16_state::uballoon_pcm_1_map) - AM_RANGE(0x0000, 0x03ff) AM_ROM // ROM - AM_RANGE(0x0400, 0xffff) AM_ROMBANK("bank1") // Banked ROM -ADDRESS_MAP_END +void suna16_state::uballoon_pcm_1_map(address_map &map) +{ + map(0x0000, 0x03ff).rom(); // ROM + map(0x0400, 0xffff).bankr("bank1"); // Banked ROM +} -ADDRESS_MAP_START(suna16_state::uballoon_pcm_1_io_map) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 - AM_RANGE(0x00, 0x00) AM_DEVWRITE("ldac", dac_byte_interface, write) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("rdac", dac_byte_interface, write) - AM_RANGE(0x03, 0x03) AM_WRITE(uballoon_pcm_1_bankswitch_w) // Rom Bank -ADDRESS_MAP_END +void suna16_state::uballoon_pcm_1_io_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).r("soundlatch2", FUNC(generic_latch_8_device::read)); // From The Sound Z80 + map(0x00, 0x00).w("ldac", FUNC(dac_byte_interface::write)); + map(0x01, 0x01).w("rdac", FUNC(dac_byte_interface::write)); + map(0x03, 0x03).w(this, FUNC(suna16_state::uballoon_pcm_1_bankswitch_w)); // Rom Bank +} MACHINE_START_MEMBER(suna16_state,uballoon) { @@ -400,18 +414,20 @@ MACHINE_RESET_MEMBER(suna16_state,uballoon) Best Of Best ***************************************************************************/ -ADDRESS_MAP_START(suna16_state::bestbest_pcm_1_map) - AM_RANGE(0x0000, 0xffff) AM_ROM -ADDRESS_MAP_END - -ADDRESS_MAP_START(suna16_state::bestbest_pcm_1_iomap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) // From The Sound Z80 - AM_RANGE(0x00, 0x00) AM_DEVWRITE("ldac", dac_byte_interface, write) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("rdac", dac_byte_interface, write) - AM_RANGE(0x02, 0x02) AM_DEVWRITE("ldac2", dac_byte_interface, write) - AM_RANGE(0x03, 0x03) AM_DEVWRITE("rdac2", dac_byte_interface, write) -ADDRESS_MAP_END +void suna16_state::bestbest_pcm_1_map(address_map &map) +{ + map(0x0000, 0xffff).rom(); +} + +void suna16_state::bestbest_pcm_1_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x00).r("soundlatch2", FUNC(generic_latch_8_device::read)); // From The Sound Z80 + map(0x00, 0x00).w("ldac", FUNC(dac_byte_interface::write)); + map(0x01, 0x01).w("rdac", FUNC(dac_byte_interface::write)); + map(0x02, 0x02).w("ldac2", FUNC(dac_byte_interface::write)); + map(0x03, 0x03).w("rdac2", FUNC(dac_byte_interface::write)); +} /*************************************************************************** |