diff options
author | 2015-05-19 18:16:31 +0200 | |
---|---|---|
committer | 2015-05-19 18:16:31 +0200 | |
commit | 001dd3c13da6ca74a01ae174ef9c95ea8d624bb8 (patch) | |
tree | baf1fbdc4e322195d986b14a4647d4428fd10eb4 | |
parent | 77d115b778c4fe2c227b0746ee3d4cf3fab77743 (diff) |
snk6502.c: added save state support (nw)
-rw-r--r-- | src/mame/audio/snk6502.c | 32 | ||||
-rw-r--r-- | src/mame/drivers/snk6502.c | 104 | ||||
-rw-r--r-- | src/mame/includes/snk6502.h | 53 | ||||
-rw-r--r-- | src/mame/video/snk6502.c | 37 |
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)); } |