From 5fc8d523eca2ee983df074d57e12f0894b1e14d7 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 26 Feb 2015 18:56:12 +0100 Subject: [PATCH] wc90b: added save state support (nw) --- src/mame/drivers/wc90b.c | 29 +++++++++++++---------- src/mame/includes/wc90b.h | 50 ++++++++++++++++++++++----------------- src/mame/video/wc90b.c | 8 +++---- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/mame/drivers/wc90b.c b/src/mame/drivers/wc90b.c index 10c62c69090..ddac4ad9c7f 100644 --- a/src/mame/drivers/wc90b.c +++ b/src/mame/drivers/wc90b.c @@ -96,17 +96,17 @@ Noted added by ClawGrip 28-Mar-2008: #define MSM5205_CLOCK XTAL_384kHz -WRITE8_MEMBER(wc90b_state::wc90b_bankswitch_w) +WRITE8_MEMBER(wc90b_state::bankswitch_w) { membank("mainbank")->set_entry(data >> 3); } -WRITE8_MEMBER(wc90b_state::wc90b_bankswitch1_w) +WRITE8_MEMBER(wc90b_state::bankswitch1_w) { membank("subbank")->set_entry(data >> 3); } -WRITE8_MEMBER(wc90b_state::wc90b_sound_command_w) +WRITE8_MEMBER(wc90b_state::sound_command_w) { soundlatch_byte_w(space, offset, data); m_audiocpu->set_input_line(0, HOLD_LINE); @@ -127,13 +127,13 @@ WRITE8_MEMBER(wc90b_state::adpcm_data_w) static ADDRESS_MAP_START( wc90b_map1, AS_PROGRAM, 8, wc90b_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x9fff) AM_RAM /* Main RAM */ - AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(wc90b_fgvideoram_w) AM_SHARE("fgvideoram") - AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(wc90b_bgvideoram_w) AM_SHARE("bgvideoram") - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(wc90b_txvideoram_w) AM_SHARE("txvideoram") + AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(fgvideoram_w) AM_SHARE("fgvideoram") + AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(bgvideoram_w) AM_SHARE("bgvideoram") + AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(txvideoram_w) AM_SHARE("txvideoram") AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("mainbank") AM_RANGE(0xf800, 0xfbff) AM_RAM AM_SHARE("share1") - AM_RANGE(0xfc00, 0xfc00) AM_WRITE(wc90b_bankswitch_w) - AM_RANGE(0xfd00, 0xfd00) AM_WRITE(wc90b_sound_command_w) + AM_RANGE(0xfc00, 0xfc00) AM_WRITE(bankswitch_w) + AM_RANGE(0xfd00, 0xfd00) AM_WRITE(sound_command_w) AM_RANGE(0xfd04, 0xfd04) AM_WRITEONLY AM_SHARE("scroll1y") AM_RANGE(0xfd06, 0xfd06) AM_WRITEONLY AM_SHARE("scroll1x") AM_RANGE(0xfd08, 0xfd08) AM_WRITEONLY AM_SHARE("scroll2y") @@ -154,7 +154,7 @@ static ADDRESS_MAP_START( wc90b_map2, AS_PROGRAM, 8, wc90b_state ) AM_RANGE(0xe800, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_ROMBANK("subbank") AM_RANGE(0xf800, 0xfbff) AM_RAM AM_SHARE("share1") - AM_RANGE(0xfc00, 0xfc00) AM_WRITE(wc90b_bankswitch1_w) + AM_RANGE(0xfc00, 0xfc00) AM_WRITE(bankswitch1_w) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_cpu, AS_PROGRAM, 8, wc90b_state ) @@ -325,6 +325,9 @@ void wc90b_state::machine_start() membank("mainbank")->configure_entries(0, 32, memregion("maincpu")->base() + 0x10000, 0x800); membank("subbank")->configure_entries(0, 32, memregion("sub")->base() + 0x10000, 0x800); membank("audiobank")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x8000, 0x4000); + + save_item(NAME(m_msm5205next)); + save_item(NAME(m_toggle)); } @@ -349,7 +352,7 @@ static MACHINE_CONFIG_START( wc90b, wc90b_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(wc90b_state, screen_update_wc90b) + MCFG_SCREEN_UPDATE_DRIVER(wc90b_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", wc90b) @@ -507,6 +510,6 @@ ROM_START( wc90ba ) ROM_END -GAME( 1989, wc90b1, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND ) -GAME( 1989, wc90b2, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Worldcup '90", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND ) -GAME( 1989, wc90ba, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Euro League (Italian hack of Temco World Cup '90 - alt version)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND ) +GAME( 1989, wc90b1, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1989, wc90b2, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Worldcup '90", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1989, wc90ba, wc90, wc90b, wc90b, driver_device, 0, ROT0, "bootleg", "Euro League (Italian hack of Temco World Cup '90 - alt version)", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/wc90b.h b/src/mame/includes/wc90b.h index 4c459183a07..b81bc70feb5 100644 --- a/src/mame/includes/wc90b.h +++ b/src/mame/includes/wc90b.h @@ -5,6 +5,11 @@ class wc90b_state : public driver_device public: wc90b_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_msm(*this, "msm"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), m_fgvideoram(*this, "fgvideoram"), m_bgvideoram(*this, "bgvideoram"), m_txvideoram(*this, "txvideoram"), @@ -13,15 +18,14 @@ public: m_scroll1y(*this, "scroll1y"), m_scroll2y(*this, "scroll2y"), m_scroll_x_lo(*this, "scroll_x_lo"), - m_spriteram(*this, "spriteram"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_msm(*this, "msm"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_spriteram(*this, "spriteram") { } + + required_device m_maincpu; + required_device m_audiocpu; + required_device m_msm; + required_device m_gfxdecode; + required_device m_palette; - int m_msm5205next; - int m_toggle; required_shared_ptr m_fgvideoram; required_shared_ptr m_bgvideoram; required_shared_ptr m_txvideoram; @@ -30,29 +34,31 @@ public: required_shared_ptr m_scroll1y; required_shared_ptr m_scroll2y; required_shared_ptr m_scroll_x_lo; + required_shared_ptr m_spriteram; + tilemap_t *m_tx_tilemap; tilemap_t *m_fg_tilemap; tilemap_t *m_bg_tilemap; - required_shared_ptr m_spriteram; - DECLARE_WRITE8_MEMBER(wc90b_bankswitch_w); - DECLARE_WRITE8_MEMBER(wc90b_bankswitch1_w); - DECLARE_WRITE8_MEMBER(wc90b_sound_command_w); + int m_msm5205next; + int m_toggle; + + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE8_MEMBER(bankswitch1_w); + DECLARE_WRITE8_MEMBER(sound_command_w); DECLARE_WRITE8_MEMBER(adpcm_data_w); - DECLARE_WRITE8_MEMBER(wc90b_bgvideoram_w); - DECLARE_WRITE8_MEMBER(wc90b_fgvideoram_w); - DECLARE_WRITE8_MEMBER(wc90b_txvideoram_w); + DECLARE_WRITE8_MEMBER(bgvideoram_w); + DECLARE_WRITE8_MEMBER(fgvideoram_w); + DECLARE_WRITE8_MEMBER(txvideoram_w); DECLARE_WRITE8_MEMBER(adpcm_control_w); + DECLARE_WRITE_LINE_MEMBER(adpcm_int); + TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info); + virtual void machine_start(); virtual void video_start(); - UINT32 screen_update_wc90b(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority ); - DECLARE_WRITE_LINE_MEMBER(adpcm_int); - required_device m_maincpu; - required_device m_audiocpu; - required_device m_msm; - required_device m_gfxdecode; - required_device m_palette; }; diff --git a/src/mame/video/wc90b.c b/src/mame/video/wc90b.c index 1eed1448429..951c956adf8 100644 --- a/src/mame/video/wc90b.c +++ b/src/mame/video/wc90b.c @@ -62,19 +62,19 @@ void wc90b_state::video_start() ***************************************************************************/ -WRITE8_MEMBER(wc90b_state::wc90b_bgvideoram_w) +WRITE8_MEMBER(wc90b_state::bgvideoram_w) { m_bgvideoram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset & 0x7ff); } -WRITE8_MEMBER(wc90b_state::wc90b_fgvideoram_w) +WRITE8_MEMBER(wc90b_state::fgvideoram_w) { m_fgvideoram[offset] = data; m_fg_tilemap->mark_tile_dirty(offset & 0x7ff); } -WRITE8_MEMBER(wc90b_state::wc90b_txvideoram_w) +WRITE8_MEMBER(wc90b_state::txvideoram_w) { m_txvideoram[offset] = data; m_tx_tilemap->mark_tile_dirty(offset & 0x7ff); @@ -121,7 +121,7 @@ void wc90b_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, } } -UINT32 wc90b_state::screen_update_wc90b(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 wc90b_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0,8 * (m_scroll2x[0] & 0x7f) + 256 - 4 + (m_scroll_x_lo[0] & 0x07)); m_bg_tilemap->set_scrolly(0,m_scroll2y[0] + 1 + ((m_scroll2x[0] & 0x80) ? 256 : 0));