summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-02-04 18:16:48 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-02-04 18:16:48 +0100
commitffa3b0299f61cae4b7e3bab6b150296412f35418 (patch)
tree000eaecae29694ee1b0bef156c81a81336b2c9cb
parentaf3895e1a55c8b62f82c4b530505313339798e9e (diff)
dcon.c: added save state support (nw)
-rw-r--r--src/mame/drivers/dcon.c14
-rw-r--r--src/mame/includes/dcon.h35
-rw-r--r--src/mame/video/dcon.c15
3 files changed, 37 insertions, 27 deletions
diff --git a/src/mame/drivers/dcon.c b/src/mame/drivers/dcon.c
index 16eb5e8c470..8ec7fb8aa0a 100644
--- a/src/mame/drivers/dcon.c
+++ b/src/mame/drivers/dcon.c
@@ -26,13 +26,13 @@ static ADDRESS_MAP_START( dcon_map, AS_PROGRAM, 16, dcon_state )
AM_RANGE(0x00000, 0x7ffff) AM_ROM
AM_RANGE(0x80000, 0x8bfff) AM_RAM
- AM_RANGE(0x8c000, 0x8c7ff) AM_RAM_WRITE(dcon_background_w) AM_SHARE("back_data")
- AM_RANGE(0x8c800, 0x8cfff) AM_RAM_WRITE(dcon_foreground_w) AM_SHARE("fore_data")
- AM_RANGE(0x8d000, 0x8d7ff) AM_RAM_WRITE(dcon_midground_w) AM_SHARE("mid_data")
- AM_RANGE(0x8d800, 0x8e7ff) AM_RAM_WRITE(dcon_text_w) AM_SHARE("textram")
+ AM_RANGE(0x8c000, 0x8c7ff) AM_RAM_WRITE(background_w) AM_SHARE("back_data")
+ AM_RANGE(0x8c800, 0x8cfff) AM_RAM_WRITE(foreground_w) AM_SHARE("fore_data")
+ AM_RANGE(0x8d000, 0x8d7ff) AM_RAM_WRITE(midground_w) AM_SHARE("mid_data")
+ AM_RANGE(0x8d800, 0x8e7ff) AM_RAM_WRITE(text_w) AM_SHARE("textram")
AM_RANGE(0x8e800, 0x8f7ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x8f800, 0x8ffff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x9d000, 0x9d7ff) AM_WRITE(dcon_gfxbank_w)
+ AM_RANGE(0x9d000, 0x9d7ff) AM_WRITE(gfxbank_w)
AM_RANGE(0xa0000, 0xa000d) AM_DEVREADWRITE("seibu_sound", seibu_sound_device, main_word_r, main_word_w)
AM_RANGE(0xc0000, 0xc004f) AM_DEVREADWRITE("crtc", seibu_crtc_device, read, write)
@@ -403,5 +403,5 @@ DRIVER_INIT_MEMBER(dcon_state,sdgndmps)
}
-GAME( 1991, sdgndmps, 0, sdgndmps, sdgndmps, dcon_state, sdgndmps, ROT0, "Banpresto / Bandai", "SD Gundam Psycho Salamander no Kyoui", GAME_NO_COCKTAIL )
-GAME( 1992, dcon, 0, dcon, dcon, driver_device, 0, ROT0, "Success", "D-Con", GAME_NO_COCKTAIL )
+GAME( 1991, sdgndmps, 0, sdgndmps, sdgndmps, dcon_state, sdgndmps, ROT0, "Banpresto / Bandai", "SD Gundam Psycho Salamander no Kyoui", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
+GAME( 1992, dcon, 0, dcon, dcon, driver_device, 0, ROT0, "Success", "D-Con", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/dcon.h b/src/mame/includes/dcon.h
index 4ca9baa210b..70481429399 100644
--- a/src/mame/includes/dcon.h
+++ b/src/mame/includes/dcon.h
@@ -3,47 +3,52 @@ class dcon_state : public driver_device
public:
dcon_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_back_data(*this, "back_data"),
m_fore_data(*this, "fore_data"),
m_mid_data(*this, "mid_data"),
m_textram(*this, "textram"),
- m_spriteram(*this, "spriteram"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_spriteram(*this, "spriteram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT16> m_back_data;
required_shared_ptr<UINT16> m_fore_data;
required_shared_ptr<UINT16> m_mid_data;
required_shared_ptr<UINT16> m_textram;
required_shared_ptr<UINT16> m_spriteram;
+
tilemap_t *m_background_layer;
tilemap_t *m_foreground_layer;
tilemap_t *m_midground_layer;
tilemap_t *m_text_layer;
- UINT16 m_enable;
+
int m_gfx_bank_select;
int m_last_gfx_bank;
UINT16 m_scroll_ram[6];
+ UINT16 m_layer_en;
+
DECLARE_WRITE16_MEMBER(layer_en_w);
DECLARE_WRITE16_MEMBER(layer_scroll_w);
- UINT16 m_layer_en;
+ DECLARE_WRITE16_MEMBER(gfxbank_w);
+ DECLARE_WRITE16_MEMBER(background_w);
+ DECLARE_WRITE16_MEMBER(foreground_w);
+ DECLARE_WRITE16_MEMBER(midground_w);
+ DECLARE_WRITE16_MEMBER(text_w);
- DECLARE_WRITE16_MEMBER(dcon_gfxbank_w);
- DECLARE_WRITE16_MEMBER(dcon_background_w);
- DECLARE_WRITE16_MEMBER(dcon_foreground_w);
- DECLARE_WRITE16_MEMBER(dcon_midground_w);
- DECLARE_WRITE16_MEMBER(dcon_text_w);
- DECLARE_DRIVER_INIT(sdgndmps);
TILE_GET_INFO_MEMBER(get_back_tile_info);
TILE_GET_INFO_MEMBER(get_fore_tile_info);
TILE_GET_INFO_MEMBER(get_mid_tile_info);
TILE_GET_INFO_MEMBER(get_text_tile_info);
+
+ DECLARE_DRIVER_INIT(sdgndmps);
virtual void video_start();
+
UINT32 screen_update_dcon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_sdgndmps(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
diff --git a/src/mame/video/dcon.c b/src/mame/video/dcon.c
index ef6d385c9a3..78152626753 100644
--- a/src/mame/video/dcon.c
+++ b/src/mame/video/dcon.c
@@ -10,7 +10,7 @@
/******************************************************************************/
-WRITE16_MEMBER(dcon_state::dcon_gfxbank_w)
+WRITE16_MEMBER(dcon_state::gfxbank_w)
{
if (data&1)
m_gfx_bank_select=0x1000;
@@ -18,25 +18,25 @@ WRITE16_MEMBER(dcon_state::dcon_gfxbank_w)
m_gfx_bank_select=0;
}
-WRITE16_MEMBER(dcon_state::dcon_background_w)
+WRITE16_MEMBER(dcon_state::background_w)
{
COMBINE_DATA(&m_back_data[offset]);
m_background_layer->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(dcon_state::dcon_foreground_w)
+WRITE16_MEMBER(dcon_state::foreground_w)
{
COMBINE_DATA(&m_fore_data[offset]);
m_foreground_layer->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(dcon_state::dcon_midground_w)
+WRITE16_MEMBER(dcon_state::midground_w)
{
COMBINE_DATA(&m_mid_data[offset]);
m_midground_layer->mark_tile_dirty(offset);
}
-WRITE16_MEMBER(dcon_state::dcon_text_w)
+WRITE16_MEMBER(dcon_state::text_w)
{
COMBINE_DATA(&m_textram[offset]);
m_text_layer->mark_tile_dirty(offset);
@@ -106,6 +106,11 @@ void dcon_state::video_start()
m_text_layer->set_transparent_pen(15);
m_gfx_bank_select = 0;
+
+ save_item(NAME(m_gfx_bank_select));
+ save_item(NAME(m_last_gfx_bank));
+ save_item(NAME(m_scroll_ram));
+ save_item(NAME(m_layer_en));
}
void dcon_state::draw_sprites( screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect)