williams.c: convert williams2 hardware games to bankdev [Alex Jackson]

This commit is contained in:
Alex W. Jackson 2014-05-03 17:01:28 +00:00
parent 04df758be4
commit 59f9b55f48
4 changed files with 27 additions and 31 deletions

View File

@ -491,7 +491,6 @@
#include "cpu/m6800/m6800.h" #include "cpu/m6800/m6800.h"
#include "sound/dac.h" #include "sound/dac.h"
#include "sound/hc55516.h" #include "sound/hc55516.h"
#include "machine/6821pia.h"
#include "machine/ticket.h" #include "machine/ticket.h"
#include "includes/williams.h" #include "includes/williams.h"
#include "machine/nvram.h" #include "machine/nvram.h"
@ -619,8 +618,9 @@ ADDRESS_MAP_END
*************************************/ *************************************/
static ADDRESS_MAP_START( williams2_common_map, AS_PROGRAM, 8, williams2_state ) 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(0x0000, 0x7fff) AM_READ_BANK("bank1")
AM_RANGE(0x8000, 0xbfff) AM_RAM 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(0xc000, 0xc7ff) AM_RAM_WRITE(williams2_tileram_w) AM_SHARE("williams2_tile")
AM_RANGE(0xc800, 0xc87f) AM_WRITE(williams2_bank_select_w) AM_RANGE(0xc800, 0xc87f) AM_WRITE(williams2_bank_select_w)
AM_RANGE(0xc880, 0xc887) AM_MIRROR(0x0078) AM_WRITE(williams_blitter_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") AM_RANGE(0xcc00, 0xcfff) AM_RAM_WRITE(williams_cmos_w) AM_SHARE("nvram")
ADDRESS_MAP_END 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 */ /* mysticm and inferno: D000-DFFF is RAM */
static ADDRESS_MAP_START( williams2_d000_ram_map, AS_PROGRAM, 8, williams2_state ) 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_ADD("soundcpu", M6808, MASTER_CLOCK/3) /* yes, this is different from the older games */
MCFG_CPU_PROGRAM_MAP(williams2_sound_map) 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_START_OVERRIDE(williams2_state,williams2)
MCFG_MACHINE_RESET_OVERRIDE(williams2_state,williams2) MCFG_MACHINE_RESET_OVERRIDE(williams2_state,williams2)
MCFG_NVRAM_ADD_0FILL("nvram") MCFG_NVRAM_ADD_0FILL("nvram")

View File

@ -6,6 +6,7 @@
#include "machine/6821pia.h" #include "machine/6821pia.h"
#include "machine/bankdev.h"
#include "audio/williams.h" #include "audio/williams.h"
class williams_state : public driver_device class williams_state : public driver_device
@ -153,9 +154,11 @@ class williams2_state : public williams_state
public: public:
williams2_state(const machine_config &mconfig, device_type type, const char *tag) williams2_state(const machine_config &mconfig, device_type type, const char *tag)
: williams_state(mconfig, type, tag), : williams_state(mconfig, type, tag),
m_bank8000(*this, "bank8000"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_williams2_tileram(*this, "williams2_tile") { } m_williams2_tileram(*this, "williams2_tile") { }
required_device<address_map_bank_device> m_bank8000;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT8> m_williams2_tileram; required_shared_ptr<UINT8> m_williams2_tileram;
@ -193,8 +196,6 @@ public:
DECLARE_MACHINE_RESET(williams2); DECLARE_MACHINE_RESET(williams2);
DECLARE_VIDEO_START(williams2); DECLARE_VIDEO_START(williams2);
UINT32 screen_update_williams2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); UINT32 screen_update_williams2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void williams2_postload();
}; };

View File

@ -7,7 +7,6 @@
#include "emu.h" #include "emu.h"
#include "cpu/m6800/m6800.h" #include "cpu/m6800/m6800.h"
#include "cpu/m6809/m6809.h" #include "cpu/m6809/m6809.h"
#include "machine/6821pia.h"
#include "machine/ticket.h" #include "machine/ticket.h"
#include "includes/williams.h" #include "includes/williams.h"
#include "sound/dac.h" #include "sound/dac.h"
@ -134,8 +133,8 @@ WRITE_LINE_MEMBER(williams2_state::tshoot_main_irq)
MACHINE_START_MEMBER(williams_state,williams_common) MACHINE_START_MEMBER(williams_state,williams_common)
{ {
/* configure the memory bank */ /* configure the memory bank */
membank("bank1")->configure_entry(0, m_videoram);
membank("bank1")->configure_entry(1, memregion("maincpu")->base() + 0x10000); membank("bank1")->configure_entry(1, memregion("maincpu")->base() + 0x10000);
membank("bank1")->configure_entry(0, m_videoram);
save_item(NAME(m_vram_bank)); 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) MACHINE_START_MEMBER(williams2_state,williams2)
{ {
/* configure memory banks */ /* configure memory banks */
membank("bank1")->configure_entry(0, m_videoram);
membank("bank1")->configure_entries(1, 4, memregion("maincpu")->base() + 0x10000, 0x10000); 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 */ /* register for save states */
save_item(NAME(m_vram_bank)); 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 */ /* page 0 is video ram */
case 0: case 0:
space.install_read_bank(0x0000, 0x8fff, "bank1");
space.install_write_bank(0x8000, 0x87ff, "bank4");
membank("bank1")->set_entry(0); membank("bank1")->set_entry(0);
membank("bank4")->set_base(&m_videoram[0x8000]); m_bank8000->set_bank(0);
break; break;
/* pages 1 and 2 are ROM */ /* pages 1 and 2 are ROM */
case 1: case 1:
case 2: 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("bank1")->set_entry(1 + ((m_vram_bank & 6) >> 1));
membank("bank4")->set_base(&m_videoram[0x8000]); m_bank8000->set_bank(0);
break; break;
/* page 3 accesses palette RAM; the remaining areas are as if page 1 ROM was selected */ /* page 3 accesses palette RAM; the remaining areas are as if page 1 ROM was selected */
case 3: 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("bank1")->set_entry(1 + ((m_vram_bank & 4) >> 1));
membank("bank4")->set_base(m_generic_paletteram_8); m_bank8000->set_bank(1);
break; break;
} }
} }
@ -619,11 +605,11 @@ MACHINE_START_MEMBER(blaster_state,blaster)
MACHINE_START_CALL_MEMBER(williams_common); MACHINE_START_CALL_MEMBER(williams_common);
/* banking is different for blaster */ /* 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_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_entries(1, 16, memregion("maincpu")->base() + 0x10000, 0x0000);
membank("bank2")->configure_entry(0, &m_videoram[0x4000]);
save_item(NAME(m_blaster_bank)); 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) WRITE8_MEMBER(blaster_state::blaster_bank_select_w)
{ {
m_blaster_bank = data & 15; m_blaster_bank = data & 0x0f;
update_blaster_banking(); update_blaster_banking();
} }

View File

@ -132,9 +132,6 @@ VIDEO_START_MEMBER(williams2_state,williams2)
{ {
blitter_init(m_blitter_config, NULL); blitter_init(m_blitter_config, NULL);
/* allocate paletteram */
m_generic_paletteram_8.allocate(0x400 * 2);
/* create the tilemap */ /* 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 = &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); m_bg_tilemap->set_scrolldx(2, 0);