summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit09b6ec9869349cf9befd8c3589f1dccb32bacd1a (patch)
tree7a4e22a3a6a2b2dddf12e93a7c01826791a51a48
parent31bc7f4bbb8f805e1f05623d9d8d784750de92ad (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.c25
-rw-r--r--src/mame/includes/fastfred.h57
-rw-r--r--src/mame/video/fastfred.c18
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)