summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2015-03-11 18:59:26 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2015-03-11 18:59:26 +0100
commitb0583d30fa15b79b93242b73bd2c82057c73189b (patch)
tree15a382cd4b7346faf76eb38d967cef547487e2ed
parent4af85db0a130ef4c0d984e2ce41b02636976e6cd (diff)
ssozumo.c: added save state support (nw)
-rw-r--r--src/mame/drivers/ssozumo.c32
-rw-r--r--src/mame/includes/ssozumo.h47
-rw-r--r--src/mame/video/ssozumo.c35
3 files changed, 62 insertions, 52 deletions
diff --git a/src/mame/drivers/ssozumo.c b/src/mame/drivers/ssozumo.c
index c05e6be2572..7c3b83ecdf9 100644
--- a/src/mame/drivers/ssozumo.c
+++ b/src/mame/drivers/ssozumo.c
@@ -14,7 +14,13 @@ Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 1999/10/04
#include "sound/dac.h"
#include "includes/ssozumo.h"
-WRITE8_MEMBER(ssozumo_state::ssozumo_sh_command_w)
+
+void ssozumo_state::machine_start()
+{
+ save_item(NAME(m_sound_nmi_mask));
+}
+
+WRITE8_MEMBER(ssozumo_state::sh_command_w)
{
soundlatch_byte_w(space, 0, data);
m_audiocpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
@@ -24,18 +30,18 @@ WRITE8_MEMBER(ssozumo_state::ssozumo_sh_command_w)
static ADDRESS_MAP_START( ssozumo_map, AS_PROGRAM, 8, ssozumo_state )
AM_RANGE(0x0000, 0x077f) AM_RAM
AM_RANGE(0x0780, 0x07ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(ssozumo_videoram2_w) AM_SHARE("videoram2")
- AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(ssozumo_colorram2_w) AM_SHARE("colorram2")
- AM_RANGE(0x3000, 0x31ff) AM_RAM_WRITE(ssozumo_videoram_w) AM_SHARE("videoram")
- AM_RANGE(0x3200, 0x33ff) AM_RAM_WRITE(ssozumo_colorram_w) AM_SHARE("colorram")
+ AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
+ AM_RANGE(0x3000, 0x31ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x3200, 0x33ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x3400, 0x35ff) AM_RAM
AM_RANGE(0x3600, 0x37ff) AM_RAM
- AM_RANGE(0x4000, 0x4000) AM_READ_PORT("P1") AM_WRITE(ssozumo_flipscreen_w)
- AM_RANGE(0x4010, 0x4010) AM_READ_PORT("P2") AM_WRITE(ssozumo_sh_command_w)
- AM_RANGE(0x4020, 0x4020) AM_READ_PORT("DSW2") AM_WRITE(ssozumo_scroll_w)
+ AM_RANGE(0x4000, 0x4000) AM_READ_PORT("P1") AM_WRITE(flipscreen_w)
+ AM_RANGE(0x4010, 0x4010) AM_READ_PORT("P2") AM_WRITE(sh_command_w)
+ AM_RANGE(0x4020, 0x4020) AM_READ_PORT("DSW2") AM_WRITE(scroll_w)
AM_RANGE(0x4030, 0x4030) AM_READ_PORT("DSW1")
// AM_RANGE(0x4030, 0x4030) AM_WRITEONLY
- AM_RANGE(0x4050, 0x407f) AM_RAM_WRITE(ssozumo_paletteram_w) AM_SHARE("paletteram")
+ AM_RANGE(0x4050, 0x407f) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0x6000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -69,8 +75,8 @@ static INPUT_PORTS_START( ssozumo )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, ssozumo_state,coin_inserted, 0)
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, ssozumo_state,coin_inserted, 0)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_CHANGED_MEMBER(DEVICE_SELF, ssozumo_state, coin_inserted, 0)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, ssozumo_state, coin_inserted, 0)
PORT_START("P2") /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
@@ -202,7 +208,7 @@ static MACHINE_CONFIG_START( ssozumo, ssozumo_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8 - 1, 1*8, 31*8 - 1)
- MCFG_SCREEN_UPDATE_DRIVER(ssozumo_state, screen_update_ssozumo)
+ MCFG_SCREEN_UPDATE_DRIVER(ssozumo_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ssozumo)
@@ -281,4 +287,4 @@ ROM_END
-GAME( 1984, ssozumo, 0, ssozumo, ssozumo, driver_device, 0, ROT270, "Technos Japan", "Syusse Oozumou (Japan)", 0 )
+GAME( 1984, ssozumo, 0, ssozumo, ssozumo, driver_device, 0, ROT270, "Technos Japan", "Syusse Oozumou (Japan)", GAME_SUPPORTS_SAVE )
diff --git a/src/mame/includes/ssozumo.h b/src/mame/includes/ssozumo.h
index 4216cfb639e..42771f95f7a 100644
--- a/src/mame/includes/ssozumo.h
+++ b/src/mame/includes/ssozumo.h
@@ -3,16 +3,21 @@ class ssozumo_state : public driver_device
public:
ssozumo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_palette(*this, "palette"),
m_spriteram(*this, "spriteram"),
m_paletteram(*this, "paletteram"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_videoram2(*this, "videoram2"),
- m_colorram2(*this, "colorram2"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_colorram2(*this, "colorram2") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_paletteram;
@@ -23,27 +28,29 @@ public:
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
-
UINT8 m_sound_nmi_mask;
- DECLARE_WRITE8_MEMBER(ssozumo_sh_command_w);
+
+ DECLARE_WRITE8_MEMBER(sh_command_w);
DECLARE_WRITE8_MEMBER(sound_nmi_mask_w);
- DECLARE_WRITE8_MEMBER(ssozumo_videoram_w);
- DECLARE_WRITE8_MEMBER(ssozumo_colorram_w);
- DECLARE_WRITE8_MEMBER(ssozumo_videoram2_w);
- DECLARE_WRITE8_MEMBER(ssozumo_colorram2_w);
- DECLARE_WRITE8_MEMBER(ssozumo_paletteram_w);
- DECLARE_WRITE8_MEMBER(ssozumo_scroll_w);
- DECLARE_WRITE8_MEMBER(ssozumo_flipscreen_w);
+ DECLARE_WRITE8_MEMBER(videoram_w);
+ DECLARE_WRITE8_MEMBER(colorram_w);
+ DECLARE_WRITE8_MEMBER(videoram2_w);
+ DECLARE_WRITE8_MEMBER(colorram2_w);
+ DECLARE_WRITE8_MEMBER(paletteram_w);
+ DECLARE_WRITE8_MEMBER(scroll_w);
+ DECLARE_WRITE8_MEMBER(flipscreen_w);
+
DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
+
+ INTERRUPT_GEN_MEMBER(sound_timer_irq);
+
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
+
+ virtual void machine_start();
virtual void video_start();
DECLARE_PALETTE_INIT(ssozumo);
- UINT32 screen_update_ssozumo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- INTERRUPT_GEN_MEMBER(sound_timer_irq);
+
+ UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_audiocpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
diff --git a/src/mame/video/ssozumo.c b/src/mame/video/ssozumo.c
index b638d3d4d8d..61fc6187c76 100644
--- a/src/mame/video/ssozumo.c
+++ b/src/mame/video/ssozumo.c
@@ -41,31 +41,31 @@ PALETTE_INIT_MEMBER(ssozumo_state, ssozumo)
}
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_videoram_w)
+WRITE8_MEMBER(ssozumo_state::videoram_w)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_colorram_w)
+WRITE8_MEMBER(ssozumo_state::colorram_w)
{
m_colorram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_videoram2_w)
+WRITE8_MEMBER(ssozumo_state::videoram2_w)
{
m_videoram2[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_colorram2_w)
+WRITE8_MEMBER(ssozumo_state::colorram2_w)
{
m_colorram2[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_paletteram_w)
+WRITE8_MEMBER(ssozumo_state::paletteram_w)
{
int bit0, bit1, bit2, bit3, val;
int r, g, b;
@@ -98,12 +98,12 @@ WRITE8_MEMBER(ssozumo_state::ssozumo_paletteram_w)
m_palette->set_pen_color(offs2 + 64, rgb_t(r, g, b));
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_scroll_w)
+WRITE8_MEMBER(ssozumo_state::scroll_w)
{
m_bg_tilemap->set_scrolly(0, data);
}
-WRITE8_MEMBER(ssozumo_state::ssozumo_flipscreen_w)
+WRITE8_MEMBER(ssozumo_state::flipscreen_w)
{
flip_screen_set(data & 0x80);
}
@@ -138,19 +138,16 @@ void ssozumo_state::video_start()
void ssozumo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram;
- int offs;
-
- for (offs = 0; offs < m_spriteram.bytes(); offs += 4)
+ for (int offs = 0; offs < m_spriteram.bytes(); offs += 4)
{
- if (spriteram[offs] & 0x01)
+ if (m_spriteram[offs] & 0x01)
{
- int code = spriteram[offs + 1] + ((spriteram[offs] & 0xf0) << 4);
- int color = (spriteram[offs] & 0x08) >> 3;
- int flipx = spriteram[offs] & 0x04;
- int flipy = spriteram[offs] & 0x02;
- int sx = 239 - spriteram[offs + 3];
- int sy = (240 - spriteram[offs + 2]) & 0xff;
+ int code = m_spriteram[offs + 1] + ((m_spriteram[offs] & 0xf0) << 4);
+ int color = (m_spriteram[offs] & 0x08) >> 3;
+ int flipx = m_spriteram[offs] & 0x04;
+ int flipy = m_spriteram[offs] & 0x02;
+ int sx = 239 - m_spriteram[offs + 3];
+ int sy = (240 - m_spriteram[offs + 2]) & 0xff;
if (flip_screen())
{
@@ -169,7 +166,7 @@ void ssozumo_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect
}
}
-UINT32 ssozumo_state::screen_update_ssozumo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+UINT32 ssozumo_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);