From 77cbdd8084eae54aa2564a39b646347241c03016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Wed, 12 Mar 2014 21:33:14 +0000 Subject: [PATCH] converted wardner to bankdev --- src/mame/drivers/wardner.c | 126 ++++++++++++++++------------------- src/mame/includes/twincobr.h | 2 - src/mame/machine/twincobr.c | 10 --- 3 files changed, 59 insertions(+), 79 deletions(-) diff --git a/src/mame/drivers/wardner.c b/src/mame/drivers/wardner.c index 66e3fa16967..fdb546839dd 100644 --- a/src/mame/drivers/wardner.c +++ b/src/mame/drivers/wardner.c @@ -128,6 +128,7 @@ out: #include "cpu/z80/z80.h" #include "cpu/tms32010/tms32010.h" #include "sound/3812intf.h" +#include "machine/bankdev.h" #include "includes/toaplipt.h" #include "includes/twincobr.h" @@ -137,62 +138,46 @@ class wardner_state : public twincobr_state public: wardner_state(const machine_config &mconfig, device_type type, const char *tag) : twincobr_state(mconfig, type, tag), - m_rambase_c000(*this, "rambase_c000") + m_membank(*this, "membank") { } - required_shared_ptr m_rambase_c000; - UINT8 *m_ROM; + required_device m_membank; - DECLARE_WRITE8_MEMBER(wardner_ramrom_bank_sw); - DECLARE_READ8_MEMBER(wardner_bank_r); + DECLARE_WRITE8_MEMBER(wardner_bank_w); DECLARE_DRIVER_INIT(wardner); DECLARE_WRITE_LINE_MEMBER(irqhandler); + +protected: + virtual void driver_start(); + virtual void machine_reset(); }; -READ8_MEMBER( wardner_state::wardner_bank_r ) -{ - if (m_wardner_membank == 0) - { - // RAM mapped (plus fallthroughs to bits of ROM bank 0) - int addr = offset + 0x8000; - - // 0x8000 - 0x8fff (sprites) - if ((addr >= 0x8000) && (addr < 0x9000)) - return wardner_sprite_r(space, addr - 0x8000); - - // 0xa000 - 0xafff (paletteram) - else if ((addr >= 0xa000) && (addr < 0xb000)) - return m_palette->basemem().read8(addr - 0xa000); - - // 0xc000 - 0xc7ff (z80 shared ram) - else if ((addr >= 0xc000) && (addr < 0xc800)) - return m_rambase_c000[addr - 0xc000]; - } - - // ROM bank mapped - return m_ROM[m_wardner_membank * 0x8000 + offset]; -} - -WRITE8_MEMBER(wardner_state::wardner_ramrom_bank_sw) -{ - m_wardner_membank = data & 7; -} - - /***************************** Z80 Main Memory Map **************************/ +WRITE8_MEMBER(wardner_state::wardner_bank_w) +{ + m_membank->set_bank(data & 7); +} + static ADDRESS_MAP_START( main_program_map, AS_PROGRAM, 8, wardner_state ) AM_RANGE(0x0000, 0x6fff) AM_ROM AM_RANGE(0x7000, 0x7fff) AM_RAM - AM_RANGE(0x8000, 0xffff) AM_READ(wardner_bank_r) /* Overlapped RAM/Banked ROM */ - AM_RANGE(0x8000, 0x8fff) AM_WRITE(wardner_sprite_w) AM_SHARE("spriteram8") - AM_RANGE(0x9000, 0x9fff) AM_ROM - AM_RANGE(0xa000, 0xafff) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE(0xb000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("rambase_c000") /* Shared RAM with Sound Z80 */ - AM_RANGE(0xc800, 0xffff) AM_ROM + AM_RANGE(0x8000, 0xffff) AM_DEVICE("membank", address_map_bank_device, amap8) /* Overlapped RAM/Banked ROM */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( main_bank_map, AS_PROGRAM, 8, wardner_state ) + AM_RANGE(0x00000, 0x00fff) AM_READ(wardner_sprite_r) AM_SHARE("spriteram8") + AM_RANGE(0x02000, 0x02fff) AM_DEVREAD("palette", palette_device, read) AM_SHARE("palette") + AM_RANGE(0x04000, 0x047ff) AM_RAM AM_READONLY AM_SHARE("sharedram") + AM_RANGE(0x01000, 0x01fff) AM_ROM AM_REGION("maincpu", 0x01000) + AM_RANGE(0x03000, 0x03fff) AM_ROM AM_REGION("maincpu", 0x03000) + AM_RANGE(0x05000, 0x07fff) AM_ROM AM_REGION("maincpu", 0x05000) + AM_RANGE(0x08000, 0x3ffff) AM_ROM AM_REGION("maincpu", 0x08000) + AM_RANGE(0x00000, 0x00fff) AM_MIRROR(0x38000) AM_WRITE(wardner_sprite_w) AM_SHARE("spriteram8") + AM_RANGE(0x02000, 0x02fff) AM_MIRROR(0x38000) AM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + AM_RANGE(0x04000, 0x047ff) AM_MIRROR(0x38000) AM_RAM AM_WRITEONLY AM_SHARE("sharedram") ADDRESS_MAP_END static ADDRESS_MAP_START( main_io_map, AS_IO, 8, wardner_state ) @@ -213,8 +198,8 @@ static ADDRESS_MAP_START( main_io_map, AS_IO, 8, wardner_state ) AM_RANGE(0x58, 0x58) AM_READ_PORT("SYSTEM") AM_RANGE(0x5a, 0x5a) AM_WRITE(wardner_coin_dsp_w) /* Machine system control */ AM_RANGE(0x5c, 0x5c) AM_WRITE(wardner_control_w) /* Machine system control */ - AM_RANGE(0x60, 0x65) AM_READWRITE(wardner_videoram_r, wardner_videoram_w) /* data from video layer RAM */ - AM_RANGE(0x70, 0x70) AM_WRITE(wardner_ramrom_bank_sw) /* ROM bank select */ + AM_RANGE(0x60, 0x65) AM_READWRITE(wardner_videoram_r, wardner_videoram_w) + AM_RANGE(0x70, 0x70) AM_WRITE(wardner_bank_w) ADDRESS_MAP_END @@ -223,9 +208,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_program_map, AS_PROGRAM, 8, wardner_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x807f) AM_RAM - AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("rambase_c000") /* Shared RAM with Main Z80 */ + AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE("sharedram") AM_RANGE(0xc800, 0xcfff) AM_RAM - ADDRESS_MAP_END static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, wardner_state ) @@ -243,9 +227,9 @@ ADDRESS_MAP_END /* $000 - 08F TMS32010 Internal Data RAM in Data Address Space */ static ADDRESS_MAP_START( DSP_io_map, AS_IO, 16, wardner_state ) - AM_RANGE(0, 0) AM_WRITE(wardner_dsp_addrsel_w) - AM_RANGE(1, 1) AM_READWRITE(wardner_dsp_r, wardner_dsp_w) - AM_RANGE(3, 3) AM_WRITE(twincobr_dsp_bio_w) + AM_RANGE(0x00, 0x00) AM_WRITE(wardner_dsp_addrsel_w) + AM_RANGE(0x01, 0x01) AM_READWRITE(wardner_dsp_r, wardner_dsp_w) + AM_RANGE(0x03, 0x03) AM_WRITE(twincobr_dsp_bio_w) AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(twincobr_BIO_r) ADDRESS_MAP_END @@ -379,7 +363,21 @@ static GFXDECODE_START( wardner ) GFXDECODE_END +void wardner_state::driver_start() +{ + /* Save-State stuff in src/machine/twincobr.c */ + twincobr_driver_savestate(); +} +void wardner_state::machine_reset() +{ + MACHINE_RESET_CALL_MEMBER(twincobr); + + m_toaplan_main_cpu = 1; /* Z80 */ + twincobr_display(1); + + m_membank->set_bank(0); +} static MACHINE_CONFIG_START( wardner, wardner_state ) @@ -389,6 +387,12 @@ static MACHINE_CONFIG_START( wardner, wardner_state ) MCFG_CPU_IO_MAP(main_io_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", wardner_state, wardner_interrupt) + MCFG_DEVICE_ADD("membank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(main_bank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x8000) + MCFG_CPU_ADD("audiocpu", Z80, XTAL_14MHz/4) /* 3.5MHz */ MCFG_CPU_PROGRAM_MAP(sound_program_map) MCFG_CPU_IO_MAP(sound_io_map) @@ -400,8 +404,6 @@ static MACHINE_CONFIG_START( wardner, wardner_state ) MCFG_QUANTUM_TIME(attotime::from_hz(6000)) /* 100 CPU slices per frame */ - MCFG_MACHINE_RESET_OVERRIDE(wardner_state,wardner) - /* video hardware */ MCFG_MC6845_ADD("crtc", HD6845, "screen", XTAL_14MHz/4, twincobr_mc6845_intf) /* 3.5MHz measured on CLKin */ @@ -432,16 +434,14 @@ MACHINE_CONFIG_END - /*************************************************************************** Game driver(s) ***************************************************************************/ - ROM_START( wardner ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* Banked Main Z80 code */ + ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Main Z80 code */ ROM_LOAD( "wardner.17", 0x00000, 0x08000, CRC(c5dd56fd) SHA1(f0a09557150e9c1c6b9d8e125f5408fc269c9d17) ) /* Main Z80 code */ ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */ ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) ) @@ -492,7 +492,7 @@ ROM_START( wardner ) ROM_END ROM_START( pyros ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* Banked Z80 code */ + ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Z80 code */ ROM_LOAD( "b25-29.rom", 0x00000, 0x08000, CRC(b568294d) SHA1(5d04dd006f5180fa0c9340e2efa6613625d712a8) ) /* Main Z80 code */ ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */ ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) ) @@ -543,7 +543,7 @@ ROM_START( pyros ) ROM_END ROM_START( wardnerj ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* Banked Z80 code */ + ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASEFF ) /* Banked Z80 code */ ROM_LOAD( "b25-17.bin", 0x00000, 0x08000, CRC(4164dca9) SHA1(1f02c0991d7c14230043e34cb4b8e089b467b234) ) /* Main Z80 code */ ROM_LOAD( "b25-18.rom", 0x10000, 0x10000, CRC(9aab8ee2) SHA1(16fa44b75f4a3a5b1ff713690a299ecec2b5a4bf) ) /* OBJ ROMs */ ROM_LOAD( "b25-19.rom", 0x20000, 0x10000, CRC(95b68813) SHA1(06ea1b1d6e2e6326ceb9324fc471d082fda6112e) ) @@ -594,14 +594,6 @@ ROM_START( wardnerj ) ROM_END -DRIVER_INIT_MEMBER(wardner_state,wardner) -{ - m_ROM = memregion("maincpu")->base(); - twincobr_driver_savestate(); /* Save-State stuff in src/machine/twincobr.c */ -} - - - -GAME( 1987, wardner, 0, wardner, wardner, wardner_state, wardner, ROT0, "Toaplan / Taito Corporation Japan", "Wardner (World)", GAME_SUPPORTS_SAVE ) -GAME( 1987, pyros, wardner, wardner, pyros, wardner_state, wardner, ROT0, "Toaplan / Taito America Corporation", "Pyros (US)", GAME_SUPPORTS_SAVE ) -GAME( 1987, wardnerj, wardner, wardner, wardnerj, wardner_state, wardner, ROT0, "Toaplan / Taito Corporation", "Wardner no Mori (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1987, wardner, 0, wardner, wardner, driver_device, 0, ROT0, "Toaplan / Taito Corporation Japan", "Wardner (World)", GAME_SUPPORTS_SAVE ) +GAME( 1987, pyros, wardner, wardner, pyros, driver_device, 0, ROT0, "Toaplan / Taito America Corporation", "Pyros (US)", GAME_SUPPORTS_SAVE ) +GAME( 1987, wardnerj, wardner, wardner, wardnerj, driver_device, 0, ROT0, "Toaplan / Taito Corporation", "Wardner no Mori (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/twincobr.h b/src/mame/includes/twincobr.h index 3573c450a15..c90841bbec5 100644 --- a/src/mame/includes/twincobr.h +++ b/src/mame/includes/twincobr.h @@ -29,7 +29,6 @@ public: optional_device m_spriteram16; int m_toaplan_main_cpu; - int m_wardner_membank; INT32 m_fg_rom_bank; INT32 m_bg_ram_bank; int m_intenable; @@ -106,7 +105,6 @@ public: TILE_GET_INFO_MEMBER(get_tx_tile_info); DECLARE_MACHINE_RESET(twincobr); DECLARE_VIDEO_START(toaplan0); - DECLARE_MACHINE_RESET(wardner); void copy_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority); UINT32 screen_update_toaplan0(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(twincobr_interrupt); diff --git a/src/mame/machine/twincobr.c b/src/mame/machine/twincobr.c index 54695bb06da..4807a755b77 100644 --- a/src/mame/machine/twincobr.c +++ b/src/mame/machine/twincobr.c @@ -306,18 +306,9 @@ MACHINE_RESET_MEMBER(twincobr_state,twincobr) m_main_ram_seg = 0; m_dsp_execute = 0; m_dsp_BIO = CLEAR_LINE; - m_wardner_membank = 0; m_fsharkbt_8741 = -1; } -MACHINE_RESET_MEMBER(twincobr_state,wardner) -{ - MACHINE_RESET_CALL_MEMBER(twincobr); - - m_toaplan_main_cpu = 1; /* Z80 */ - twincobr_display(1); -} - void twincobr_state::twincobr_driver_savestate() { save_item(NAME(m_toaplan_main_cpu)); @@ -328,7 +319,6 @@ void twincobr_state::twincobr_driver_savestate() save_item(NAME(m_dsp_BIO)); save_item(NAME(m_dsp_execute)); save_item(NAME(m_fsharkbt_8741)); - save_item(NAME(m_wardner_membank)); machine().save().register_postload(save_prepost_delegate(FUNC(twincobr_state::twincobr_restore_dsp), this)); }