diff options
Diffstat (limited to 'src/mame/drivers/psychic5.cpp')
-rw-r--r-- | src/mame/drivers/psychic5.cpp | 204 |
1 files changed, 106 insertions, 98 deletions
diff --git a/src/mame/drivers/psychic5.cpp b/src/mame/drivers/psychic5.cpp index e986b246513..1318b06beaa 100644 --- a/src/mame/drivers/psychic5.cpp +++ b/src/mame/drivers/psychic5.cpp @@ -435,106 +435,114 @@ WRITE8_MEMBER(psychic5_state::bombsa_flipscreen_w) ***************************************************************************/ -ADDRESS_MAP_START(psychic5_state::psychic5_main_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") - AM_RANGE(0xc000, 0xdfff) AM_DEVICE("vrambank", address_map_bank_device, amap8) - AM_RANGE(0xe000, 0xefff) AM_RAM - AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) - AM_RANGE(0xf001, 0xf001) AM_READNOP AM_WRITE(psychic5_coin_counter_w) - AM_RANGE(0xf002, 0xf002) AM_READWRITE(bankselect_r, psychic5_bankselect_w) - AM_RANGE(0xf003, 0xf003) AM_READWRITE(vram_page_select_r, vram_page_select_w) - AM_RANGE(0xf004, 0xf004) AM_NOP // ??? - AM_RANGE(0xf005, 0xf005) AM_READNOP AM_WRITE(psychic5_title_screen_w) - AM_RANGE(0xf006, 0xf1ff) AM_NOP - AM_RANGE(0xf200, 0xf7ff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END - - -ADDRESS_MAP_START(psychic5_state::psychic5_vrambank_map) - AM_RANGE(0x0000, 0x0fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") - AM_RANGE(0x1000, 0x1fff) AM_RAM - - AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM") - AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1") - AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2") - AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1") - AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2") - - AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control") - - AM_RANGE(0x2400, 0x25ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp") - AM_RANGE(0x2800, 0x29ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg") - AM_RANGE(0x2a00, 0x2bff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx") - - AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") - -ADDRESS_MAP_END - - -ADDRESS_MAP_START(psychic5_state::psychic5_sound_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) -ADDRESS_MAP_END - -ADDRESS_MAP_START(psychic5_state::psychic5_soundport_map) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVWRITE("ym1", ym2203_device, write) - AM_RANGE(0x80, 0x81) AM_DEVWRITE("ym2", ym2203_device, write) -ADDRESS_MAP_END - - -ADDRESS_MAP_START(psychic5_state::bombsa_main_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("mainbank") - AM_RANGE(0xc000, 0xcfff) AM_RAM +void psychic5_state::psychic5_main_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xbfff).bankr("mainbank"); + map(0xc000, 0xdfff).m(m_vrambank, FUNC(address_map_bank_device::amap8)); + map(0xe000, 0xefff).ram(); + map(0xf000, 0xf000).w("soundlatch", FUNC(generic_latch_8_device::write)); + map(0xf001, 0xf001).nopr().w(this, FUNC(psychic5_state::psychic5_coin_counter_w)); + map(0xf002, 0xf002).rw(this, FUNC(psychic5_state::bankselect_r), FUNC(psychic5_state::psychic5_bankselect_w)); + map(0xf003, 0xf003).rw(this, FUNC(psychic5_state::vram_page_select_r), FUNC(psychic5_state::vram_page_select_w)); + map(0xf004, 0xf004).noprw(); // ??? + map(0xf005, 0xf005).nopr().w(this, FUNC(psychic5_state::psychic5_title_screen_w)); + map(0xf006, 0xf1ff).noprw(); + map(0xf200, 0xf7ff).ram().share("spriteram"); + map(0xf800, 0xffff).ram(); +} + + +void psychic5_state::psychic5_vrambank_map(address_map &map) +{ + map(0x0000, 0x0fff).ram().w(this, FUNC(psychic5_state::bg_videoram_w)).share("bg_videoram"); + map(0x1000, 0x1fff).ram(); + + map(0x2000, 0x2000).portr("SYSTEM"); + map(0x2001, 0x2001).portr("P1"); + map(0x2002, 0x2002).portr("P2"); + map(0x2003, 0x2003).portr("DSW1"); + map(0x2004, 0x2004).portr("DSW2"); + + map(0x2308, 0x230c).ram().share("bg_control"); + + map(0x2400, 0x25ff).ram().w(this, FUNC(psychic5_state::sprite_col_w)).share("palette_ram_sp"); + map(0x2800, 0x29ff).ram().w(this, FUNC(psychic5_state::bg_col_w)).share("palette_ram_bg"); + map(0x2a00, 0x2bff).ram().w(this, FUNC(psychic5_state::tx_col_w)).share("palette_ram_tx"); + + map(0x3000, 0x37ff).ram().w(this, FUNC(psychic5_state::fg_videoram_w)).share("fg_videoram"); + +} + + +void psychic5_state::psychic5_sound_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0xc000, 0xc7ff).ram(); + map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read)); +} + +void psychic5_state::psychic5_soundport_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).w("ym1", FUNC(ym2203_device::write)); + map(0x80, 0x81).w("ym2", FUNC(ym2203_device::write)); +} + + +void psychic5_state::bombsa_main_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xbfff).bankr("mainbank"); + map(0xc000, 0xcfff).ram(); /* ports look like the other games */ - AM_RANGE(0xd000, 0xd1ff) AM_RAM - AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("soundlatch", generic_latch_8_device, write) // confirmed - AM_RANGE(0xd001, 0xd001) AM_WRITE(bombsa_flipscreen_w) - AM_RANGE(0xd002, 0xd002) AM_READWRITE(bankselect_r, bombsa_bankselect_w) - AM_RANGE(0xd003, 0xd003) AM_READWRITE(vram_page_select_r, vram_page_select_w) - AM_RANGE(0xd005, 0xd005) AM_WRITE(bombsa_unknown_w) // ? - - AM_RANGE(0xd200, 0xd7ff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xd800, 0xdfff) AM_RAM - - AM_RANGE(0xe000, 0xffff) AM_DEVICE("vrambank", address_map_bank_device, amap8) -ADDRESS_MAP_END - -ADDRESS_MAP_START(psychic5_state::bombsa_sound_map) - AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) - AM_RANGE(0xf000, 0xf000) AM_WRITEONLY // Is this a confirm of some sort? -ADDRESS_MAP_END - -ADDRESS_MAP_START(psychic5_state::bombsa_soundport_map) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ym1", ym2203_device, read, write) - AM_RANGE(0x80, 0x81) AM_DEVREADWRITE("ym2", ym2203_device, read, write) -ADDRESS_MAP_END - -ADDRESS_MAP_START(psychic5_state::bombsa_vrambank_map) - AM_RANGE(0x0000, 0x1fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram") - - AM_RANGE(0x2000, 0x2000) AM_READ_PORT("SYSTEM") - AM_RANGE(0x2001, 0x2001) AM_READ_PORT("P1") - AM_RANGE(0x2002, 0x2002) AM_READ_PORT("P2") - AM_RANGE(0x2003, 0x2003) AM_READ_PORT("DSW1") - AM_RANGE(0x2004, 0x2004) AM_READ_PORT("DSW2") - - AM_RANGE(0x2308, 0x230c) AM_RAM AM_SHARE("bg_control") - - AM_RANGE(0x3000, 0x31ff) AM_RAM_WRITE(sprite_col_w) AM_SHARE("palette_ram_sp") - AM_RANGE(0x3200, 0x33ff) AM_RAM_WRITE(bg_col_w) AM_SHARE("palette_ram_bg") - AM_RANGE(0x3400, 0x35ff) AM_RAM_WRITE(tx_col_w) AM_SHARE("palette_ram_tx") - - AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram") -ADDRESS_MAP_END + map(0xd000, 0xd1ff).ram(); + map(0xd000, 0xd000).w("soundlatch", FUNC(generic_latch_8_device::write)); // confirmed + map(0xd001, 0xd001).w(this, FUNC(psychic5_state::bombsa_flipscreen_w)); + map(0xd002, 0xd002).rw(this, FUNC(psychic5_state::bankselect_r), FUNC(psychic5_state::bombsa_bankselect_w)); + map(0xd003, 0xd003).rw(this, FUNC(psychic5_state::vram_page_select_r), FUNC(psychic5_state::vram_page_select_w)); + map(0xd005, 0xd005).w(this, FUNC(psychic5_state::bombsa_unknown_w)); // ? + + map(0xd200, 0xd7ff).ram().share("spriteram"); + map(0xd800, 0xdfff).ram(); + + map(0xe000, 0xffff).m(m_vrambank, FUNC(address_map_bank_device::amap8)); +} + +void psychic5_state::bombsa_sound_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); + map(0xc000, 0xc7ff).ram(); + map(0xe000, 0xe000).r("soundlatch", FUNC(generic_latch_8_device::read)); + map(0xf000, 0xf000).writeonly(); // Is this a confirm of some sort? +} + +void psychic5_state::bombsa_soundport_map(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).rw("ym1", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); + map(0x80, 0x81).rw("ym2", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); +} + +void psychic5_state::bombsa_vrambank_map(address_map &map) +{ + map(0x0000, 0x1fff).ram().w(this, FUNC(psychic5_state::bg_videoram_w)).share("bg_videoram"); + + map(0x2000, 0x2000).portr("SYSTEM"); + map(0x2001, 0x2001).portr("P1"); + map(0x2002, 0x2002).portr("P2"); + map(0x2003, 0x2003).portr("DSW1"); + map(0x2004, 0x2004).portr("DSW2"); + + map(0x2308, 0x230c).ram().share("bg_control"); + + map(0x3000, 0x31ff).ram().w(this, FUNC(psychic5_state::sprite_col_w)).share("palette_ram_sp"); + map(0x3200, 0x33ff).ram().w(this, FUNC(psychic5_state::bg_col_w)).share("palette_ram_bg"); + map(0x3400, 0x35ff).ram().w(this, FUNC(psychic5_state::tx_col_w)).share("palette_ram_tx"); + + map(0x2800, 0x2fff).ram().w(this, FUNC(psychic5_state::fg_videoram_w)).share("fg_videoram"); +} static INPUT_PORTS_START( psychic5 ) |