mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
williams.c: convert williams2 hardware games to bankdev [Alex Jackson]
This commit is contained in:
parent
04df758be4
commit
59f9b55f48
@ -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")
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user