summaryrefslogtreecommitdiffstats
path: root/src/mame/drivers/williams.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/williams.cpp')
-rw-r--r--src/mame/drivers/williams.cpp244
1 files changed, 128 insertions, 116 deletions
diff --git a/src/mame/drivers/williams.cpp b/src/mame/drivers/williams.cpp
index 3497177fe9b..2abc3e65ffd 100644
--- a/src/mame/drivers/williams.cpp
+++ b/src/mame/drivers/williams.cpp
@@ -521,25 +521,27 @@ Reference video: https://www.youtube.com/watch?v=R5OeC6Wc_yI
*
*************************************/
-ADDRESS_MAP_START(williams_state::defender_map)
- AM_RANGE(0x0000, 0xbfff) AM_RAM AM_SHARE("videoram")
- AM_RANGE(0xc000, 0xcfff) AM_DEVICE("bankc000", address_map_bank_device, amap8)
- AM_RANGE(0xd000, 0xdfff) AM_WRITE(defender_bank_select_w)
- AM_RANGE(0xd000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams_state::defender_map(address_map &map)
+{
+ map(0x0000, 0xbfff).ram().share("videoram");
+ map(0xc000, 0xcfff).m(m_bankc000, FUNC(address_map_bank_device::amap8));
+ map(0xd000, 0xdfff).w(this, FUNC(williams_state::defender_bank_select_w));
+ map(0xd000, 0xffff).rom();
+}
-ADDRESS_MAP_START(williams_state::defender_bankc000_map)
- AM_RANGE(0x0000, 0x000f) AM_MIRROR(0x03e0) AM_WRITEONLY AM_SHARE("paletteram")
- AM_RANGE(0x03ff, 0x03ff) AM_WRITE(williams_watchdog_reset_w)
- AM_RANGE(0x0010, 0x001f) AM_MIRROR(0x03e0) AM_WRITE(defender_video_control_w)
- AM_RANGE(0x0400, 0x04ff) AM_MIRROR(0x0300) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
- AM_RANGE(0x0800, 0x0bff) AM_READ(williams_video_counter_r)
- AM_RANGE(0x0c00, 0x0c03) AM_MIRROR(0x03e0) AM_DEVREADWRITE("pia_1", pia6821_device, read, write)
- AM_RANGE(0x0c04, 0x0c07) AM_MIRROR(0x03e0) AM_DEVREADWRITE("pia_0", pia6821_device, read, write)
- AM_RANGE(0x1000, 0x9fff) AM_ROM AM_REGION("maincpu", 0x10000)
- AM_RANGE(0xa000, 0xffff) AM_NOP
-ADDRESS_MAP_END
+void williams_state::defender_bankc000_map(address_map &map)
+{
+ map(0x0000, 0x000f).mirror(0x03e0).writeonly().share("paletteram");
+ map(0x03ff, 0x03ff).w(this, FUNC(williams_state::williams_watchdog_reset_w));
+ map(0x0010, 0x001f).mirror(0x03e0).w(this, FUNC(williams_state::defender_video_control_w));
+ map(0x0400, 0x04ff).mirror(0x0300).ram().w(this, FUNC(williams_state::williams_cmos_w)).share("nvram");
+ map(0x0800, 0x0bff).r(this, FUNC(williams_state::williams_video_counter_r));
+ map(0x0c00, 0x0c03).mirror(0x03e0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x0c04, 0x0c07).mirror(0x03e0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0x1000, 0x9fff).rom().region("maincpu", 0x10000);
+ map(0xa000, 0xffff).noprw();
+}
@@ -549,19 +551,20 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(williams_state::williams_map)
- AM_RANGE(0x0000, 0x8fff) AM_READ_BANK("bank1") AM_WRITEONLY AM_SHARE("videoram")
- AM_RANGE(0x9000, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xc00f) AM_MIRROR(0x03f0) AM_WRITEONLY AM_SHARE("paletteram")
- AM_RANGE(0xc804, 0xc807) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_0", pia6821_device, read, write)
- AM_RANGE(0xc80c, 0xc80f) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_1", pia6821_device, read, write)
- AM_RANGE(0xc900, 0xc9ff) AM_WRITE(williams_vram_select_w)
- AM_RANGE(0xca00, 0xca07) AM_MIRROR(0x00f8) AM_WRITE(williams_blitter_w)
- AM_RANGE(0xcb00, 0xcbff) AM_READ(williams_video_counter_r)
- AM_RANGE(0xcbff, 0xcbff) AM_WRITE(williams_watchdog_reset_w)
- AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
- AM_RANGE(0xd000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams_state::williams_map(address_map &map)
+{
+ map(0x0000, 0x8fff).bankr("bank1").writeonly().share("videoram");
+ map(0x9000, 0xbfff).ram();
+ map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram");
+ map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc900, 0xc9ff).w(this, FUNC(williams_state::williams_vram_select_w));
+ map(0xca00, 0xca07).mirror(0x00f8).w(this, FUNC(williams_state::williams_blitter_w));
+ map(0xcb00, 0xcbff).r(this, FUNC(williams_state::williams_video_counter_r));
+ map(0xcbff, 0xcbff).w(this, FUNC(williams_state::williams_watchdog_reset_w));
+ map(0xcc00, 0xcfff).ram().w(this, FUNC(williams_state::williams_cmos_w)).share("nvram");
+ map(0xd000, 0xffff).rom();
+}
@@ -571,20 +574,21 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(williams_state::sinistar_map)
- AM_RANGE(0x0000, 0x8fff) AM_READ_BANK("bank1") AM_WRITEONLY AM_SHARE("videoram")
- AM_RANGE(0x9000, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xc00f) AM_MIRROR(0x03f0) AM_WRITEONLY AM_SHARE("paletteram")
- AM_RANGE(0xc804, 0xc807) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_0", pia6821_device, read, write)
- AM_RANGE(0xc80c, 0xc80f) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_1", pia6821_device, read, write)
- AM_RANGE(0xc900, 0xc9ff) AM_WRITE(sinistar_vram_select_w)
- AM_RANGE(0xca00, 0xca07) AM_MIRROR(0x00f8) AM_WRITE(williams_blitter_w)
- AM_RANGE(0xcb00, 0xcbff) AM_READ(williams_video_counter_r)
- AM_RANGE(0xcbff, 0xcbff) AM_WRITE(williams_watchdog_reset_w)
- AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
- AM_RANGE(0xd000, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams_state::sinistar_map(address_map &map)
+{
+ map(0x0000, 0x8fff).bankr("bank1").writeonly().share("videoram");
+ map(0x9000, 0xbfff).ram();
+ map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram");
+ map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc900, 0xc9ff).w(this, FUNC(williams_state::sinistar_vram_select_w));
+ map(0xca00, 0xca07).mirror(0x00f8).w(this, FUNC(williams_state::williams_blitter_w));
+ map(0xcb00, 0xcbff).r(this, FUNC(williams_state::williams_video_counter_r));
+ map(0xcbff, 0xcbff).w(this, FUNC(williams_state::williams_watchdog_reset_w));
+ map(0xcc00, 0xcfff).ram().w(this, FUNC(williams_state::williams_cmos_w)).share("nvram");
+ map(0xd000, 0xdfff).ram();
+ map(0xe000, 0xffff).rom();
+}
@@ -594,26 +598,27 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(blaster_state::blaster_map)
- AM_RANGE(0x0000, 0x3fff) AM_READ_BANK("bank1") AM_WRITEONLY AM_SHARE("videoram")
- AM_RANGE(0x4000, 0x8fff) AM_READ_BANK("bank2") AM_WRITEONLY
- AM_RANGE(0x9000, 0xbaff) AM_RAM
- AM_RANGE(0xbb00, 0xbbff) AM_RAM AM_SHARE("blaster_pal0")
- AM_RANGE(0xbc00, 0xbcff) AM_RAM AM_SHARE("blaster_scan")
- AM_RANGE(0xbd00, 0xbfff) AM_RAM
- AM_RANGE(0xc000, 0xc00f) AM_MIRROR(0x03f0) AM_WRITEONLY AM_SHARE("paletteram")
- AM_RANGE(0xc804, 0xc807) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_0", pia6821_device, read, write)
- AM_RANGE(0xc80c, 0xc80f) AM_MIRROR(0x00f0) AM_DEVREADWRITE("pia_1", pia6821_device, read, write)
- AM_RANGE(0xc900, 0xc93f) AM_WRITE(blaster_vram_select_w)
- AM_RANGE(0xc940, 0xc97f) AM_WRITE(blaster_remap_select_w)
- AM_RANGE(0xc980, 0xc9bf) AM_WRITE(blaster_bank_select_w)
- AM_RANGE(0xc9c0, 0xc9ff) AM_WRITE(blaster_video_control_w)
- AM_RANGE(0xca00, 0xca07) AM_MIRROR(0x00f8) AM_WRITE(williams_blitter_w)
- AM_RANGE(0xcb00, 0xcbff) AM_READ(williams_video_counter_r)
- AM_RANGE(0xcbff, 0xcbff) AM_WRITE(williams_watchdog_reset_w)
- AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
- AM_RANGE(0xd000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void blaster_state::blaster_map(address_map &map)
+{
+ map(0x0000, 0x3fff).bankr("bank1").writeonly().share("videoram");
+ map(0x4000, 0x8fff).bankr("bank2").writeonly();
+ map(0x9000, 0xbaff).ram();
+ map(0xbb00, 0xbbff).ram().share("blaster_pal0");
+ map(0xbc00, 0xbcff).ram().share("blaster_scan");
+ map(0xbd00, 0xbfff).ram();
+ map(0xc000, 0xc00f).mirror(0x03f0).writeonly().share("paletteram");
+ map(0xc804, 0xc807).mirror(0x00f0).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc80c, 0xc80f).mirror(0x00f0).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc900, 0xc93f).w(this, FUNC(blaster_state::blaster_vram_select_w));
+ map(0xc940, 0xc97f).w(this, FUNC(blaster_state::blaster_remap_select_w));
+ map(0xc980, 0xc9bf).w(this, FUNC(blaster_state::blaster_bank_select_w));
+ map(0xc9c0, 0xc9ff).w(this, FUNC(blaster_state::blaster_video_control_w));
+ map(0xca00, 0xca07).mirror(0x00f8).w(this, FUNC(blaster_state::williams_blitter_w));
+ map(0xcb00, 0xcbff).r(this, FUNC(blaster_state::williams_video_counter_r));
+ map(0xcbff, 0xcbff).w(this, FUNC(blaster_state::williams_watchdog_reset_w));
+ map(0xcc00, 0xcfff).ram().w(this, FUNC(blaster_state::williams_cmos_w)).share("nvram");
+ map(0xd000, 0xffff).rom();
+}
@@ -623,39 +628,42 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(williams2_state::williams2_common_map)
- AM_RANGE(0x0000, 0xbfff) AM_RAM AM_SHARE("videoram")
- AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1")
- AM_RANGE(0x8000, 0x87ff) AM_DEVICE("bank8000", address_map_bank_device, amap8)
- AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(williams2_tileram_w) AM_SHARE("williams2_tile")
- AM_RANGE(0xc800, 0xc87f) AM_WRITE(williams2_bank_select_w)
- AM_RANGE(0xc880, 0xc887) AM_MIRROR(0x0078) AM_WRITE(williams_blitter_w)
- AM_RANGE(0xc900, 0xc97f) AM_WRITE(williams2_watchdog_reset_w)
- AM_RANGE(0xc980, 0xc983) AM_MIRROR(0x0070) AM_DEVREADWRITE("pia_1", pia6821_device, read, write)
- AM_RANGE(0xc984, 0xc987) AM_MIRROR(0x0070) AM_DEVREADWRITE("pia_0", pia6821_device, read, write)
- AM_RANGE(0xc98c, 0xc98f) AM_MIRROR(0x0070) AM_WRITE(williams2_7segment_w)
- AM_RANGE(0xcb00, 0xcb1f) AM_WRITE(williams2_fg_select_w)
- AM_RANGE(0xcb20, 0xcb3f) AM_WRITE(williams2_bg_select_w)
- AM_RANGE(0xcb40, 0xcb5f) AM_WRITE(williams2_xscroll_low_w)
- AM_RANGE(0xcb60, 0xcb7f) AM_WRITE(williams2_xscroll_high_w)
- AM_RANGE(0xcb80, 0xcb9f) AM_WRITE(defender_video_control_w)
- AM_RANGE(0xcba0, 0xcbbf) AM_WRITE(williams2_blit_window_enable_w)
- AM_RANGE(0xcbe0, 0xcbef) AM_READ(williams_video_counter_r)
- AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
-ADDRESS_MAP_END
+void williams2_state::williams2_common_map(address_map &map)
+{
+ map(0x0000, 0xbfff).ram().share("videoram");
+ map(0x0000, 0x7fff).bankr("bank1");
+ map(0x8000, 0x87ff).m(m_bank8000, FUNC(address_map_bank_device::amap8));
+ map(0xc000, 0xc7ff).ram().w(this, FUNC(williams2_state::williams2_tileram_w)).share("williams2_tile");
+ map(0xc800, 0xc87f).w(this, FUNC(williams2_state::williams2_bank_select_w));
+ map(0xc880, 0xc887).mirror(0x0078).w(this, FUNC(williams2_state::williams_blitter_w));
+ map(0xc900, 0xc97f).w(this, FUNC(williams2_state::williams2_watchdog_reset_w));
+ map(0xc980, 0xc983).mirror(0x0070).rw(m_pia_1, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc984, 0xc987).mirror(0x0070).rw(m_pia_0, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xc98c, 0xc98f).mirror(0x0070).w(this, FUNC(williams2_state::williams2_7segment_w));
+ map(0xcb00, 0xcb1f).w(this, FUNC(williams2_state::williams2_fg_select_w));
+ map(0xcb20, 0xcb3f).w(this, FUNC(williams2_state::williams2_bg_select_w));
+ map(0xcb40, 0xcb5f).w(this, FUNC(williams2_state::williams2_xscroll_low_w));
+ map(0xcb60, 0xcb7f).w(this, FUNC(williams2_state::williams2_xscroll_high_w));
+ map(0xcb80, 0xcb9f).w(this, FUNC(williams2_state::defender_video_control_w));
+ map(0xcba0, 0xcbbf).w(this, FUNC(williams2_state::williams2_blit_window_enable_w));
+ map(0xcbe0, 0xcbef).r(this, FUNC(williams2_state::williams_video_counter_r));
+ map(0xcc00, 0xcfff).ram().w(this, FUNC(williams2_state::williams_cmos_w)).share("nvram");
+}
-ADDRESS_MAP_START(williams2_state::williams2_bank8000_map)
- AM_RANGE(0x0000, 0x07ff) AM_RAMBANK("vram8000")
- AM_RANGE(0x0800, 0x0fff) AM_RAM_WRITE(williams2_paletteram_w) AM_SHARE("paletteram")
-ADDRESS_MAP_END
+void williams2_state::williams2_bank8000_map(address_map &map)
+{
+ map(0x0000, 0x07ff).bankrw("vram8000");
+ map(0x0800, 0x0fff).ram().w(this, FUNC(williams2_state::williams2_paletteram_w)).share("paletteram");
+}
/* mysticm and inferno: D000-DFFF is RAM */
-ADDRESS_MAP_START(williams2_state::williams2_d000_ram_map)
- AM_IMPORT_FROM(williams2_common_map)
- AM_RANGE(0xd000, 0xdfff) AM_RAM
- AM_RANGE(0xe000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams2_state::williams2_d000_ram_map(address_map &map)
+{
+ williams2_common_map(map);
+ map(0xd000, 0xdfff).ram();
+ map(0xe000, 0xffff).rom();
+}
/* tshoot and joust2: D000-DFFF is ROM */
@@ -672,27 +680,30 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(williams_state::defender_sound_map)
- AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
- AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE("pia_2", pia6821_device, read, write)
- AM_RANGE(0xb000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams_state::defender_sound_map(address_map &map)
+{
+ map(0x0000, 0x007f).ram(); /* internal RAM */
+ map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xb000, 0xffff).rom();
+}
-ADDRESS_MAP_START(williams_state::sound_map)
- AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
- AM_RANGE(0x0080, 0x00ff) AM_RAM /* MC6810 RAM */
- AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE("pia_2", pia6821_device, read, write)
- AM_RANGE(0xb000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams_state::sound_map(address_map &map)
+{
+ map(0x0000, 0x007f).ram(); /* internal RAM */
+ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */
+ map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xb000, 0xffff).rom();
+}
/* Same as above, but for second sound board */
-ADDRESS_MAP_START(blaster_state::sound_map_b)
- AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
- AM_RANGE(0x0080, 0x00ff) AM_RAM /* MC6810 RAM */
- AM_RANGE(0x0400, 0x0403) AM_MIRROR(0x8000) AM_DEVREADWRITE("pia_2b", pia6821_device, read, write)
- AM_RANGE(0xb000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void blaster_state::sound_map_b(address_map &map)
+{
+ map(0x0000, 0x007f).ram(); /* internal RAM */
+ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */
+ map(0x0400, 0x0403).mirror(0x8000).rw(m_pia_2b, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xb000, 0xffff).rom();
+}
@@ -702,12 +713,13 @@ ADDRESS_MAP_END
*
*************************************/
-ADDRESS_MAP_START(williams2_state::williams2_sound_map)
- AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
- AM_RANGE(0x0080, 0x00ff) AM_RAM /* MC6810 RAM */
- AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("pia_2", pia6821_device, read, write)
- AM_RANGE(0xe000, 0xffff) AM_ROM
-ADDRESS_MAP_END
+void williams2_state::williams2_sound_map(address_map &map)
+{
+ map(0x0000, 0x007f).ram(); /* internal RAM */
+ map(0x0080, 0x00ff).ram(); /* MC6810 RAM */
+ map(0x2000, 0x2003).mirror(0x1ffc).rw(m_pia_2, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+ map(0xe000, 0xffff).rom();
+}