diff options
author | Ivan Vangelista <mesgnet@yahoo.it> | 2015-02-01 09:07:26 +0100 |
---|---|---|
committer | Ivan Vangelista <mesgnet@yahoo.it> | 2015-02-01 09:07:26 +0100 |
commit | 09b6ec9869349cf9befd8c3589f1dccb32bacd1a (patch) | |
tree | 7a4e22a3a6a2b2dddf12e93a7c01826791a51a48 | |
parent | 31bc7f4bbb8f805e1f05623d9d8d784750de92ad (diff) |
fastfred.c: added save state support to all games except imago and imagoa (nw)
These 2 games use the galaxold starfield functions and therefore suffer from the same underlying save problem. Up to now I've not been able to identify the cause.
-rw-r--r-- | src/mame/drivers/fastfred.c | 25 | ||||
-rw-r--r-- | src/mame/includes/fastfred.h | 57 | ||||
-rw-r--r-- | src/mame/video/fastfred.c | 18 |
3 files changed, 67 insertions, 33 deletions
diff --git a/src/mame/drivers/fastfred.c b/src/mame/drivers/fastfred.c index dd8bd56dc0a..f42185acea5 100644 --- a/src/mame/drivers/fastfred.c +++ b/src/mame/drivers/fastfred.c @@ -14,6 +14,14 @@ #include "sound/ay8910.h" +void fastfred_state::machine_start() +{ + save_item(NAME(m_charbank)); + save_item(NAME(m_colorbank)); + save_item(NAME(m_nmi_mask)); + save_item(NAME(m_sound_nmi_mask)); +} + // This routine is a big hack, but the only way I can get the game working // without knowing anything about the way the protection chip works. // These values were derived based on disassembly of the code. Usually, it @@ -124,6 +132,7 @@ READ8_MEMBER(fastfred_state::boggy84_custom_io_r) MACHINE_START_MEMBER(fastfred_state,imago) { + machine_start(); m_gfxdecode->gfx(1)->set_source(m_imago_sprites); } @@ -1039,13 +1048,13 @@ DRIVER_INIT_MEMBER(fastfred_state,imago) m_hardware_type = 3; } -GAME( 1982, flyboy, 0, fastfred, flyboy, fastfred_state, flyboy, ROT90, "Kaneko", "Fly-Boy", 0 ) -GAME( 1982, flyboyb, flyboy, fastfred, flyboy, fastfred_state, flyboyb, ROT90, "bootleg", "Fly-Boy (bootleg)", 0 ) -GAME( 1982, fastfred, flyboy, fastfred, fastfred, fastfred_state, fastfred, ROT90, "Kaneko (Atari license)", "Fast Freddie", 0 ) -GAME( 1983, jumpcoas, 0, jumpcoas, jumpcoas, fastfred_state, jumpcoas, ROT90, "Kaneko", "Jump Coaster", 0 ) -GAME( 1983, jumpcoast,jumpcoas, jumpcoas, jumpcoas, fastfred_state, jumpcoas, ROT90, "Kaneko (Taito license)", "Jump Coaster (Taito)", 0 ) -GAME( 1983, boggy84, 0, jumpcoas, boggy84, fastfred_state, boggy84, ROT90, "Kaneko", "Boggy '84", 0 ) -GAME( 1983, boggy84b, boggy84, jumpcoas, boggy84, fastfred_state, boggy84b, ROT90, "bootleg (Eddie's Games)", "Boggy '84 (bootleg)", 0 ) -GAME( 1986, redrobin, 0, fastfred, redrobin, fastfred_state, flyboyb, ROT90, "Elettronolo", "Red Robin", 0 ) +GAME( 1982, flyboy, 0, fastfred, flyboy, fastfred_state, flyboy, ROT90, "Kaneko", "Fly-Boy", GAME_SUPPORTS_SAVE ) +GAME( 1982, flyboyb, flyboy, fastfred, flyboy, fastfred_state, flyboyb, ROT90, "bootleg", "Fly-Boy (bootleg)", GAME_SUPPORTS_SAVE ) +GAME( 1982, fastfred, flyboy, fastfred, fastfred, fastfred_state, fastfred, ROT90, "Kaneko (Atari license)", "Fast Freddie", GAME_SUPPORTS_SAVE ) +GAME( 1983, jumpcoas, 0, jumpcoas, jumpcoas, fastfred_state, jumpcoas, ROT90, "Kaneko", "Jump Coaster", GAME_SUPPORTS_SAVE ) +GAME( 1983, jumpcoast,jumpcoas, jumpcoas, jumpcoas, fastfred_state, jumpcoas, ROT90, "Kaneko (Taito license)", "Jump Coaster (Taito)", GAME_SUPPORTS_SAVE ) +GAME( 1983, boggy84, 0, jumpcoas, boggy84, fastfred_state, boggy84, ROT90, "Kaneko", "Boggy '84", GAME_SUPPORTS_SAVE ) +GAME( 1983, boggy84b, boggy84, jumpcoas, boggy84, fastfred_state, boggy84b, ROT90, "bootleg (Eddie's Games)", "Boggy '84 (bootleg)", GAME_SUPPORTS_SAVE ) +GAME( 1986, redrobin, 0, fastfred, redrobin, fastfred_state, flyboyb, ROT90, "Elettronolo", "Red Robin", GAME_SUPPORTS_SAVE ) GAME( 1984, imago, 0, imago, imago, fastfred_state, imago, ROT90, "Acom", "Imago (cocktail set)", 0 ) GAME( 1983, imagoa, imago, imago, imagoa, fastfred_state, imago, ROT90, "Acom", "Imago (no cocktail set)", 0 ) diff --git a/src/mame/includes/fastfred.h b/src/mame/includes/fastfred.h index 096e9e4da15..50747bcf6a2 100644 --- a/src/mame/includes/fastfred.h +++ b/src/mame/includes/fastfred.h @@ -12,34 +12,36 @@ class fastfred_state : public galaxold_state public: fastfred_state(const machine_config &mconfig, device_type type, const char *tag) : galaxold_state(mconfig, type, tag), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), m_videoram(*this, "videoram"), m_spriteram(*this, "spriteram"), m_attributesram(*this, "attributesram"), m_background_color(*this, "bgcolor"), - m_imago_fg_videoram(*this, "imago_fg_vram"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_imago_fg_videoram(*this, "imago_fg_vram") { } - UINT8 m_imago_sprites[0x800*3]; - UINT16 m_imago_sprites_address; - UINT8 m_imago_sprites_bank; - int m_hardware_type; + required_device<gfxdecode_device> m_gfxdecode; + required_device<palette_device> m_palette; + required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_attributesram; optional_shared_ptr<UINT8> m_background_color; optional_shared_ptr<UINT8> m_imago_fg_videoram; - required_device<gfxdecode_device> m_gfxdecode; - required_device<palette_device> m_palette; + int m_hardware_type; UINT16 m_charbank; UINT8 m_colorbank; + UINT8 m_nmi_mask; + UINT8 m_sound_nmi_mask; + UINT8 m_imago_sprites[0x800*3]; + UINT16 m_imago_sprites_address; + UINT8 m_imago_sprites_bank; + tilemap_t *m_bg_tilemap; tilemap_t *m_fg_tilemap; tilemap_t *m_web_tilemap; - UINT8 m_nmi_mask; - UINT8 m_sound_nmi_mask; DECLARE_READ8_MEMBER(fastfred_custom_io_r); DECLARE_READ8_MEMBER(flyboy_custom1_io_r); DECLARE_READ8_MEMBER(flyboy_custom2_io_r); @@ -51,6 +53,17 @@ public: DECLARE_READ8_MEMBER(imago_sprites_offset_r); DECLARE_WRITE8_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(sound_nmi_mask_w); + DECLARE_WRITE8_MEMBER(fastfred_videoram_w); + DECLARE_WRITE8_MEMBER(fastfred_attributes_w); + DECLARE_WRITE8_MEMBER(fastfred_charbank1_w); + DECLARE_WRITE8_MEMBER(fastfred_charbank2_w); + DECLARE_WRITE8_MEMBER(fastfred_colorbank1_w); + DECLARE_WRITE8_MEMBER(fastfred_colorbank2_w); + DECLARE_WRITE8_MEMBER(fastfred_flip_screen_x_w); + DECLARE_WRITE8_MEMBER(fastfred_flip_screen_y_w); + DECLARE_WRITE8_MEMBER(imago_fg_videoram_w); + DECLARE_WRITE8_MEMBER(imago_charbank_w); + DECLARE_DRIVER_INIT(fastfred); DECLARE_DRIVER_INIT(flyboy); DECLARE_DRIVER_INIT(flyboyb); @@ -58,28 +71,22 @@ public: DECLARE_DRIVER_INIT(boggy84); DECLARE_DRIVER_INIT(jumpcoas); DECLARE_DRIVER_INIT(boggy84b); + TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(imago_get_tile_info_bg); TILE_GET_INFO_MEMBER(imago_get_tile_info_fg); TILE_GET_INFO_MEMBER(imago_get_tile_info_web); - DECLARE_VIDEO_START(fastfred); + + INTERRUPT_GEN_MEMBER(vblank_irq); + INTERRUPT_GEN_MEMBER(sound_timer_irq); + + virtual void machine_start(); DECLARE_PALETTE_INIT(fastfred); DECLARE_MACHINE_START(imago); + DECLARE_VIDEO_START(fastfred); DECLARE_VIDEO_START(imago); + UINT32 screen_update_fastfred(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_imago(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(vblank_irq); - INTERRUPT_GEN_MEMBER(sound_timer_irq); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - DECLARE_WRITE8_MEMBER(fastfred_videoram_w); - DECLARE_WRITE8_MEMBER(fastfred_attributes_w); - DECLARE_WRITE8_MEMBER(fastfred_charbank1_w); - DECLARE_WRITE8_MEMBER(fastfred_charbank2_w); - DECLARE_WRITE8_MEMBER(fastfred_colorbank1_w); - DECLARE_WRITE8_MEMBER(fastfred_colorbank2_w); - DECLARE_WRITE8_MEMBER(fastfred_flip_screen_x_w); - DECLARE_WRITE8_MEMBER(fastfred_flip_screen_y_w); - - DECLARE_WRITE8_MEMBER(imago_fg_videoram_w); - DECLARE_WRITE8_MEMBER(imago_charbank_w); }; diff --git a/src/mame/video/fastfred.c b/src/mame/video/fastfred.c index 1836155ae7e..fb4afb7c0cf 100644 --- a/src/mame/video/fastfred.c +++ b/src/mame/video/fastfred.c @@ -345,6 +345,24 @@ VIDEO_START_MEMBER(fastfred_state,imago) /* web colors */ m_palette->set_pen_color(256+64+0,rgb_t(0x50,0x00,0x00)); m_palette->set_pen_color(256+64+1,rgb_t(0x00,0x00,0x00)); + + save_item(NAME(m_imago_sprites)); + save_item(NAME(m_imago_sprites_address)); + save_item(NAME(m_imago_sprites_bank)); + + // galaxold starfield related save states. Something's still missing here. + save_item(NAME(m_stars_on)); + save_item(NAME(m_stars_blink_state)); + save_item(NAME(m_timer_adjusted)); + save_item(NAME(m_stars_colors_start)); + save_item(NAME(m_stars_scrollpos)); + + for (int i = 0; i < STAR_COUNT; i++) + { + save_item(NAME(m_stars[i].x), i); + save_item(NAME(m_stars[i].y), i); + save_item(NAME(m_stars[i].color), i); + } } UINT32 fastfred_state::screen_update_imago(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |