From 01559364d699783ae15a5b9e43630cb2c72a5c1b Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Wed, 8 Apr 2015 19:34:57 +0200 Subject: [PATCH] victory.c: added save state support (nw) --- src/mame/audio/exidy.c | 2 ++ src/mame/drivers/victory.c | 14 +++++----- src/mame/includes/victory.h | 33 +++++++++++++--------- src/mame/video/victory.c | 56 ++++++++++++++++++++++++++----------- 4 files changed, 69 insertions(+), 36 deletions(-) diff --git a/src/mame/audio/exidy.c b/src/mame/audio/exidy.c index 9eaf99b944f..03465e0b263 100644 --- a/src/mame/audio/exidy.c +++ b/src/mame/audio/exidy.c @@ -947,6 +947,8 @@ void victory_sound_device::device_config_complete() void victory_sound_device::device_start() { save_item(NAME(m_victory_sound_response_ack_clk)); + save_item(NAME(m_pia1_ca1)); + save_item(NAME(m_pia1_cb1)); common_sh_start(); diff --git a/src/mame/drivers/victory.c b/src/mame/drivers/victory.c index 401377f7e9f..979742639a3 100644 --- a/src/mame/drivers/victory.c +++ b/src/mame/drivers/victory.c @@ -128,9 +128,9 @@ WRITE8_MEMBER(victory_state::lamp_control_w) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, victory_state ) AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc0ff) AM_READ(victory_video_control_r) - AM_RANGE(0xc100, 0xc1ff) AM_WRITE(victory_video_control_w) - AM_RANGE(0xc200, 0xc3ff) AM_WRITE(victory_paletteram_w) + AM_RANGE(0xc000, 0xc0ff) AM_READ(video_control_r) + AM_RANGE(0xc100, 0xc1ff) AM_WRITE(video_control_w) + AM_RANGE(0xc200, 0xc3ff) AM_WRITE(paletteram_w) AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_SHARE("videoram") AM_RANGE(0xc800, 0xdfff) AM_RAM AM_SHARE("charram") AM_RANGE(0xe000, 0xefff) AM_RAM @@ -216,7 +216,7 @@ static MACHINE_CONFIG_START( victory, victory_state ) MCFG_CPU_ADD("maincpu", Z80, VICTORY_MAIN_CPU_CLOCK) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(main_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", victory_state, victory_vblank_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", victory_state, vblank_interrupt) MCFG_NVRAM_ADD_0FILL("nvram") @@ -225,7 +225,7 @@ static MACHINE_CONFIG_START( victory, victory_state ) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK | VIDEO_ALWAYS_UPDATE) /* using the standard Exidy video parameters for now, needs to be confirmed */ MCFG_SCREEN_RAW_PARAMS(VICTORY_PIXEL_CLOCK, VICTORY_HTOTAL, VICTORY_HBEND, VICTORY_HBSTART, VICTORY_VTOTAL, VICTORY_VBEND, VICTORY_VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(victory_state, screen_update_victory) + MCFG_SCREEN_UPDATE_DRIVER(victory_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_PALETTE_ADD("palette", 64) @@ -317,5 +317,5 @@ ROM_END * *************************************/ -GAME( 1982, victory, 0, victory, victory, driver_device, 0, ROT0, "Exidy", "Victory", 0 ) -GAME( 1982, victorba, victory, victory, victory, driver_device, 0, ROT0, "Exidy", "Victor Banana", 0 ) +GAME( 1982, victory, 0, victory, victory, driver_device, 0, ROT0, "Exidy", "Victory", GAME_SUPPORTS_SAVE ) +GAME( 1982, victorba, victory, victory, victory, driver_device, 0, ROT0, "Exidy", "Victor Banana", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/victory.h b/src/mame/includes/victory.h index b2a01ca8bd8..9fe00f0240d 100644 --- a/src/mame/includes/victory.h +++ b/src/mame/includes/victory.h @@ -24,7 +24,7 @@ struct micro_t UINT16 i; UINT16 pc; UINT8 r,g,b; - UINT8 x,xp,y,yp; + UINT8 xp,yp; UINT8 cmd,cmdlo; emu_timer * timer; UINT8 timer_active; @@ -36,14 +36,19 @@ class victory_state : public driver_device public: victory_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_charram(*this, "charram") , m_maincpu(*this, "maincpu"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette"), + m_videoram(*this, "videoram"), + m_charram(*this, "charram") { } + + required_device m_maincpu; + required_device m_screen; + required_device m_palette; required_shared_ptr m_videoram; required_shared_ptr m_charram; + UINT16 m_paletteram[0x40]; UINT8 *m_bgbitmap; UINT8 *m_fgbitmap; @@ -61,15 +66,20 @@ public: UINT8 m_scrolly; UINT8 m_video_control; struct micro_t m_micro; + DECLARE_WRITE8_MEMBER(lamp_control_w); - DECLARE_WRITE8_MEMBER(victory_paletteram_w); - DECLARE_READ8_MEMBER(victory_video_control_r); - DECLARE_WRITE8_MEMBER(victory_video_control_w); + DECLARE_WRITE8_MEMBER(paletteram_w); + DECLARE_READ8_MEMBER(video_control_r); + DECLARE_WRITE8_MEMBER(video_control_w); + virtual void video_start(); - UINT32 screen_update_victory(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(victory_vblank_interrupt); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + INTERRUPT_GEN_MEMBER(vblank_interrupt); TIMER_CALLBACK_MEMBER(bgcoll_irq_callback); - void victory_update_irq(); + + void update_irq(); void set_palette(); int command2(); int command3(); @@ -79,7 +89,4 @@ public: int command7(); void update_background(); void update_foreground(); - required_device m_maincpu; - required_device m_screen; - required_device m_palette; }; diff --git a/src/mame/video/victory.c b/src/mame/video/victory.c index 8038a844651..a265f3d3815 100644 --- a/src/mame/video/victory.c +++ b/src/mame/video/victory.c @@ -51,6 +51,30 @@ void victory_state::video_start() /* register for state saving */ save_item(NAME(m_paletteram)); + save_pointer(NAME(m_rram), 0x4000); + save_pointer(NAME(m_gram), 0x4000); + save_pointer(NAME(m_bram), 0x4000); + save_item(NAME(m_vblank_irq)); + save_item(NAME(m_fgcoll)); + save_item(NAME(m_fgcollx)); + save_item(NAME(m_fgcolly)); + save_item(NAME(m_bgcoll)); + save_item(NAME(m_bgcollx)); + save_item(NAME(m_bgcolly)); + save_item(NAME(m_scrollx)); + save_item(NAME(m_scrolly)); + save_item(NAME(m_video_control)); + save_item(NAME(m_micro.i)); + save_item(NAME(m_micro.pc)); + save_item(NAME(m_micro.r)); + save_item(NAME(m_micro.g)); + save_item(NAME(m_micro.b)); + save_item(NAME(m_micro.xp)); + save_item(NAME(m_micro.yp)); + save_item(NAME(m_micro.cmd)); + save_item(NAME(m_micro.cmdlo)); + save_item(NAME(m_micro.timer_active)); + save_item(NAME(m_micro.endtime)); } @@ -61,7 +85,7 @@ void victory_state::video_start() * *************************************/ -void victory_state::victory_update_irq() +void victory_state::update_irq() { if (m_vblank_irq || m_fgcoll || (m_bgcoll && (m_video_control & 0x20))) m_maincpu->set_input_line(0, ASSERT_LINE); @@ -70,11 +94,11 @@ void victory_state::victory_update_irq() } -INTERRUPT_GEN_MEMBER(victory_state::victory_vblank_interrupt) +INTERRUPT_GEN_MEMBER(victory_state::vblank_interrupt) { m_vblank_irq = 1; - victory_update_irq(); + update_irq(); } @@ -85,7 +109,7 @@ INTERRUPT_GEN_MEMBER(victory_state::victory_vblank_interrupt) * *************************************/ -WRITE8_MEMBER(victory_state::victory_paletteram_w) +WRITE8_MEMBER(victory_state::paletteram_w) { m_paletteram[offset & 0x3f] = ((offset & 0x80) << 1) | data; } @@ -111,7 +135,7 @@ void victory_state::set_palette() * *************************************/ -READ8_MEMBER(victory_state::victory_video_control_r) +READ8_MEMBER(victory_state::video_control_r) { int result = 0; @@ -127,7 +151,7 @@ READ8_MEMBER(victory_state::victory_video_control_r) if (m_fgcoll) { m_fgcoll = 0; - victory_update_irq(); + update_irq(); } if (LOG_COLLISION) logerror("%04X:5CLFIQ read = %02X\n", space.device().safe_pcbase(), result); return result; @@ -142,7 +166,7 @@ READ8_MEMBER(victory_state::victory_video_control_r) if (m_bgcoll) { m_bgcoll = 0; - victory_update_irq(); + update_irq(); } if (LOG_COLLISION) logerror("%04X:5BACKY read = %02X\n", space.device().safe_pcbase(), result); return result; @@ -163,7 +187,7 @@ READ8_MEMBER(victory_state::victory_video_control_r) return result; default: - logerror("%04X:victory_video_control_r(%02X)\n", space.device().safe_pcbase(), offset); + logerror("%04X:video_control_r(%02X)\n", space.device().safe_pcbase(), offset); break; } return 0; @@ -177,7 +201,7 @@ READ8_MEMBER(victory_state::victory_video_control_r) * *************************************/ -WRITE8_MEMBER(victory_state::victory_video_control_w) +WRITE8_MEMBER(victory_state::video_control_w) { struct micro_t µ = m_micro; switch (offset) @@ -282,11 +306,11 @@ WRITE8_MEMBER(victory_state::victory_video_control_w) case 0x0b: /* CLRVIRQ */ if (LOG_MICROCODE) logerror("%04X:CLRVIRQ write = %02X\n", space.device().safe_pcbase(), data); m_vblank_irq = 0; - victory_update_irq(); + update_irq(); break; default: - if (LOG_MICROCODE) logerror("%04X:victory_video_control_w(%02X) = %02X\n", space.device().safe_pcbase(), offset, data); + if (LOG_MICROCODE) logerror("%04X:video_control_w(%02X) = %02X\n", space.device().safe_pcbase(), offset, data); break; } } @@ -637,7 +661,7 @@ int victory_state::command3() m_rram[dstoffs + 0] ^= src >> shift; m_rram[dstoffs + 1] ^= src << nshift; } - if (m_fgcoll) victory_update_irq(); + if (m_fgcoll) update_irq(); } } } @@ -839,7 +863,7 @@ int victory_state::command5() } acc &= 0xff; } - if (m_fgcoll) victory_update_irq(); + if (m_fgcoll) update_irq(); } micro.xp = x; @@ -971,7 +995,7 @@ int victory_state::command7() m_rram[addr + 0] ^= micro.r >> shift; m_rram[addr + 1] ^= micro.r << nshift; } - if (m_fgcoll) victory_update_irq(); + if (m_fgcoll) update_irq(); } count_states(micro, 4); @@ -1054,7 +1078,7 @@ TIMER_CALLBACK_MEMBER(victory_state::bgcoll_irq_callback) m_bgcollx = param & 0xff; m_bgcolly = param >> 8; m_bgcoll = 1; - victory_update_irq(); + update_irq(); } @@ -1065,7 +1089,7 @@ TIMER_CALLBACK_MEMBER(victory_state::bgcoll_irq_callback) * *************************************/ -UINT32 victory_state::screen_update_victory(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 victory_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { int bgcollmask = (m_video_control & 4) ? 4 : 7; int count = 0;