From 9c92d07fb57bda853f5ef0939197f676c579960f Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 23 Feb 2015 19:15:49 +0100 Subject: [PATCH] speedatk: added save state support (nw) --- src/mame/drivers/speedatk.c | 24 +++++++++++++++--------- src/mame/includes/speedatk.h | 34 ++++++++++++++++++++++------------ src/mame/video/speedatk.c | 22 +++++++--------------- 3 files changed, 44 insertions(+), 36 deletions(-) diff --git a/src/mame/drivers/speedatk.c b/src/mame/drivers/speedatk.c index a342e3871f3..252ac9990b1 100644 --- a/src/mame/drivers/speedatk.c +++ b/src/mame/drivers/speedatk.c @@ -7,7 +7,6 @@ Speed Attack! (c) 1984 Seta Kikaku Corp. driver by Pierpaolo Prazzoli & Angelo Salese, based on early work by David Haywood TODO: - - Video emulation requires a major conversion to the HD46505SP C.R.T. chip (MC6845 clone) - It's possible that there is only one coin chute and not two,needs a real board to know more about it. @@ -79,11 +78,18 @@ PS / PD : key matrix #include "emu.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" -#include "video/mc6845.h" #include "includes/speedatk.h" #define MASTER_CLOCK XTAL_12MHz +void speedatk_state::machine_start() +{ + save_item(NAME(m_mux_data)); + save_item(NAME(m_km_status)); + save_item(NAME(m_coin_settings)); + save_item(NAME(m_coin_impulse)); +} + UINT8 speedatk_state::iox_key_matrix_calc(UINT8 p_side) { static const char *const keynames[] = { "P1_ROW0", "P1_ROW1", "P2_ROW0", "P2_ROW1" }; @@ -175,14 +181,14 @@ static ADDRESS_MAP_START( speedatk_mem, AS_PROGRAM, 8, speedatk_state ) AM_RANGE(0x8000, 0x8000) AM_READWRITE(key_matrix_r,key_matrix_w) AM_RANGE(0x8001, 0x8001) AM_READWRITE(key_matrix_status_r,key_matrix_status_w) AM_RANGE(0x8800, 0x8fff) AM_RAM - AM_RANGE(0xa000, 0xa3ff) AM_RAM_WRITE(speedatk_videoram_w) AM_SHARE("videoram") - AM_RANGE(0xb000, 0xb3ff) AM_RAM_WRITE(speedatk_colorram_w) AM_SHARE("colorram") + AM_RANGE(0xa000, 0xa3ff) AM_RAM AM_SHARE("videoram") + AM_RANGE(0xb000, 0xb3ff) AM_RAM AM_SHARE("colorram") ADDRESS_MAP_END static ADDRESS_MAP_START( speedatk_io, AS_IO, 8, speedatk_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_WRITE(speedatk_6845_w) //h46505 address / data routing + AM_RANGE(0x00, 0x01) AM_WRITE(m6845_w) //h46505 address / data routing AM_RANGE(0x24, 0x24) AM_WRITE(watchdog_reset_w) AM_RANGE(0x40, 0x40) AM_DEVREAD("aysnd", ay8910_device, data_r) AM_RANGE(0x40, 0x41) AM_DEVWRITE("aysnd", ay8910_device, address_data_w) @@ -285,7 +291,7 @@ static GFXDECODE_START( speedatk ) GFXDECODE_ENTRY( "gfx2", 0, charlayout_3bpp, 0, 32 ) GFXDECODE_END -WRITE8_MEMBER(speedatk_state::speedatk_output_w) +WRITE8_MEMBER(speedatk_state::output_w) { m_flip_scr = data & 0x80; @@ -308,7 +314,7 @@ static MACHINE_CONFIG_START( speedatk, speedatk_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(320, 256) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) - MCFG_SCREEN_UPDATE_DRIVER(speedatk_state, screen_update_speedatk) + MCFG_SCREEN_UPDATE_DRIVER(speedatk_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_MC6845_ADD("crtc", H46505, "screen", MASTER_CLOCK/16) /* hand tuned to get ~60 fps */ @@ -325,7 +331,7 @@ static MACHINE_CONFIG_START( speedatk, speedatk_state ) MCFG_SOUND_ADD("aysnd", AY8910, MASTER_CLOCK/4) //divider is unknown MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW")) - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(speedatk_state, speedatk_output_w)) + MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(speedatk_state, output_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) MACHINE_CONFIG_END @@ -350,4 +356,4 @@ ROM_START( speedatk ) ROM_LOAD( "cb2.bpr", 0x0020, 0x0100, CRC(a604cf96) SHA1(a4ef6e77dcd3abe4c27e8e636222a5ee711a51f5) ) /* lookup table */ ROM_END -GAME( 1984, speedatk, 0, speedatk, speedatk, driver_device, 0, ROT0, "Seta Kikaku Corp.", "Speed Attack! (Japan)", 0 ) +GAME( 1984, speedatk, 0, speedatk, speedatk, driver_device, 0, ROT0, "Seta Kikaku Corp.", "Speed Attack! (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/speedatk.h b/src/mame/includes/speedatk.h index 67f3fc2364e..383dc2ed0ef 100644 --- a/src/mame/includes/speedatk.h +++ b/src/mame/includes/speedatk.h @@ -1,37 +1,47 @@ +#include "video/mc6845.h" + class speedatk_state : public driver_device { public: speedatk_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_colorram(*this, "colorram"), m_maincpu(*this, "maincpu"), + m_crtc(*this, "crtc"), m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_videoram(*this, "videoram"), + m_colorram(*this, "colorram") { } + + required_device m_maincpu; + required_device m_crtc; + required_device m_gfxdecode; + required_device m_palette; required_shared_ptr m_videoram; required_shared_ptr m_colorram; + UINT8 m_crtc_vreg[0x100]; UINT8 m_crtc_index; UINT8 m_flip_scr; - UINT8 m_mux_data; UINT8 m_km_status; UINT8 m_coin_settings; UINT8 m_coin_impulse; + DECLARE_READ8_MEMBER(key_matrix_r); DECLARE_WRITE8_MEMBER(key_matrix_w); DECLARE_READ8_MEMBER(key_matrix_status_r); DECLARE_WRITE8_MEMBER(key_matrix_status_w); - DECLARE_WRITE8_MEMBER(speedatk_videoram_w); - DECLARE_WRITE8_MEMBER(speedatk_colorram_w); - DECLARE_WRITE8_MEMBER(speedatk_6845_w); - DECLARE_WRITE8_MEMBER(speedatk_output_w); + DECLARE_WRITE8_MEMBER(videoram_w); + DECLARE_WRITE8_MEMBER(colorram_w); + DECLARE_WRITE8_MEMBER(m6845_w); + DECLARE_WRITE8_MEMBER(output_w); + + virtual void machine_start(); virtual void video_start(); DECLARE_PALETTE_INIT(speedatk); - UINT32 screen_update_speedatk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + UINT8 iox_key_matrix_calc(UINT8 p_side); - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; }; diff --git a/src/mame/video/speedatk.c b/src/mame/video/speedatk.c index bd51334d9e9..5f13d636cac 100644 --- a/src/mame/video/speedatk.c +++ b/src/mame/video/speedatk.c @@ -5,7 +5,6 @@ *****************************************************************************************/ #include "emu.h" #include "includes/speedatk.h" -#include "video/mc6845.h" PALETTE_INIT_MEMBER(speedatk_state, speedatk) @@ -50,35 +49,28 @@ PALETTE_INIT_MEMBER(speedatk_state, speedatk) } } -WRITE8_MEMBER(speedatk_state::speedatk_videoram_w) -{ - m_videoram[offset] = data; -} - -WRITE8_MEMBER(speedatk_state::speedatk_colorram_w) -{ - m_colorram[offset] = data; -} - void speedatk_state::video_start() { + save_item(NAME(m_crtc_vreg)); + save_item(NAME(m_crtc_index)); + save_item(NAME(m_flip_scr)); } -WRITE8_MEMBER(speedatk_state::speedatk_6845_w) +WRITE8_MEMBER(speedatk_state::m6845_w) { if(offset == 0) { m_crtc_index = data; - machine().device("crtc")->address_w(space,0,data); + m_crtc->address_w(space,0,data); } else { m_crtc_vreg[m_crtc_index] = data; - machine().device("crtc")->register_w(space,0,data); + m_crtc->register_w(space,0,data); } } -UINT32 speedatk_state::screen_update_speedatk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 speedatk_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int x,y; int count;