summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-05-19 18:16:31 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2015-05-19 18:16:31 +0200
commit001dd3c13da6ca74a01ae174ef9c95ea8d624bb8 (patch)
treebaf1fbdc4e322195d986b14a4647d4428fd10eb4
parent77d115b778c4fe2c227b0746ee3d4cf3fab77743 (diff)
snk6502.c: added save state support (nw)
-rw-r--r--src/mame/audio/snk6502.c32
-rw-r--r--src/mame/drivers/snk6502.c104
-rw-r--r--src/mame/includes/snk6502.h53
-rw-r--r--src/mame/video/snk6502.c37
4 files changed, 126 insertions, 100 deletions
diff --git a/src/mame/audio/snk6502.c b/src/mame/audio/snk6502.c
index bf305a217c0..c79f3d5018a 100644
--- a/src/mame/audio/snk6502.c
+++ b/src/mame/audio/snk6502.c
@@ -148,15 +148,6 @@ snk6502_sound_device::snk6502_sound_device(const machine_config &mconfig, const
{
}
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void snk6502_sound_device::device_config_complete()
-{
-}
//-------------------------------------------------
// device_start - device-specific startup
@@ -173,12 +164,29 @@ void snk6502_sound_device::device_start()
set_music_clock(M_LN2 * (RES_K(18) * 2 + RES_K(1)) * CAP_U(1));
m_tone_stream = machine().sound().stream_alloc(*this, 0, 1, SAMPLE_RATE);
+
+ for (int i = 0; i < CHANNELS; i++)
+ {
+ save_item(NAME(m_tone_channels[i].mute), i);
+ save_item(NAME(m_tone_channels[i].offset), i);
+ save_item(NAME(m_tone_channels[i].base), i);
+ save_item(NAME(m_tone_channels[i].mask), i);
+ save_item(NAME(m_tone_channels[i].sample_step), i);
+ save_item(NAME(m_tone_channels[i].sample_cur), i);
+ save_item(NAME(m_tone_channels[i].form), i);
+ }
+
+ save_item(NAME(m_tone_clock));
+ save_item(NAME(m_Sound0StopOnRollover));
+ save_item(NAME(m_LastPort1));
+ save_item(NAME(m_hd38880_cmd));
+ save_item(NAME(m_hd38880_addr));
+ save_item(NAME(m_hd38880_data_bytes));
+ save_item(NAME(m_hd38880_speed));
}
inline void snk6502_sound_device::validate_tone_channel(int channel)
{
- //TONE *tone_channels = m_tone_channels;
-
if (!m_tone_channels[channel].mute)
{
UINT8 romdata = m_ROM[m_tone_channels[channel].base + m_tone_channels[channel].offset];
@@ -704,7 +712,7 @@ WRITE8_MEMBER( snk6502_sound_device::fantasy_sound_w )
m_tone_channels[2].base = 0x1000 + ((data & 0x70) << 4);
m_tone_channels[2].mask = 0xff;
snk6502_state *drvstate = space.machine().driver_data<snk6502_state>();
- drvstate->snk6502_flipscreen_w(space, 0, data);
+ drvstate->flipscreen_w(space, 0, data);
break;
}
}
diff --git a/src/mame/drivers/snk6502.c b/src/mame/drivers/snk6502.c
index 39c9e6e1442..e93980ffcf6 100644
--- a/src/mame/drivers/snk6502.c
+++ b/src/mame/drivers/snk6502.c
@@ -298,6 +298,16 @@ Stephh's notes (based on the games M6502 code and some tests) :
#endif
+void snk6502_state::machine_start()
+{
+ // these could be split in different MACHINE_STARTs to save only
+ // what's actually needed, but is the extra complexity really worth it?
+ save_item(NAME(m_sasuke_counter)); // sasuke only
+ save_item(NAME(m_charbank));
+ save_item(NAME(m_backcolor));
+ save_item(NAME(m_irq_mask)); // satansat only
+}
+
/* binary counter (1.4MHz update) */
TIMER_DEVICE_CALLBACK_MEMBER(snk6502_state::sasuke_update_counter)
{
@@ -335,10 +345,10 @@ CUSTOM_INPUT_MEMBER(snk6502_state::sasuke_count_r)
static ADDRESS_MAP_START( sasuke_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(snk6502_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(snk6502_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(snk6502_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(snk6502_charram_w) AM_SHARE("charram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x3001, 0x3001) AM_DEVWRITE("crtc", mc6845_device, register_w)
AM_RANGE(0x4000, 0x8fff) AM_ROM
@@ -354,10 +364,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( satansat_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(snk6502_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(snk6502_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(snk6502_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(snk6502_charram_w) AM_SHARE("charram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x3001, 0x3001) AM_DEVWRITE("crtc", mc6845_device, register_w)
AM_RANGE(0x4000, 0x9fff) AM_ROM
@@ -373,20 +383,20 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( vanguard_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(snk6502_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(snk6502_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(snk6502_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(snk6502_charram_w) AM_SHARE("charram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x3000, 0x3000) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x3001, 0x3001) AM_DEVWRITE("crtc", mc6845_device, register_w)
AM_RANGE(0x3100, 0x3102) AM_DEVWRITE("snk6502", snk6502_sound_device, vanguard_sound_w)
- AM_RANGE(0x3103, 0x3103) AM_WRITE(snk6502_flipscreen_w)
+ AM_RANGE(0x3103, 0x3103) AM_WRITE(flipscreen_w)
AM_RANGE(0x3104, 0x3104) AM_READ_PORT("IN0")
AM_RANGE(0x3105, 0x3105) AM_READ_PORT("IN1")
AM_RANGE(0x3106, 0x3106) AM_READ_PORT("DSW")
AM_RANGE(0x3107, 0x3107) AM_READ_PORT("IN2")
- AM_RANGE(0x3200, 0x3200) AM_WRITE(snk6502_scrollx_w)
- AM_RANGE(0x3300, 0x3300) AM_WRITE(snk6502_scrolly_w)
+ AM_RANGE(0x3200, 0x3200) AM_WRITE(scrollx_w)
+ AM_RANGE(0x3300, 0x3300) AM_WRITE(scrolly_w)
AM_RANGE(0x3400, 0x3400) AM_DEVWRITE("snk6502", snk6502_sound_device, vanguard_speech_w) // speech
AM_RANGE(0x4000, 0xbfff) AM_ROM
AM_RANGE(0xf000, 0xffff) AM_ROM /* for the reset / interrupt vectors */
@@ -394,10 +404,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( fantasy_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(snk6502_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(snk6502_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(snk6502_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(snk6502_charram_w) AM_SHARE("charram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x2001, 0x2001) AM_DEVWRITE("crtc", mc6845_device, register_w)
AM_RANGE(0x2100, 0x2103) AM_DEVWRITE("snk6502", snk6502_sound_device, fantasy_sound_w)
@@ -405,8 +415,8 @@ static ADDRESS_MAP_START( fantasy_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x2105, 0x2105) AM_READ_PORT("IN1")
AM_RANGE(0x2106, 0x2106) AM_READ_PORT("DSW")
AM_RANGE(0x2107, 0x2107) AM_READ_PORT("IN2")
- AM_RANGE(0x2200, 0x2200) AM_WRITE(snk6502_scrollx_w)
- AM_RANGE(0x2300, 0x2300) AM_WRITE(snk6502_scrolly_w)
+ AM_RANGE(0x2200, 0x2200) AM_WRITE(scrollx_w)
+ AM_RANGE(0x2300, 0x2300) AM_WRITE(scrolly_w)
AM_RANGE(0x2400, 0x2400) AM_DEVWRITE("snk6502", snk6502_sound_device, fantasy_speech_w) // speech
AM_RANGE(0x3000, 0xbfff) AM_ROM
AM_RANGE(0xf000, 0xffff) AM_ROM
@@ -414,10 +424,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( pballoon_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(snk6502_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(snk6502_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(snk6502_colorram_w) AM_SHARE("colorram")
- AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(snk6502_charram_w) AM_SHARE("charram")
+ AM_RANGE(0x0400, 0x07ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x0800, 0x0bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x0c00, 0x0fff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(charram_w) AM_SHARE("charram")
AM_RANGE(0x3000, 0x9fff) AM_ROM
AM_RANGE(0xb000, 0xb000) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0xb001, 0xb001) AM_DEVWRITE("crtc", mc6845_device, register_w)
@@ -426,8 +436,8 @@ static ADDRESS_MAP_START( pballoon_map, AS_PROGRAM, 8, snk6502_state )
AM_RANGE(0xb105, 0xb105) AM_READ_PORT("IN1")
AM_RANGE(0xb106, 0xb106) AM_READ_PORT("DSW")
AM_RANGE(0xb107, 0xb107) AM_READ_PORT("IN2")
- AM_RANGE(0xb200, 0xb200) AM_WRITE(snk6502_scrollx_w)
- AM_RANGE(0xb300, 0xb300) AM_WRITE(snk6502_scrolly_w)
+ AM_RANGE(0xb200, 0xb200) AM_WRITE(scrollx_w)
+ AM_RANGE(0xb300, 0xb300) AM_WRITE(scrolly_w)
AM_RANGE(0xf000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -808,7 +818,7 @@ static MACHINE_CONFIG_START( sasuke, snk6502_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, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(snk6502_state, screen_update_snk6502)
+ MCFG_SCREEN_UPDATE_DRIVER(snk6502_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sasuke)
@@ -941,7 +951,7 @@ static MACHINE_CONFIG_START( vanguard, snk6502_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, 28*8-1)
- MCFG_SCREEN_UPDATE_DRIVER(snk6502_state, screen_update_snk6502)
+ MCFG_SCREEN_UPDATE_DRIVER(snk6502_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", vanguard)
@@ -1577,21 +1587,21 @@ ROM_END
*
*************************************/
-GAME( 1980, sasuke, 0, sasuke, sasuke, driver_device, 0, ROT90, "SNK", "Sasuke vs. Commander", GAME_IMPERFECT_SOUND )
-GAME( 1981, satansat, 0, satansat, satansat, driver_device, 0, ROT90, "SNK", "Satan of Saturn (set 1)", GAME_IMPERFECT_SOUND )
-GAME( 1981, satansata,satansat, satansat, satansat, driver_device, 0, ROT90, "SNK", "Satan of Saturn (set 2)", GAME_IMPERFECT_SOUND )
-GAME( 1981, zarzon, satansat, satansat, satansat, driver_device, 0, ROT90, "SNK (Taito America license)", "Zarzon", GAME_IMPERFECT_SOUND )
-GAME( 1981, satansatind,satansat,satansat,satansat, driver_device, 0, ROT90, "bootleg (Inder S.A.)", "Satan of Saturn (Inder S.A., bootleg)", GAME_IMPERFECT_SOUND )
-GAME( 1981, vanguard, 0, vanguard, vanguard, driver_device, 0, ROT90, "SNK", "Vanguard (SNK)", GAME_IMPERFECT_SOUND )
-GAME( 1981, vanguardc,vanguard, vanguard, vanguard, driver_device, 0, ROT90, "SNK (Centuri license)", "Vanguard (Centuri)", GAME_IMPERFECT_SOUND )
-GAME( 1981, vanguardj,vanguard, vanguard, vanguard, driver_device, 0, ROT90, "SNK", "Vanguard (Japan)", GAME_IMPERFECT_SOUND )
-GAME( 1981, fantasy, 0, fantasy, fantasy, driver_device, 0, ROT90, "SNK", "Fantasy (World)", GAME_IMPERFECT_SOUND )
-GAME( 1981, fantasyu, fantasy, fantasy, fantasyu, driver_device, 0, ROT90, "SNK (Rock-Ola license)", "Fantasy (US)", GAME_IMPERFECT_SOUND )
-GAME( 1981, fantasyj, fantasy, fantasy, fantasyu, driver_device, 0, ROT90, "SNK", "Fantasy (Japan)", GAME_IMPERFECT_SOUND )
-GAME( 1982, pballoon, 0, pballoon, pballoon, driver_device, 0, ROT90, "SNK", "Pioneer Balloon", 0 )
-GAME( 1982, pballoonr,pballoon, pballoon, pballoon, driver_device, 0, ROT90, "SNK (Rock-Ola license)", "Pioneer Balloon (Rock-Ola license)", 0 )
-GAME( 1982, nibbler, 0, nibbler, nibbler, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 9)", 0 )
-GAME( 1982, nibbler8, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 8)", 0 )
-GAME( 1982, nibbler6, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 6)", 0 )
-GAME( 1982, nibblerp, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (Pioneer Balloon conversion)", 0 )
-GAME( 1983, nibblero, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola (Olympia license)", "Nibbler (Olympia - rev 8)", 0 )
+GAME( 1980, sasuke, 0, sasuke, sasuke, driver_device, 0, ROT90, "SNK", "Sasuke vs. Commander", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, satansat, 0, satansat, satansat, driver_device, 0, ROT90, "SNK", "Satan of Saturn (set 1)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, satansata,satansat, satansat, satansat, driver_device, 0, ROT90, "SNK", "Satan of Saturn (set 2)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, zarzon, satansat, satansat, satansat, driver_device, 0, ROT90, "SNK (Taito America license)", "Zarzon", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, satansatind,satansat,satansat,satansat, driver_device, 0, ROT90, "bootleg (Inder S.A.)", "Satan of Saturn (Inder S.A., bootleg)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, vanguard, 0, vanguard, vanguard, driver_device, 0, ROT90, "SNK", "Vanguard (SNK)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, vanguardc,vanguard, vanguard, vanguard, driver_device, 0, ROT90, "SNK (Centuri license)", "Vanguard (Centuri)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, vanguardj,vanguard, vanguard, vanguard, driver_device, 0, ROT90, "SNK", "Vanguard (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, fantasy, 0, fantasy, fantasy, driver_device, 0, ROT90, "SNK", "Fantasy (World)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, fantasyu, fantasy, fantasy, fantasyu, driver_device, 0, ROT90, "SNK (Rock-Ola license)", "Fantasy (US)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1981, fantasyj, fantasy, fantasy, fantasyu, driver_device, 0, ROT90, "SNK", "Fantasy (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
+GAME( 1982, pballoon, 0, pballoon, pballoon, driver_device, 0, ROT90, "SNK", "Pioneer Balloon", GAME_SUPPORTS_SAVE )
+GAME( 1982, pballoonr,pballoon, pballoon, pballoon, driver_device, 0, ROT90, "SNK (Rock-Ola license)", "Pioneer Balloon (Rock-Ola license)", GAME_SUPPORTS_SAVE )
+GAME( 1982, nibbler, 0, nibbler, nibbler, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 9)", GAME_SUPPORTS_SAVE )
+GAME( 1982, nibbler8, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 8)", GAME_SUPPORTS_SAVE )
+GAME( 1982, nibbler6, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (rev 6)", GAME_SUPPORTS_SAVE )
+GAME( 1982, nibblerp, nibbler, nibbler, nibbler6, driver_device, 0, ROT90, "Rock-Ola", "Nibbler (Pioneer Balloon conversion)", GAME_SUPPORTS_SAVE )
+GAME( 1983, nibblero, nibbler, nibbler, nibbler8, driver_device, 0, ROT90, "Rock-Ola (Olympia license)", "Nibbler (Olympia - rev 8)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/snk6502.h b/src/mame/includes/snk6502.h
index 85405815a10..7339a46b1c0 100644
--- a/src/mame/includes/snk6502.h
+++ b/src/mame/includes/snk6502.h
@@ -17,51 +17,55 @@ class snk6502_state : public driver_device
public:
snk6502_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram2(*this, "videoram2"),
- m_videoram(*this, "videoram"),
- m_colorram(*this, "colorram"),
- m_charram(*this, "charram"),
m_maincpu(*this, "maincpu"),
m_sound(*this, "snk6502"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- UINT8 m_sasuke_counter;
-
- required_shared_ptr<UINT8> m_videoram2;
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_colorram;
- required_shared_ptr<UINT8> m_charram;
+ m_palette(*this, "palette"),
+ m_videoram(*this, "videoram"),
+ m_videoram2(*this, "videoram2"),
+ m_colorram(*this, "colorram"),
+ m_charram(*this, "charram") { }
required_device<cpu_device> m_maincpu;
required_device<snk6502_sound_device> m_sound;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_shared_ptr<UINT8> m_videoram;
+ required_shared_ptr<UINT8> m_videoram2;
+ required_shared_ptr<UINT8> m_colorram;
+ required_shared_ptr<UINT8> m_charram;
+
+ UINT8 m_sasuke_counter;
int m_charbank;
int m_backcolor;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
-
rgb_t m_palette_val[64];
-
UINT8 m_irq_mask;
- DECLARE_WRITE8_MEMBER(snk6502_videoram_w);
- DECLARE_WRITE8_MEMBER(snk6502_videoram2_w);
- DECLARE_WRITE8_MEMBER(snk6502_colorram_w);
- DECLARE_WRITE8_MEMBER(snk6502_charram_w);
- DECLARE_WRITE8_MEMBER(snk6502_flipscreen_w);
- DECLARE_WRITE8_MEMBER(snk6502_scrollx_w);
- DECLARE_WRITE8_MEMBER(snk6502_scrolly_w);
+
+ // common
+ DECLARE_WRITE8_MEMBER(videoram_w);
+ DECLARE_WRITE8_MEMBER(videoram2_w);
+ DECLARE_WRITE8_MEMBER(colorram_w);
+ DECLARE_WRITE8_MEMBER(charram_w);
+
+ DECLARE_WRITE8_MEMBER(scrollx_w);
+ DECLARE_WRITE8_MEMBER(scrolly_w);
+ DECLARE_WRITE8_MEMBER(flipscreen_w);
DECLARE_WRITE8_MEMBER(satansat_b002_w);
DECLARE_WRITE8_MEMBER(satansat_backcolor_w);
+
DECLARE_CUSTOM_INPUT_MEMBER(snk6502_music0_r);
DECLARE_CUSTOM_INPUT_MEMBER(sasuke_count_r);
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
+
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
TILE_GET_INFO_MEMBER(satansat_get_bg_tile_info);
TILE_GET_INFO_MEMBER(satansat_get_fg_tile_info);
+
+ virtual void machine_start();
DECLARE_MACHINE_RESET(sasuke);
DECLARE_VIDEO_START(satansat);
DECLARE_PALETTE_INIT(satansat);
@@ -71,11 +75,15 @@ public:
DECLARE_MACHINE_RESET(satansat);
DECLARE_MACHINE_RESET(pballoon);
DECLARE_VIDEO_START(pballoon);
- UINT32 screen_update_snk6502(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
INTERRUPT_GEN_MEMBER(satansat_interrupt);
INTERRUPT_GEN_MEMBER(snk6502_interrupt);
TIMER_DEVICE_CALLBACK_MEMBER(sasuke_update_counter);
+
void sasuke_start_counter();
+ void postload();
};
@@ -115,7 +123,6 @@ public:
protected:
// device-level overrides
- virtual void device_config_complete();
virtual void device_start();
// sound stream update overrides
diff --git a/src/mame/video/snk6502.c b/src/mame/video/snk6502.c
index ddf639fff0a..951efaeea88 100644
--- a/src/mame/video/snk6502.c
+++ b/src/mame/video/snk6502.c
@@ -2,7 +2,7 @@
// copyright-holders:???
/***************************************************************************
- video.c
+ snk6502.c
Functions to emulate the video hardware of the machine.
@@ -76,26 +76,26 @@ PALETTE_INIT_MEMBER(snk6502_state,snk6502)
}
}
-WRITE8_MEMBER(snk6502_state::snk6502_videoram_w)
+WRITE8_MEMBER(snk6502_state::videoram_w)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(snk6502_state::snk6502_videoram2_w)
+WRITE8_MEMBER(snk6502_state::videoram2_w)
{
m_videoram2[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(snk6502_state::snk6502_colorram_w)
+WRITE8_MEMBER(snk6502_state::colorram_w)
{
m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(snk6502_state::snk6502_charram_w)
+WRITE8_MEMBER(snk6502_state::charram_w)
{
if (m_charram[offset] != data)
{
@@ -105,25 +105,21 @@ WRITE8_MEMBER(snk6502_state::snk6502_charram_w)
}
-WRITE8_MEMBER(snk6502_state::snk6502_flipscreen_w)
+WRITE8_MEMBER(snk6502_state::flipscreen_w)
{
- int bank;
-
/* bits 0-2 select background color */
if (m_backcolor != (data & 7))
{
- int i;
-
m_backcolor = data & 7;
- for (i = 0;i < 32;i += 4)
+ for (int i = 0;i < 32;i += 4)
m_palette->set_pen_color(COLOR(1, i), m_palette_val[4 * m_backcolor + 0x20]);
}
/* bit 3 selects char bank */
- bank = (~data & 0x08) >> 3;
+ int bank = (~data & 0x08) >> 3;
if (m_charbank != bank)
{
@@ -140,12 +136,12 @@ WRITE8_MEMBER(snk6502_state::snk6502_flipscreen_w)
}
}
-WRITE8_MEMBER(snk6502_state::snk6502_scrollx_w)
+WRITE8_MEMBER(snk6502_state::scrollx_w)
{
m_bg_tilemap->set_scrollx(0, data);
}
-WRITE8_MEMBER(snk6502_state::snk6502_scrolly_w)
+WRITE8_MEMBER(snk6502_state::scrolly_w)
{
m_bg_tilemap->set_scrolly(0, data);
}
@@ -175,6 +171,12 @@ VIDEO_START_MEMBER(snk6502_state,snk6502)
m_fg_tilemap->set_transparent_pen(0);
m_gfxdecode->gfx(0)->set_source(m_charram);
+ machine().save().register_postload(save_prepost_delegate(FUNC(snk6502_state::postload), this));
+}
+
+void snk6502_state::postload()
+{
+ m_gfxdecode->gfx(0)->mark_all_dirty();
}
VIDEO_START_MEMBER(snk6502_state,pballoon)
@@ -186,7 +188,7 @@ VIDEO_START_MEMBER(snk6502_state,pballoon)
}
-UINT32 snk6502_state::screen_update_snk6502(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 snk6502_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@@ -269,11 +271,9 @@ WRITE8_MEMBER(snk6502_state::satansat_backcolor_w)
if (m_backcolor != (data & 0x03))
{
- int i;
-
m_backcolor = data & 0x03;
- for (i = 0; i < 16; i += 4)
+ for (int i = 0; i < 16; i += 4)
m_palette->set_pen_color(COLOR(1, i), m_palette_val[m_backcolor + 0x10]);
}
}
@@ -302,4 +302,5 @@ VIDEO_START_MEMBER(snk6502_state,satansat)
m_fg_tilemap->set_transparent_pen(0);
m_gfxdecode->gfx(0)->set_source(m_charram);
+ machine().save().register_postload(save_prepost_delegate(FUNC(snk6502_state::postload), this));
}