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 "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")

View File

@ -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<address_map_bank_device> m_bank8000;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT8> 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();
};

View File

@ -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();
}

View File

@ -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);