diff options
Diffstat (limited to 'src/mame/drivers/arkanoid.cpp')
-rw-r--r-- | src/mame/drivers/arkanoid.cpp | 157 |
1 files changed, 82 insertions, 75 deletions
diff --git a/src/mame/drivers/arkanoid.cpp b/src/mame/drivers/arkanoid.cpp index 0a3d51dc9c3..642fdc5de28 100644 --- a/src/mame/drivers/arkanoid.cpp +++ b/src/mame/drivers/arkanoid.cpp @@ -824,47 +824,50 @@ a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 1 1 1 1 x x x x x x x x x x x x OPEN BUS | | | */ -ADDRESS_MAP_START(arkanoid_state::arkanoid_map) - AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_MIRROR(0x0800) - AM_RANGE(0xd000, 0xd001) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) AM_MIRROR(0x0fe6) - AM_RANGE(0xd001, 0xd001) AM_DEVREAD("aysnd", ay8910_device, data_r) AM_MIRROR(0x0fe6) - AM_RANGE(0xd008, 0xd008) AM_WRITE(arkanoid_d008_w) AM_MIRROR(0x0fe7) /* gfx bank, flip screen, 68705 reset, etc. */ - AM_RANGE(0xd008, 0xd008) AM_READ_PORT("SYSTEM2") AM_MIRROR(0x0fe3) /* unused p1 and p2 joysticks */ - AM_RANGE(0xd00c, 0xd00c) AM_READ_PORT("SYSTEM") AM_MIRROR(0x0fe3) /* start, service, coins, and 2 bits from the 68705 */ - AM_RANGE(0xd010, 0xd010) AM_READ_PORT("BUTTONS") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) AM_MIRROR(0x0fe7) - AM_RANGE(0xd018, 0xd018) AM_DEVREADWRITE("mcu", arkanoid_mcu_device_base, data_r, data_w) AM_MIRROR(0x0fe7) /* input from the 68705 */ - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(arkanoid_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xe800, 0xe83f) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xe840, 0xefff) AM_RAM - AM_RANGE(0xf000, 0xffff) AM_READNOP /* fixes instant death in final level */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(arkanoid_state::bootleg_map) - AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("aysnd", ay8910_device, address_w) - AM_RANGE(0xd001, 0xd001) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w) - AM_RANGE(0xd008, 0xd008) AM_WRITE(arkanoid_d008_w) /* gfx bank, flip screen etc. */ - AM_RANGE(0xd00c, 0xd00c) AM_READ_PORT("SYSTEM") - AM_RANGE(0xd010, 0xd010) AM_READ_PORT("BUTTONS") AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) - AM_RANGE(0xd018, 0xd018) AM_READ_PORT("MUX") AM_WRITENOP - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(arkanoid_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xe800, 0xe83f) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xe840, 0xefff) AM_RAM - AM_RANGE(0xf000, 0xffff) AM_READNOP /* fixes instant death in final level */ -ADDRESS_MAP_END - -ADDRESS_MAP_START(arkanoid_state::hexa_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xd001, 0xd001) AM_DEVREAD("aysnd", ay8910_device, data_r) - AM_RANGE(0xd000, 0xd001) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) - AM_RANGE(0xd008, 0xd008) AM_WRITE(hexa_d008_w) - AM_RANGE(0xd010, 0xd010) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* or IRQ acknowledge, or both */ - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(arkanoid_videoram_w) AM_SHARE("videoram") -ADDRESS_MAP_END +void arkanoid_state::arkanoid_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); + map(0xc000, 0xc7ff).ram().mirror(0x0800); + map(0xd000, 0xd001).w("aysnd", FUNC(ay8910_device::address_data_w)).mirror(0x0fe6); + map(0xd001, 0xd001).r("aysnd", FUNC(ay8910_device::data_r)).mirror(0x0fe6); + map(0xd008, 0xd008).w(this, FUNC(arkanoid_state::arkanoid_d008_w)).mirror(0x0fe7); /* gfx bank, flip screen, 68705 reset, etc. */ + map(0xd008, 0xd008).portr("SYSTEM2").mirror(0x0fe3); /* unused p1 and p2 joysticks */ + map(0xd00c, 0xd00c).portr("SYSTEM").mirror(0x0fe3); /* start, service, coins, and 2 bits from the 68705 */ + map(0xd010, 0xd010).portr("BUTTONS").w("watchdog", FUNC(watchdog_timer_device::reset_w)).mirror(0x0fe7); + map(0xd018, 0xd018).rw(m_mcuintf, FUNC(arkanoid_mcu_device_base::data_r), FUNC(arkanoid_mcu_device_base::data_w)).mirror(0x0fe7); /* input from the 68705 */ + map(0xe000, 0xe7ff).ram().w(this, FUNC(arkanoid_state::arkanoid_videoram_w)).share("videoram"); + map(0xe800, 0xe83f).ram().share("spriteram"); + map(0xe840, 0xefff).ram(); + map(0xf000, 0xffff).nopr(); /* fixes instant death in final level */ +} + +void arkanoid_state::bootleg_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); + map(0xc000, 0xc7ff).ram(); + map(0xd000, 0xd000).w("aysnd", FUNC(ay8910_device::address_w)); + map(0xd001, 0xd001).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w)); + map(0xd008, 0xd008).w(this, FUNC(arkanoid_state::arkanoid_d008_w)); /* gfx bank, flip screen etc. */ + map(0xd00c, 0xd00c).portr("SYSTEM"); + map(0xd010, 0xd010).portr("BUTTONS").w("watchdog", FUNC(watchdog_timer_device::reset_w)); + map(0xd018, 0xd018).portr("MUX").nopw(); + map(0xe000, 0xe7ff).ram().w(this, FUNC(arkanoid_state::arkanoid_videoram_w)).share("videoram"); + map(0xe800, 0xe83f).ram().share("spriteram"); + map(0xe840, 0xefff).ram(); + map(0xf000, 0xffff).nopr(); /* fixes instant death in final level */ +} + +void arkanoid_state::hexa_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xbfff).bankr("bank1"); + map(0xc000, 0xc7ff).ram(); + map(0xd001, 0xd001).r("aysnd", FUNC(ay8910_device::data_r)); + map(0xd000, 0xd001).w("aysnd", FUNC(ay8910_device::address_data_w)); + map(0xd008, 0xd008).w(this, FUNC(arkanoid_state::hexa_d008_w)); + map(0xd010, 0xd010).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* or IRQ acknowledge, or both */ + map(0xe000, 0xe7ff).ram().w(this, FUNC(arkanoid_state::arkanoid_videoram_w)).share("videoram"); +} READ8_MEMBER(arkanoid_state::hexaa_f000_r) { @@ -877,22 +880,24 @@ WRITE8_MEMBER(arkanoid_state::hexaa_f000_w) m_hexaa_from_main = data; } -ADDRESS_MAP_START(arkanoid_state::hexaa_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xc7ff) AM_RAM - AM_RANGE(0xd001, 0xd001) AM_DEVREAD("aysnd", ay8910_device, data_r) - AM_RANGE(0xd000, 0xd001) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) - AM_RANGE(0xd008, 0xd008) AM_WRITE(hexa_d008_w) - AM_RANGE(0xd010, 0xd010) AM_DEVWRITE("watchdog", watchdog_timer_device, reset_w) /* or IRQ acknowledge, or both */ - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(arkanoid_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xe800, 0xefff) AM_RAM - AM_RANGE(0xf000, 0xf000) AM_READWRITE(hexaa_f000_r, hexaa_f000_w) -ADDRESS_MAP_END +void arkanoid_state::hexaa_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xbfff).bankr("bank1"); + map(0xc000, 0xc7ff).ram(); + map(0xd001, 0xd001).r("aysnd", FUNC(ay8910_device::data_r)); + map(0xd000, 0xd001).w("aysnd", FUNC(ay8910_device::address_data_w)); + map(0xd008, 0xd008).w(this, FUNC(arkanoid_state::hexa_d008_w)); + map(0xd010, 0xd010).w("watchdog", FUNC(watchdog_timer_device::reset_w)); /* or IRQ acknowledge, or both */ + map(0xe000, 0xe7ff).ram().w(this, FUNC(arkanoid_state::arkanoid_videoram_w)).share("videoram"); + map(0xe800, 0xefff).ram(); + map(0xf000, 0xf000).rw(this, FUNC(arkanoid_state::hexaa_f000_r), FUNC(arkanoid_state::hexaa_f000_w)); +} -ADDRESS_MAP_START(arkanoid_state::hexaa_sub_map) - AM_RANGE(0x0000, 0x0fff) AM_ROM -ADDRESS_MAP_END +void arkanoid_state::hexaa_sub_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); +} WRITE8_MEMBER(arkanoid_state::hexaa_sub_80_w) @@ -906,25 +911,27 @@ READ8_MEMBER(arkanoid_state::hexaa_sub_90_r) // return machine().rand(); } -ADDRESS_MAP_START(arkanoid_state::hexaa_sub_iomap) - ADDRESS_MAP_GLOBAL_MASK(0x9f) - AM_RANGE(0x00, 0x0f) AM_RAM // ?? could be communication with the other chip (protection?) - AM_RANGE(0x80, 0x80) AM_WRITE(hexaa_sub_80_w) - AM_RANGE(0x90, 0x90) AM_READ(hexaa_sub_90_r) -ADDRESS_MAP_END - - - -ADDRESS_MAP_START(arkanoid_state::brixian_map) - AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("protram") - AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("aysnd", ay8910_device, address_w) - AM_RANGE(0xd001, 0xd001) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_w) - AM_RANGE(0xd008, 0xd008) AM_WRITE(brixian_d008_w) /* gfx bank, flip screen etc. */ - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(arkanoid_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xe800, 0xe83f) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xe840, 0xefff) AM_RAM -ADDRESS_MAP_END +void arkanoid_state::hexaa_sub_iomap(address_map &map) +{ + map.global_mask(0x9f); + map(0x00, 0x0f).ram(); // ?? could be communication with the other chip (protection?) + map(0x80, 0x80).w(this, FUNC(arkanoid_state::hexaa_sub_80_w)); + map(0x90, 0x90).r(this, FUNC(arkanoid_state::hexaa_sub_90_r)); +} + + + +void arkanoid_state::brixian_map(address_map &map) +{ + map(0x0000, 0xbfff).rom(); + map(0xc000, 0xc7ff).ram().share("protram"); + map(0xd000, 0xd000).w("aysnd", FUNC(ay8910_device::address_w)); + map(0xd001, 0xd001).rw("aysnd", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w)); + map(0xd008, 0xd008).w(this, FUNC(arkanoid_state::brixian_d008_w)); /* gfx bank, flip screen etc. */ + map(0xe000, 0xe7ff).ram().w(this, FUNC(arkanoid_state::arkanoid_videoram_w)).share("videoram"); + map(0xe800, 0xe83f).ram().share("spriteram"); + map(0xe840, 0xefff).ram(); +} |