From d569fd293174966c326b54d50bb92646fbc7aa91 Mon Sep 17 00:00:00 2001 From: "Alex W. Jackson" Date: Sun, 4 May 2014 02:44:18 +0000 Subject: [PATCH] williams.c: convert defender hardware games to bankdev (nw) --- src/mame/drivers/williams.c | 103 ++++++++++++++--------------------- src/mame/drivers/wmg.c | 3 +- src/mame/includes/williams.h | 8 +-- src/mame/machine/williams.c | 72 ++++-------------------- 4 files changed, 58 insertions(+), 128 deletions(-) diff --git a/src/mame/drivers/williams.c b/src/mame/drivers/williams.c index 4492c8db022..782ba82a474 100644 --- a/src/mame/drivers/williams.c +++ b/src/mame/drivers/williams.c @@ -509,32 +509,23 @@ static ADDRESS_MAP_START( defender_map, AS_PROGRAM, 8, williams_state ) AM_RANGE(0x0000, 0xbfff) AM_RAM AM_SHARE("videoram") - /* range from 0xc000-0xcfff is mapped programmatically below */ - AM_RANGE(0xc000, 0xc00f) AM_SHARE("paletteram") - AM_RANGE(0xc400, 0xc4ff) AM_SHARE("nvram") - AM_RANGE(0xc000, 0xcfff) AM_ROMBANK("bank1") + 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_install_io_space(address_space &space) -{ - pia6821_device *pia_0 = space.machine().device("pia_0"); - pia6821_device *pia_1 = space.machine().device("pia_1"); - - /* this routine dynamically installs the memory mapped above from c000-cfff */ - space.install_write_bank (0xc000, 0xc00f, 0, 0x03e0, "bank4"); - space.install_write_handler (0xc010, 0xc01f, 0, 0x03e0, write8_delegate(FUNC(williams_state::defender_video_control_w),this)); - space.install_write_handler (0xc3ff, 0xc3ff, write8_delegate(FUNC(williams_state::williams_watchdog_reset_w),this)); - space.install_read_bank(0xc400, 0xc4ff, 0, 0x0300, "bank3"); - space.install_write_handler(0xc400, 0xc4ff, 0, 0x0300, write8_delegate(FUNC(williams_state::williams_cmos_w),this)); - space.install_read_handler (0xc800, 0xcbff, 0, 0x03e0, read8_delegate(FUNC(williams_state::williams_video_counter_r),this)); - space.install_readwrite_handler(0xcc00, 0xcc03, 0, 0x03e0, read8_delegate(FUNC(pia6821_device::read), pia_1), write8_delegate(FUNC(pia6821_device::write), pia_1)); - space.install_readwrite_handler(0xcc04, 0xcc07, 0, 0x03e0, read8_delegate(FUNC(pia6821_device::read), pia_0), write8_delegate(FUNC(pia6821_device::write), pia_0)); - membank("bank3")->set_base(m_nvram); - membank("bank4")->set_base(m_generic_paletteram_8); -} +static ADDRESS_MAP_START( defender_bankc000_map, AS_PROGRAM, 8, williams_state ) + 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 @@ -1432,17 +1423,17 @@ GFXDECODE_END * *************************************/ -static MACHINE_CONFIG_START( defender, williams_state ) +static MACHINE_CONFIG_START( williams, williams_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6809, MASTER_CLOCK/3/4) - MCFG_CPU_PROGRAM_MAP(defender_map) + MCFG_CPU_PROGRAM_MAP(williams_map) MCFG_CPU_ADD("soundcpu", M6808, SOUND_CLOCK) // internal clock divider of 4, effective frequency is 894.886kHz - MCFG_CPU_PROGRAM_MAP(defender_sound_map) + MCFG_CPU_PROGRAM_MAP(sound_map) - MCFG_MACHINE_START_OVERRIDE(williams_state,defender) - MCFG_MACHINE_RESET_OVERRIDE(williams_state,defender) + MCFG_MACHINE_START_OVERRIDE(williams_state,williams) + MCFG_MACHINE_RESET_OVERRIDE(williams_state,williams) MCFG_NVRAM_ADD_0FILL("nvram") MCFG_TIMER_DRIVER_ADD("scan_timer", williams_state, williams_va11_callback) @@ -1451,7 +1442,7 @@ static MACHINE_CONFIG_START( defender, williams_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE | VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK*2/3, 512, 10, 304, 260, 7, 245) + MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK*2/3, 512, 6, 298, 260, 7, 247) MCFG_SCREEN_UPDATE_DRIVER(williams_state, screen_update_williams) MCFG_VIDEO_START_OVERRIDE(williams_state,williams) @@ -1480,27 +1471,35 @@ static MACHINE_CONFIG_START( defender, williams_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( jin, defender ) // needs a different screen size or the credit text is clipped - /* basic machine hardware */ - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(0, 315, 7, 245) -MACHINE_CONFIG_END - - -static MACHINE_CONFIG_DERIVED( williams, defender ) +static MACHINE_CONFIG_DERIVED( defender, williams ) /* basic machine hardware */ MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(williams_map) + MCFG_CPU_PROGRAM_MAP(defender_map) MCFG_CPU_MODIFY("soundcpu") - MCFG_CPU_PROGRAM_MAP(sound_map) + MCFG_CPU_PROGRAM_MAP(defender_sound_map) + + MCFG_DEVICE_ADD("bankc000", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(defender_bankc000_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_BIG) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(16) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000) + + MCFG_MACHINE_START_OVERRIDE(williams_state,defender) + MCFG_MACHINE_RESET_OVERRIDE(williams_state,defender) - MCFG_MACHINE_START_OVERRIDE(williams_state,williams) - MCFG_MACHINE_RESET_OVERRIDE(williams_state,williams) MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(6, 298-1, 7, 247-1) + MCFG_SCREEN_VISIBLE_AREA(12, 304-1, 7, 247-1) +MACHINE_CONFIG_END + + +static MACHINE_CONFIG_DERIVED( jin, defender ) // needs a different screen size or the credit text is clipped + /* basic machine hardware */ + MCFG_SCREEN_MODIFY("screen") + MCFG_SCREEN_VISIBLE_AREA(0, 315, 7, 247-1) MACHINE_CONFIG_END @@ -1538,24 +1537,6 @@ static MACHINE_CONFIG_DERIVED( lottofun, williams ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( alienar, defender ) - - /* basic machine hardware */ - - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(williams_map) - - MCFG_MACHINE_START_OVERRIDE(williams_state,williams) - MCFG_MACHINE_RESET_OVERRIDE(williams_state,williams) - MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(6, 298-1, 7, 247-1) - - /* pia */ - MCFG_DEVICE_MODIFY("pia_0") - MCFG_PIA_CB2_HANDLER(WRITELINE(williams_state, williams_port_select_w)) -MACHINE_CONFIG_END - - static MACHINE_CONFIG_DERIVED( sinistar, williams ) /* basic machine hardware */ @@ -1582,7 +1563,7 @@ static MACHINE_CONFIG_DERIVED( playball, williams ) /* video hardware */ MCFG_SCREEN_MODIFY("screen") - MCFG_SCREEN_VISIBLE_AREA(6, 298-1, 8, 239-1) + MCFG_SCREEN_VISIBLE_AREA(6, 298-1, 8, 240-1) /* sound hardware */ MCFG_SOUND_ADD("cvsd", HC55516, 0) @@ -3045,8 +3026,8 @@ GAME( 1983, blaster, 0, blaster, blaster, blaster_state, blas GAME( 1983, blastero, blaster, blaster, blaster, blaster_state, blaster, ROT0, "Williams / Vid Kidz", "Blaster (location test)", GAME_SUPPORTS_SAVE ) GAME( 1983, blasterkit, blaster, blastkit, blastkit, blaster_state, blaster, ROT0, "Williams / Vid Kidz", "Blaster (conversion kit)", GAME_SUPPORTS_SAVE ) // mono sound GAME( 1985, spdball, 0, spdball, spdball, williams_state, spdball, ROT0, "Williams", "Speed Ball - Contest at Neonworld (prototype)", GAME_SUPPORTS_SAVE ) -GAME( 1985, alienar, 0, alienar, alienar, williams_state, alienar, ROT0, "Duncan Brown", "Alien Arena", GAME_SUPPORTS_SAVE ) -GAME( 1985, alienaru, alienar, alienar, alienar, williams_state, alienaru, ROT0, "Duncan Brown", "Alien Arena (Stargate upgrade)", GAME_SUPPORTS_SAVE ) +GAME( 1985, alienar, 0, williams_muxed, alienar, williams_state, alienar, ROT0, "Duncan Brown", "Alien Arena", GAME_SUPPORTS_SAVE ) +GAME( 1985, alienaru, alienar, williams_muxed, alienar, williams_state, alienaru, ROT0, "Duncan Brown", "Alien Arena (Stargate upgrade)", GAME_SUPPORTS_SAVE ) GAME( 1987, lottofun, 0, lottofun, lottofun, williams_state, lottofun, ROT0, "H.A.R. Management", "Lotto Fun", GAME_SUPPORTS_SAVE ) /* 2nd Generation Williams hardware with tilemaps */ diff --git a/src/mame/drivers/wmg.c b/src/mame/drivers/wmg.c index beb2755fcf6..d67aedd2bff 100644 --- a/src/mame/drivers/wmg.c +++ b/src/mame/drivers/wmg.c @@ -467,8 +467,7 @@ static MACHINE_CONFIG_START( wmg, wmg_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE | VIDEO_ALWAYS_UPDATE) - MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK*2/3, 512, 10, 304, 260, 7, 245) - MCFG_SCREEN_VISIBLE_AREA(6, 298-1, 7, 247-1) + MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK*2/3, 512, 6, 298, 260, 7, 247) MCFG_SCREEN_UPDATE_DRIVER(williams_state, screen_update_williams) MCFG_VIDEO_START_OVERRIDE(williams_state,williams) diff --git a/src/mame/includes/williams.h b/src/mame/includes/williams.h index cd8755eb945..b61a86f960a 100644 --- a/src/mame/includes/williams.h +++ b/src/mame/includes/williams.h @@ -18,6 +18,7 @@ public: m_videoram(*this, "videoram"), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), + m_bankc000(*this, "bankc000"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_generic_paletteram_8(*this, "paletteram") { } @@ -42,7 +43,6 @@ public: UINT16 m_blitter_clip_address; UINT8 m_blitter_window_enable; UINT8 m_cocktail; - UINT8 m_vram_bank; UINT8 m_port_select; rgb_t *m_palette_lookup; UINT8 m_blitterram[8]; @@ -94,13 +94,11 @@ public: DECLARE_READ8_MEMBER(williams_input_port_49way_0_5_r); DECLARE_WRITE_LINE_MEMBER(lottofun_coin_lock_w); - void defender_postload(); void state_save_register(); void create_palette_lookup(); void blitter_init(int blitter_config, const UINT8 *remap_prom); inline void blit_pixel(address_space &space, int dstaddr, int srcdata, int controlbyte); int blitter_core(address_space &space, int sstart, int dstart, int w, int h, int data); - void defender_install_io_space(address_space &space); DECLARE_WRITE_LINE_MEMBER(williams_main_irq); DECLARE_WRITE_LINE_MEMBER(williams_main_firq); @@ -108,6 +106,7 @@ public: required_device m_maincpu; required_device m_soundcpu; + optional_device m_bankc000; required_device m_screen; optional_device m_palette; optional_shared_ptr m_generic_paletteram_8; @@ -129,7 +128,8 @@ public: rgb_t m_blaster_color0; UINT8 m_blaster_video_control; - UINT8 m_blaster_bank; + UINT8 m_vram_bank; + UINT8 m_rom_bank; DECLARE_WRITE8_MEMBER(blaster_vram_select_w); DECLARE_WRITE8_MEMBER(blaster_bank_select_w); diff --git a/src/mame/machine/williams.c b/src/mame/machine/williams.c index 677404bf71d..54df58dd788 100644 --- a/src/mame/machine/williams.c +++ b/src/mame/machine/williams.c @@ -135,8 +135,6 @@ MACHINE_START_MEMBER(williams_state,williams_common) /* configure the memory bank */ membank("bank1")->configure_entry(1, memregion("maincpu")->base() + 0x10000); membank("bank1")->configure_entry(0, m_videoram); - - save_item(NAME(m_vram_bank)); } @@ -225,9 +223,6 @@ MACHINE_START_MEMBER(williams2_state,williams2) 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)); } @@ -258,8 +253,7 @@ MACHINE_RESET_MEMBER(williams2_state,williams2) WRITE8_MEMBER(williams_state::williams_vram_select_w) { /* VRAM/ROM banking from bit 0 */ - m_vram_bank = data & 0x01; - membank("bank1")->set_entry(m_vram_bank); + membank("bank1")->set_entry(data & 0x01); /* cocktail flip from bit 1 */ m_cocktail = data & 0x02; @@ -268,10 +262,8 @@ WRITE8_MEMBER(williams_state::williams_vram_select_w) WRITE8_MEMBER(williams2_state::williams2_bank_select_w) { - m_vram_bank = data & 0x07; - /* the low two bits control the paging */ - switch (m_vram_bank & 0x03) + switch (data & 0x03) { /* page 0 is video ram */ case 0: @@ -282,13 +274,13 @@ WRITE8_MEMBER(williams2_state::williams2_bank_select_w) /* pages 1 and 2 are ROM */ case 1: case 2: - membank("bank1")->set_entry(1 + ((m_vram_bank & 6) >> 1)); + membank("bank1")->set_entry(1 + ((data & 6) >> 1)); m_bank8000->set_bank(0); break; /* page 3 accesses palette RAM; the remaining areas are as if page 1 ROM was selected */ case 3: - membank("bank1")->set_entry(1 + ((m_vram_bank & 4) >> 1)); + membank("bank1")->set_entry(1 + ((data & 4) >> 1)); m_bank8000->set_bank(1); break; } @@ -489,21 +481,8 @@ WRITE8_MEMBER(williams2_state::williams2_7segment_w) * *************************************/ -void williams_state::defender_postload() -{ - address_space &space = m_maincpu->space(AS_PROGRAM); - defender_bank_select_w(space, 0, m_vram_bank); -} - - MACHINE_START_MEMBER(williams_state,defender) { - MACHINE_START_CALL_MEMBER(williams_common); - - /* configure the banking and make sure it is reset to 0 */ - membank("bank1")->configure_entries(0, 9, &memregion("maincpu")->base()[0x10000], 0x1000); - - machine().save().register_postload(save_prepost_delegate(FUNC(williams_state::defender_postload), this)); } @@ -525,36 +504,7 @@ WRITE8_MEMBER(williams_state::defender_video_control_w) WRITE8_MEMBER(williams_state::defender_bank_select_w) { - m_vram_bank = data & 0x0f; - - /* set bank address */ - switch (data) - { - /* page 0 is I/O &space */ - case 0: - defender_install_io_space(space); - break; - - /* pages 1-9 map to ROM banks */ - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 9: - space.install_read_bank(0xc000, 0xcfff, "bank1"); - space.unmap_write(0xc000, 0xcfff); - membank("bank1")->set_entry(m_vram_bank - 1); - break; - - /* pages A-F are not connected */ - default: - space.nop_readwrite(0xc000, 0xcfff); - break; - } + m_bankc000->set_bank(data & 0x0f); } @@ -602,8 +552,6 @@ WRITE8_MEMBER(williams_state::sinistar_vram_select_w) MACHINE_START_MEMBER(blaster_state,blaster) { - MACHINE_START_CALL_MEMBER(williams_common); - /* banking is different for blaster */ membank("bank1")->configure_entries(1, 16, memregion("maincpu")->base() + 0x18000, 0x4000); membank("bank1")->configure_entry(0, m_videoram); @@ -611,7 +559,9 @@ MACHINE_START_MEMBER(blaster_state,blaster) 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)); + /* register for save states */ + save_item(NAME(m_vram_bank)); + save_item(NAME(m_rom_bank)); } @@ -623,8 +573,8 @@ MACHINE_RESET_MEMBER(blaster_state,blaster) inline void blaster_state::update_blaster_banking() { - membank("bank1")->set_entry(m_vram_bank * (m_blaster_bank + 1)); - membank("bank2")->set_entry(m_vram_bank * (m_blaster_bank + 1)); + membank("bank1")->set_entry(m_vram_bank * (m_rom_bank + 1)); + membank("bank2")->set_entry(m_vram_bank * (m_rom_bank + 1)); } @@ -644,7 +594,7 @@ WRITE8_MEMBER(blaster_state::blaster_vram_select_w) WRITE8_MEMBER(blaster_state::blaster_bank_select_w) { - m_blaster_bank = data & 0x0f; + m_rom_bank = data & 0x0f; update_blaster_banking(); }