From 40e6fb438765a497ef9fddd17fe7e1e2eeb3ce27 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 2 Mar 2015 19:18:34 +0100 Subject: srumbler.c: added save state support (nw) --- src/mame/drivers/srumbler.c | 28 ++++++++++++++-------------- src/mame/includes/srumbler.h | 30 ++++++++++++++++++------------ src/mame/video/srumbler.c | 14 ++++++++------ 3 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/mame/drivers/srumbler.c b/src/mame/drivers/srumbler.c index f40eb871329..be87dc9acf9 100644 --- a/src/mame/drivers/srumbler.c +++ b/src/mame/drivers/srumbler.c @@ -17,7 +17,7 @@ #include "includes/srumbler.h" -WRITE8_MEMBER(srumbler_state::srumbler_bankswitch_w) +WRITE8_MEMBER(srumbler_state::bankswitch_w) { /* banking is controlled by two PROMs. 0000-4fff is mapped to the same @@ -51,10 +51,10 @@ void srumbler_state::machine_start() } /* initialize banked ROM pointers */ - srumbler_bankswitch_w(m_maincpu->space(AS_PROGRAM), 0, 0); + bankswitch_w(m_maincpu->space(AS_PROGRAM), 0, 0); } -TIMER_DEVICE_CALLBACK_MEMBER(srumbler_state::srumbler_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(srumbler_state::interrupt) { int scanline = param; @@ -78,15 +78,15 @@ Ignore the warnings about writing to unmapped memory. static ADDRESS_MAP_START( srumbler_map, AS_PROGRAM, 8, srumbler_state ) AM_RANGE(0x0000, 0x1dff) AM_RAM /* RAM (of 1 sort or another) */ AM_RANGE(0x1e00, 0x1fff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(srumbler_background_w) AM_SHARE("backgroundram") - AM_RANGE(0x4008, 0x4008) AM_READ_PORT("SYSTEM") AM_WRITE(srumbler_bankswitch_w) - AM_RANGE(0x4009, 0x4009) AM_READ_PORT("P1") AM_WRITE(srumbler_4009_w) + AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(background_w) AM_SHARE("backgroundram") + AM_RANGE(0x4008, 0x4008) AM_READ_PORT("SYSTEM") AM_WRITE(bankswitch_w) + AM_RANGE(0x4009, 0x4009) AM_READ_PORT("P1") AM_WRITE(_4009_w) AM_RANGE(0x400a, 0x400a) AM_READ_PORT("P2") AM_RANGE(0x400b, 0x400b) AM_READ_PORT("DSW1") AM_RANGE(0x400c, 0x400c) AM_READ_PORT("DSW2") - AM_RANGE(0x400a, 0x400d) AM_WRITE(srumbler_scroll_w) + AM_RANGE(0x400a, 0x400d) AM_WRITE(scroll_w) AM_RANGE(0x400e, 0x400e) AM_WRITE(soundlatch_byte_w) - AM_RANGE(0x5000, 0x5fff) AM_ROMBANK("5000") AM_WRITE(srumbler_foreground_w) AM_SHARE("foregroundram") /* Banked ROM */ + AM_RANGE(0x5000, 0x5fff) AM_ROMBANK("5000") AM_WRITE(foreground_w) AM_SHARE("foregroundram") /* Banked ROM */ AM_RANGE(0x6000, 0x6fff) AM_ROMBANK("6000") /* Banked ROM */ AM_RANGE(0x6000, 0x6fff) AM_WRITENOP /* Video RAM 2 ??? (not used) */ AM_RANGE(0x7000, 0x7fff) AM_ROMBANK("7000") /* Banked ROM */ @@ -242,7 +242,7 @@ static MACHINE_CONFIG_START( srumbler, srumbler_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6809, 1500000) /* 1.5 MHz (?) */ MCFG_CPU_PROGRAM_MAP(srumbler_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", srumbler_state, srumbler_interrupt, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", srumbler_state, interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", Z80, 3000000) /* 3 MHz ??? */ MCFG_CPU_PROGRAM_MAP(srumbler_sound_map) @@ -257,7 +257,7 @@ static MACHINE_CONFIG_START( srumbler, srumbler_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(64*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(10*8, (64-10)*8-1, 1*8, 31*8-1 ) - MCFG_SCREEN_UPDATE_DRIVER(srumbler_state, screen_update_srumbler) + MCFG_SCREEN_UPDATE_DRIVER(srumbler_state, screen_update) MCFG_SCREEN_VBLANK_DEVICE("spriteram", buffered_spriteram8_device, vblank_copy_rising) MCFG_SCREEN_PALETTE("palette") @@ -464,7 +464,7 @@ ROM_END -GAME( 1986, srumbler, 0, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "The Speed Rumbler (set 1)", 0 ) -GAME( 1986, srumbler2, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "The Speed Rumbler (set 2)", 0 ) -GAME( 1986, srumbler3, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom (Tecfri license)", "The Speed Rumbler (set 3)", 0 ) -GAME( 1986, rushcrsh, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "Rush & Crash (Japan)", 0 ) +GAME( 1986, srumbler, 0, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "The Speed Rumbler (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1986, srumbler2, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "The Speed Rumbler (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1986, srumbler3, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom (Tecfri license)", "The Speed Rumbler (set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1986, rushcrsh, srumbler, srumbler, srumbler, driver_device, 0, ROT270, "Capcom", "Rush & Crash (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/srumbler.h b/src/mame/includes/srumbler.h index 383717fca7b..06dab337b2a 100644 --- a/src/mame/includes/srumbler.h +++ b/src/mame/includes/srumbler.h @@ -7,31 +7,37 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_spriteram(*this,"spriteram"), - m_backgroundram(*this, "backgroundram"), - m_foregroundram(*this, "foregroundram"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"){ } + m_palette(*this, "palette"), + m_backgroundram(*this, "backgroundram"), + m_foregroundram(*this, "foregroundram") { } required_device m_maincpu; required_device m_spriteram; - required_shared_ptr m_backgroundram; - required_shared_ptr m_foregroundram; required_device m_gfxdecode; required_device m_palette; + + required_shared_ptr m_backgroundram; + required_shared_ptr m_foregroundram; + tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; int m_scroll[4]; - DECLARE_WRITE8_MEMBER(srumbler_bankswitch_w); - DECLARE_WRITE8_MEMBER(srumbler_foreground_w); - DECLARE_WRITE8_MEMBER(srumbler_background_w); - DECLARE_WRITE8_MEMBER(srumbler_4009_w); - DECLARE_WRITE8_MEMBER(srumbler_scroll_w); + DECLARE_WRITE8_MEMBER(bankswitch_w); + DECLARE_WRITE8_MEMBER(foreground_w); + DECLARE_WRITE8_MEMBER(background_w); + DECLARE_WRITE8_MEMBER(_4009_w); + DECLARE_WRITE8_MEMBER(scroll_w); + TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_bg_tile_info); + virtual void machine_start(); virtual void video_start(); - UINT32 screen_update_srumbler(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(srumbler_interrupt); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); + + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); }; diff --git a/src/mame/video/srumbler.c b/src/mame/video/srumbler.c index e321a620653..61fa910b92c 100644 --- a/src/mame/video/srumbler.c +++ b/src/mame/video/srumbler.c @@ -1,6 +1,6 @@ /*************************************************************************** - video.c + srumbler.c Functions to emulate the video hardware of the machine. @@ -52,6 +52,8 @@ void srumbler_state::video_start() m_bg_tilemap->set_transmask(0,0xffff,0x0000); /* split type 0 is totally transparent in front half */ m_bg_tilemap->set_transmask(1,0x07ff,0xf800); /* split type 1 has pens 0-10 transparent in front half */ + + save_item(NAME(m_scroll)); } @@ -62,20 +64,20 @@ void srumbler_state::video_start() ***************************************************************************/ -WRITE8_MEMBER(srumbler_state::srumbler_foreground_w) +WRITE8_MEMBER(srumbler_state::foreground_w) { m_foregroundram[offset] = data; m_fg_tilemap->mark_tile_dirty(offset/2); } -WRITE8_MEMBER(srumbler_state::srumbler_background_w) +WRITE8_MEMBER(srumbler_state::background_w) { m_backgroundram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset/2); } -WRITE8_MEMBER(srumbler_state::srumbler_4009_w) +WRITE8_MEMBER(srumbler_state::_4009_w) { /* bit 0 flips screen */ flip_screen_set(data & 1); @@ -88,7 +90,7 @@ WRITE8_MEMBER(srumbler_state::srumbler_4009_w) } -WRITE8_MEMBER(srumbler_state::srumbler_scroll_w) +WRITE8_MEMBER(srumbler_state::scroll_w) { m_scroll[offset] = data; @@ -151,7 +153,7 @@ void srumbler_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec } -UINT32 srumbler_state::screen_update_srumbler(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 srumbler_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1,0); draw_sprites(bitmap,cliprect); -- cgit v1.2.3