From 59f9b55f480f9cd4440906482e3b6fe21291e3e2 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Sat, 3 May 2014 17:01:28 +0000 Subject: [PATCH] williams.c: convert williams2 hardware games to bankdev [Alex Jackson] --- src/mame/drivers/williams.c | 18 +++++++++++++++--- src/mame/includes/williams.h | 5 +++-- src/mame/machine/williams.c | 32 +++++++++----------------------- src/mame/video/williams.c | 3 --- 4 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/mame/drivers/williams.c b/src/mame/drivers/williams.c index c7ed3842350..4492c8db022 100644 --- a/src/mame/drivers/williams.c +++ b/src/mame/drivers/williams.c @@ -491,7 +491,6 @@ #include "cpu/m6800/m6800.h" #include "sound/dac.h" #include "sound/hc55516.h" -#include "machine/6821pia.h" #include "machine/ticket.h" #include "includes/williams.h" #include "machine/nvram.h" @@ -619,8 +618,9 @@ ADDRESS_MAP_END *************************************/ static ADDRESS_MAP_START( williams2_common_map, AS_PROGRAM, 8, williams2_state ) - AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") AM_WRITEONLY AM_SHARE("videoram") - AM_RANGE(0x8000, 0xbfff) AM_RAM + AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank1") + AM_RANGE(0x8000, 0x87ff) AM_DEVICE("bank8000", address_map_bank_device, amap8) + AM_RANGE(0x0000, 0xbfff) AM_RAM AM_SHARE("videoram") 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) @@ -638,6 +638,11 @@ static ADDRESS_MAP_START( williams2_common_map, AS_PROGRAM, 8, williams2_state ) AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram") ADDRESS_MAP_END +static ADDRESS_MAP_START( williams2_bank8000_map, AS_PROGRAM, 8, williams2_state ) + AM_RANGE(0x0000, 0x07ff) AM_RAMBANK("vram8000") + AM_RANGE(0x0800, 0x0fff) AM_RAM_WRITE(williams2_paletteram_w) AM_SHARE("paletteram") +ADDRESS_MAP_END + /* mysticm and inferno: D000-DFFF is RAM */ static ADDRESS_MAP_START( williams2_d000_ram_map, AS_PROGRAM, 8, williams2_state ) @@ -1653,6 +1658,13 @@ static MACHINE_CONFIG_START( williams2, williams2_state ) MCFG_CPU_ADD("soundcpu", M6808, MASTER_CLOCK/3) /* yes, this is different from the older games */ MCFG_CPU_PROGRAM_MAP(williams2_sound_map) + MCFG_DEVICE_ADD("bank8000", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(williams2_bank8000_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(12) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x0800) + MCFG_MACHINE_START_OVERRIDE(williams2_state,williams2) MCFG_MACHINE_RESET_OVERRIDE(williams2_state,williams2) MCFG_NVRAM_ADD_0FILL("nvram") diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h index b8a1054b5db..cd8755eb945 100644 --- a/src/mame/includes/williams.h +++ b/src/mame/includes/williams.h @@ -6,6 +6,7 @@ #include "machine/6821pia.h" +#include "machine/bankdev.h" #include "audio/williams.h" class williams_state : public driver_device @@ -153,9 +154,11 @@ class williams2_state : public williams_state public: williams2_state(const machine_config &mconfig, device_type type, const char *tag) : williams_state(mconfig, type, tag), + m_bank8000(*this, "bank8000"), m_gfxdecode(*this, "gfxdecode"), m_williams2_tileram(*this, "williams2_tile") { } + required_device m_bank8000; required_device m_gfxdecode; required_shared_ptr m_williams2_tileram; @@ -193,8 +196,6 @@ public: DECLARE_MACHINE_RESET(williams2); DECLARE_VIDEO_START(williams2); UINT32 screen_update_williams2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - void williams2_postload(); }; diff --git a/src/mame/machine/williams.c b/src/mame/machine/williams.c index eedff668ccc..677404bf71d 100644 --- a/src/mame/machine/williams.c +++ b/src/mame/machine/williams.c @@ -7,7 +7,6 @@ #include "emu.h" #include "cpu/m6800/m6800.h" #include "cpu/m6809/m6809.h" -#include "machine/6821pia.h" #include "machine/ticket.h" #include "includes/williams.h" #include "sound/dac.h" @@ -134,8 +133,8 @@ WRITE_LINE_MEMBER(williams2_state::tshoot_main_irq) MACHINE_START_MEMBER(williams_state,williams_common) { /* configure the memory bank */ - membank("bank1")->configure_entry(0, m_videoram); membank("bank1")->configure_entry(1, memregion("maincpu")->base() + 0x10000); + membank("bank1")->configure_entry(0, m_videoram); save_item(NAME(m_vram_bank)); } @@ -220,22 +219,15 @@ TIMER_DEVICE_CALLBACK_MEMBER(williams2_state::williams2_endscreen_callback) * *************************************/ -void williams2_state::williams2_postload() -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - williams2_bank_select_w(space, 0, m_vram_bank); -} - - MACHINE_START_MEMBER(williams2_state,williams2) { /* configure memory banks */ - membank("bank1")->configure_entry(0, m_videoram); membank("bank1")->configure_entries(1, 4, memregion("maincpu")->base() + 0x10000, 0x10000); + membank("bank1")->configure_entry(0, m_videoram); + membank("vram8000")->set_base(&m_videoram[0x8000]); /* register for save states */ save_item(NAME(m_vram_bank)); - machine().save().register_postload(save_prepost_delegate(FUNC(williams2_state::williams2_postload), this)); } @@ -283,27 +275,21 @@ WRITE8_MEMBER(williams2_state::williams2_bank_select_w) { /* page 0 is video ram */ case 0: - space.install_read_bank(0x0000, 0x8fff, "bank1"); - space.install_write_bank(0x8000, 0x87ff, "bank4"); membank("bank1")->set_entry(0); - membank("bank4")->set_base(&m_videoram[0x8000]); + m_bank8000->set_bank(0); break; /* pages 1 and 2 are ROM */ case 1: case 2: - space.install_read_bank(0x0000, 0x8fff, "bank1"); - space.install_write_bank(0x8000, 0x87ff, "bank4"); membank("bank1")->set_entry(1 + ((m_vram_bank & 6) >> 1)); - membank("bank4")->set_base(&m_videoram[0x8000]); + m_bank8000->set_bank(0); break; /* page 3 accesses palette RAM; the remaining areas are as if page 1 ROM was selected */ case 3: - space.install_read_bank(0x8000, 0x87ff, "bank4"); - space.install_write_handler(0x8000, 0x87ff, write8_delegate(FUNC(williams2_state::williams2_paletteram_w),this)); membank("bank1")->set_entry(1 + ((m_vram_bank & 4) >> 1)); - membank("bank4")->set_base(m_generic_paletteram_8); + m_bank8000->set_bank(1); break; } } @@ -619,11 +605,11 @@ MACHINE_START_MEMBER(blaster_state,blaster) MACHINE_START_CALL_MEMBER(williams_common); /* banking is different for blaster */ - membank("bank1")->configure_entry(0, m_videoram); membank("bank1")->configure_entries(1, 16, memregion("maincpu")->base() + 0x18000, 0x4000); + membank("bank1")->configure_entry(0, m_videoram); - membank("bank2")->configure_entry(0, m_videoram + 0x4000); membank("bank2")->configure_entries(1, 16, memregion("maincpu")->base() + 0x10000, 0x0000); + membank("bank2")->configure_entry(0, &m_videoram[0x4000]); save_item(NAME(m_blaster_bank)); } @@ -658,7 +644,7 @@ WRITE8_MEMBER(blaster_state::blaster_vram_select_w) WRITE8_MEMBER(blaster_state::blaster_bank_select_w) { - m_blaster_bank = data & 15; + m_blaster_bank = data & 0x0f; update_blaster_banking(); } diff --git a/src/mame/video/williams.c b/src/mame/video/williams.c index 63590635620..7161c0a2e4b 100644 --- a/src/mame/video/williams.c +++ b/src/mame/video/williams.c @@ -132,9 +132,6 @@ VIDEO_START_MEMBER(williams2_state,williams2) { blitter_init(m_blitter_config, NULL); - /* allocate paletteram */ - m_generic_paletteram_8.allocate(0x400 * 2); - /* create the tilemap */ m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(williams2_state::get_tile_info),this), TILEMAP_SCAN_COLS, 24,16, 128,16); m_bg_tilemap->set_scrolldx(2, 0);