rotaryf.c, roul.c, sauro.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-04-10 19:06:23 +02:00
parent abb24174ff
commit dd7e9196e0
5 changed files with 89 additions and 59 deletions

View File

@ -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<cpu_device> m_maincpu;
required_device<samples_device> m_samples;
required_device<sn76477_device> m_sn;
required_shared_ptr<UINT8> 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<cpu_device> m_maincpu;
required_shared_ptr<UINT8> m_videoram;
required_device<samples_device> m_samples;
required_device<sn76477_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 )

View File

@ -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<cpu_device> m_maincpu;
required_device<cpu_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<cpu_device> m_maincpu;
required_device<cpu_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 )

View File

@ -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 )

View File

@ -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<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<sp0256_device> m_sp0256;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> 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<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
};

View File

@ -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)