From dd7e9196e053033d96ea80babc64b45b81870971 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 10 Apr 2015 19:06:23 +0200 Subject: [PATCH] rotaryf.c, roul.c, sauro.c: added save state support (nw) --- src/mame/drivers/rotaryf.c | 33 +++++++++++++++++++++---------- src/mame/drivers/roul.c | 22 ++++++++++++++------- src/mame/drivers/sauro.c | 39 ++++++++++++++++++------------------- src/mame/includes/sauro.h | 40 +++++++++++++++++++++++--------------- src/mame/video/sauro.c | 14 +++++++------ 5 files changed, 89 insertions(+), 59 deletions(-) diff --git a/src/mame/drivers/rotaryf.c b/src/mame/drivers/rotaryf.c index 9c175ad0720..f99c4b62bd8 100644 --- a/src/mame/drivers/rotaryf.c +++ b/src/mame/drivers/rotaryf.c @@ -23,21 +23,28 @@ public: rotaryf_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), - m_videoram(*this, "videoram"), m_samples(*this, "samples"), - m_sn(*this, "snsnd") + m_sn(*this, "snsnd"), + m_videoram(*this, "videoram") { } + required_device m_maincpu; + required_device m_samples; + required_device m_sn; + + required_shared_ptr m_videoram; + DECLARE_READ8_MEMBER(port29_r); DECLARE_WRITE8_MEMBER(port28_w); DECLARE_WRITE8_MEMBER(port30_w); + bool m_flipscreen; UINT8 m_last; - required_device m_maincpu; - required_shared_ptr m_videoram; - required_device m_samples; - required_device m_sn; - UINT32 screen_update_rotaryf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + virtual void machine_start(); + + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(rotaryf_interrupt); }; @@ -58,6 +65,12 @@ static const char *const rotaryf_sample_names[] = }; +void rotaryf_state::machine_start() +{ + save_item(NAME(m_flipscreen)); + save_item(NAME(m_last)); +} + READ8_MEMBER( rotaryf_state::port29_r ) { UINT8 data = ioport("INPUTS")->read(); @@ -126,7 +139,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(rotaryf_state::rotaryf_interrupt) * *************************************/ -UINT32 rotaryf_state::screen_update_rotaryf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +UINT32 rotaryf_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { offs_t offs; pen_t pens[2]; @@ -238,7 +251,7 @@ static MACHINE_CONFIG_START( rotaryf, rotaryf_state ) MCFG_SCREEN_SIZE(32*8, 262) /* vert size is a guess, taken from mw8080bw */ MCFG_SCREEN_VISIBLE_AREA(1*8, 30*8-1, 0*8, 32*8-1) MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_UPDATE_DRIVER(rotaryf_state, screen_update_rotaryf) + MCFG_SCREEN_UPDATE_DRIVER(rotaryf_state, screen_update) MCFG_SPEAKER_STANDARD_MONO("mono") @@ -276,4 +289,4 @@ ROM_START( rotaryf ) ROM_END -GAME( 1979, rotaryf, 0, rotaryf, rotaryf, driver_device, 0, ROT270, "Kasco", "Rotary Fighter", GAME_IMPERFECT_SOUND ) +GAME( 1979, rotaryf, 0, rotaryf, rotaryf, driver_device, 0, ROT270, "Kasco", "Rotary Fighter", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/roul.c b/src/mame/drivers/roul.c index 08c3b113c49..21ee92c6018 100644 --- a/src/mame/drivers/roul.c +++ b/src/mame/drivers/roul.c @@ -22,7 +22,7 @@ Has 36 pin Cherry master looking edge connector Z80 x2 Altera Ep1810LC-45 20.000 MHz crystal -video 464p10 x4 (board silcksreeend 4416) +video 464p10 x4 (board silkscreened 4416) AY-3-8912A ROM text showed SUPER LUCKY ROULETTE LEISURE ENT @@ -77,18 +77,22 @@ public: m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu") { } + required_device m_maincpu; + required_device m_soundcpu; + UINT8 m_reg[0x10]; UINT8 *m_videobuf; UINT8 m_lamp_old; + DECLARE_READ8_MEMBER(blitter_status_r); DECLARE_WRITE8_MEMBER(blitter_cmd_w); DECLARE_WRITE8_MEMBER(sound_latch_w); DECLARE_WRITE8_MEMBER(ball_w); + virtual void video_start(); DECLARE_PALETTE_INIT(roul); - UINT32 screen_update_roul(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; - required_device m_soundcpu; + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); }; @@ -219,9 +223,13 @@ ADDRESS_MAP_END void roul_state::video_start() { m_videobuf = auto_alloc_array_clear(machine(), UINT8, VIDEOBUF_SIZE); + + save_item(NAME(m_reg)); + save_pointer(NAME(m_videobuf), VIDEOBUF_SIZE); + save_item(NAME(m_lamp_old)); } -UINT32 roul_state::screen_update_roul(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 roul_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int i,j; for (i = 0; i < 256; i++) @@ -300,7 +308,7 @@ static MACHINE_CONFIG_START( roul, roul_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, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(roul_state, screen_update_roul) + MCFG_SCREEN_UPDATE_DRIVER(roul_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 0x100) @@ -324,4 +332,4 @@ ROM_START(roul) ROM_LOAD( "roul.u38", 0x0020, 0x0020, CRC(23ae22c1) SHA1(bf0383462976ec6341ffa8a173264ce820bc654a) ) ROM_END -GAMEL( 1990, roul, 0, roul, roul, driver_device, 0, ROT0, "bootleg", "Super Lucky Roulette", GAME_IMPERFECT_GRAPHICS, layout_roul ) +GAMEL( 1990, roul, 0, roul, roul, driver_device, 0, ROT0, "bootleg", "Super Lucky Roulette", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE, layout_roul ) diff --git a/src/mame/drivers/sauro.c b/src/mame/drivers/sauro.c index 97173680418..a3c0a2135fb 100644 --- a/src/mame/drivers/sauro.c +++ b/src/mame/drivers/sauro.c @@ -123,7 +123,6 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "emu.h" #include "cpu/z80/z80.h" #include "sound/3812intf.h" -#include "sound/sp0256.h" #include "includes/sauro.h" #include "machine/nvram.h" @@ -141,13 +140,13 @@ READ8_MEMBER(sauro_state::sauro_sound_command_r) return ret; } -WRITE8_MEMBER(sauro_state::sauro_coin1_w) +WRITE8_MEMBER(sauro_state::coin1_w) { coin_counter_w(machine(), 0, data); coin_counter_w(machine(), 0, 0); // to get the coin counter working in sauro, as it doesn't write 0 } -WRITE8_MEMBER(sauro_state::sauro_coin2_w) +WRITE8_MEMBER(sauro_state::coin2_w) { coin_counter_w(machine(), 1, data); coin_counter_w(machine(), 1, 0); // to get the coin counter working in sauro, as it doesn't write 0 @@ -167,10 +166,10 @@ static ADDRESS_MAP_START( sauro_map, AS_PROGRAM, 8, sauro_state ) AM_RANGE(0x0000, 0xdfff) AM_ROM AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0xe800, 0xebff) AM_RAM AM_SHARE("spriteram") - AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(tecfri_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(tecfri_colorram_w) AM_SHARE("colorram") - AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE(tecfri_videoram2_w) AM_SHARE("videoram2") - AM_RANGE(0xfc00, 0xffff) AM_RAM_WRITE(tecfri_colorram2_w) AM_SHARE("colorram2") + AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") + AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") + AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE(sauro_videoram2_w) AM_SHARE("videoram2") + AM_RANGE(0xfc00, 0xffff) AM_RAM_WRITE(sauro_colorram2_w) AM_SHARE("colorram2") ADDRESS_MAP_END static ADDRESS_MAP_START( sauro_io_map, AS_IO, 8, sauro_state ) @@ -180,13 +179,13 @@ static ADDRESS_MAP_START( sauro_io_map, AS_IO, 8, sauro_state ) AM_RANGE(0x40, 0x40) AM_READ_PORT("P1") AM_RANGE(0x60, 0x60) AM_READ_PORT("P2") AM_RANGE(0x80, 0x80) AM_WRITE(sauro_sound_command_w) - AM_RANGE(0xa0, 0xa0) AM_WRITE(tecfri_scroll_bg_w) + AM_RANGE(0xa0, 0xa0) AM_WRITE(scroll_bg_w) AM_RANGE(0xa1, 0xa1) AM_WRITE(sauro_scroll_fg_w) AM_RANGE(0xc0, 0xc0) AM_WRITE(flip_screen_w) AM_RANGE(0xc2, 0xc2) AM_WRITENOP /* coin reset */ - AM_RANGE(0xc3, 0xc3) AM_WRITE(sauro_coin1_w) + AM_RANGE(0xc3, 0xc3) AM_WRITE(coin1_w) AM_RANGE(0xc4, 0xc4) AM_WRITENOP /* coin reset */ - AM_RANGE(0xc5, 0xc5) AM_WRITE(sauro_coin2_w) + AM_RANGE(0xc5, 0xc5) AM_WRITE(coin2_w) AM_RANGE(0xc6, 0xc7) AM_WRITENOP /* same as 0x80 - verified with debugger */ AM_RANGE(0xc8, 0xc8) AM_WRITENOP /* written every int: 0 written at end of isr */ AM_RANGE(0xc9, 0xc9) AM_WRITENOP /* written every int: 1 written at start of isr */ @@ -213,19 +212,19 @@ static ADDRESS_MAP_START( trckydoc_map, AS_PROGRAM, 8, sauro_state ) AM_RANGE(0x0000, 0xdfff) AM_ROM AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0xe800, 0xebff) AM_RAM AM_MIRROR(0x400) AM_SHARE("spriteram") - AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(tecfri_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(tecfri_colorram_w) AM_SHARE("colorram") + AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") + AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram") AM_RANGE(0xf800, 0xf800) AM_READ_PORT("DSW1") AM_RANGE(0xf808, 0xf808) AM_READ_PORT("DSW2") AM_RANGE(0xf810, 0xf810) AM_READ_PORT("P1") AM_RANGE(0xf818, 0xf818) AM_READ_PORT("P2") AM_RANGE(0xf820, 0xf821) AM_DEVWRITE("ymsnd", ym3812_device, write) AM_RANGE(0xf828, 0xf828) AM_READ(watchdog_reset_r) - AM_RANGE(0xf830, 0xf830) AM_WRITE(tecfri_scroll_bg_w) + AM_RANGE(0xf830, 0xf830) AM_WRITE(scroll_bg_w) AM_RANGE(0xf838, 0xf838) AM_WRITENOP /* only written at startup */ AM_RANGE(0xf839, 0xf839) AM_WRITE(flip_screen_w) - AM_RANGE(0xf83a, 0xf83a) AM_WRITE(sauro_coin1_w) - AM_RANGE(0xf83b, 0xf83b) AM_WRITE(sauro_coin2_w) + AM_RANGE(0xf83a, 0xf83a) AM_WRITE(coin1_w) + AM_RANGE(0xf83b, 0xf83b) AM_WRITE(coin2_w) AM_RANGE(0xf83c, 0xf83c) AM_WRITE(watchdog_reset_w) AM_RANGE(0xf83f, 0xf83f) AM_WRITENOP /* only written at startup */ ADDRESS_MAP_END @@ -583,9 +582,9 @@ DRIVER_INIT_MEMBER(sauro_state,tecfri) RAM[0xe000] = 1; } -GAME( 1987, sauro, 0, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri", "Sauro", 0 ) -GAME( 1987, saurop, sauro, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri (Philko license)", "Sauro (Philko license)", 0 ) -GAME( 1987, saurorr, sauro, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri (Recreativos Real S.A. license)","Sauro (Recreativos Real S.A. license)", 0 ) +GAME( 1987, sauro, 0, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri", "Sauro", GAME_SUPPORTS_SAVE ) +GAME( 1987, saurop, sauro, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri (Philko license)", "Sauro (Philko license)", GAME_SUPPORTS_SAVE ) +GAME( 1987, saurorr, sauro, sauro, tecfri, sauro_state, tecfri, ROT0, "Tecfri (Recreativos Real S.A. license)","Sauro (Recreativos Real S.A. license)", GAME_SUPPORTS_SAVE ) -GAME( 1987, trckydoc, 0, trckydoc, tecfri, sauro_state, tecfri, ROT0, "Tecfri", "Tricky Doc (set 1)", 0 ) -GAME( 1987, trckydoca,trckydoc, trckydoc, trckydoca, sauro_state, tecfri, ROT0, "Tecfri", "Tricky Doc (set 2)", 0 ) +GAME( 1987, trckydoc, 0, trckydoc, tecfri, sauro_state, tecfri, ROT0, "Tecfri", "Tricky Doc (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1987, trckydoca,trckydoc, trckydoc, trckydoca, sauro_state, tecfri, ROT0, "Tecfri", "Tricky Doc (set 2)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/sauro.h b/src/mame/includes/sauro.h index 75af7ed4df2..c6db7998ae3 100644 --- a/src/mame/includes/sauro.h +++ b/src/mame/includes/sauro.h @@ -7,17 +7,21 @@ class sauro_state : public driver_device public: sauro_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), m_sp0256(*this, "speech"), m_spriteram(*this, "spriteram"), m_videoram(*this, "videoram"), m_colorram(*this, "colorram"), m_videoram2(*this, "videoram2"), - m_colorram2(*this, "colorram2"), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_colorram2(*this, "colorram2") { } + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; optional_device m_sp0256; + required_shared_ptr m_spriteram; required_shared_ptr m_videoram; required_shared_ptr m_colorram; @@ -27,29 +31,33 @@ public: tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; UINT8 m_palette_bank; + + // common + DECLARE_WRITE8_MEMBER(coin1_w); + DECLARE_WRITE8_MEMBER(coin2_w); + DECLARE_WRITE8_MEMBER(flip_screen_w); + DECLARE_WRITE8_MEMBER(videoram_w); + DECLARE_WRITE8_MEMBER(colorram_w); + DECLARE_WRITE8_MEMBER(scroll_bg_w); + + // sauro specific DECLARE_WRITE8_MEMBER(sauro_sound_command_w); DECLARE_READ8_MEMBER(sauro_sound_command_r); - DECLARE_WRITE8_MEMBER(sauro_coin1_w); - DECLARE_WRITE8_MEMBER(sauro_coin2_w); - DECLARE_WRITE8_MEMBER(flip_screen_w); - DECLARE_WRITE8_MEMBER(tecfri_videoram_w); - DECLARE_WRITE8_MEMBER(tecfri_colorram_w); - DECLARE_WRITE8_MEMBER(tecfri_videoram2_w); - DECLARE_WRITE8_MEMBER(tecfri_colorram2_w); - DECLARE_WRITE8_MEMBER(tecfri_scroll_bg_w); DECLARE_WRITE8_MEMBER(sauro_palette_bank_w); DECLARE_WRITE8_MEMBER(sauro_scroll_fg_w); + DECLARE_WRITE8_MEMBER(sauro_videoram2_w); + DECLARE_WRITE8_MEMBER(sauro_colorram2_w); DECLARE_WRITE8_MEMBER(adpcm_w); - DECLARE_DRIVER_INIT(tecfri); + TILE_GET_INFO_MEMBER(get_tile_info_bg); TILE_GET_INFO_MEMBER(get_tile_info_fg); + + DECLARE_DRIVER_INIT(tecfri); DECLARE_VIDEO_START(trckydoc); DECLARE_VIDEO_START(sauro); + UINT32 screen_update_trckydoc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_sauro(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void sauro_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void trckydoc_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; }; diff --git a/src/mame/video/sauro.c b/src/mame/video/sauro.c index 2a484a41657..a0951820837 100644 --- a/src/mame/video/sauro.c +++ b/src/mame/video/sauro.c @@ -1,6 +1,6 @@ /*************************************************************************** - video.c + sauro.c Functions to emulate the video hardware of the machine. @@ -11,31 +11,31 @@ /* General */ -WRITE8_MEMBER(sauro_state::tecfri_videoram_w) +WRITE8_MEMBER(sauro_state::videoram_w) { m_videoram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(sauro_state::tecfri_colorram_w) +WRITE8_MEMBER(sauro_state::colorram_w) { m_colorram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(sauro_state::tecfri_videoram2_w) +WRITE8_MEMBER(sauro_state::sauro_videoram2_w) { m_videoram2[offset] = data; m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(sauro_state::tecfri_colorram2_w) +WRITE8_MEMBER(sauro_state::sauro_colorram2_w) { m_colorram2[offset] = data; m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(sauro_state::tecfri_scroll_bg_w) +WRITE8_MEMBER(sauro_state::scroll_bg_w) { m_bg_tilemap->set_scrollx(0, data); } @@ -87,6 +87,8 @@ VIDEO_START_MEMBER(sauro_state,sauro) m_fg_tilemap->set_transparent_pen(0); m_palette_bank = 0; + + save_item(NAME(m_palette_bank)); } void sauro_state::sauro_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)