From 1d12e0e9090889f0a784fca2c85b4875d0a81a61 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 8 May 2015 18:12:58 +0200 Subject: [PATCH] renegade.c: completed save state support (nw) --- src/mame/drivers/renegade.c | 71 ++++++++++++++++++++++-------------- src/mame/includes/renegade.h | 48 +++++++++++++----------- src/mame/video/renegade.c | 4 +- 3 files changed, 72 insertions(+), 51 deletions(-) diff --git a/src/mame/drivers/renegade.c b/src/mame/drivers/renegade.c index b429b27474b..9662b8afcd9 100644 --- a/src/mame/drivers/renegade.c +++ b/src/mame/drivers/renegade.c @@ -200,15 +200,25 @@ void renegade_state::machine_start() save_item(NAME(m_adpcm_pos)); save_item(NAME(m_adpcm_end)); save_item(NAME(m_adpcm_playing)); - save_item(NAME(m_mcu_buffer)); - save_item(NAME(m_mcu_input_size)); - save_item(NAME(m_mcu_output_byte)); - save_item(NAME(m_mcu_key)); } DRIVER_INIT_MEMBER(renegade_state,renegade) { m_mcu_sim = FALSE; + + save_item(NAME(m_from_main)); + save_item(NAME(m_from_mcu)); + save_item(NAME(m_main_sent)); + save_item(NAME(m_mcu_sent)); + save_item(NAME(m_ddr_a)); + save_item(NAME(m_ddr_b)); + save_item(NAME(m_ddr_c)); + save_item(NAME(m_port_a_out)); + save_item(NAME(m_port_b_out)); + save_item(NAME(m_port_c_out)); + save_item(NAME(m_port_a_in)); + save_item(NAME(m_port_b_in)); + save_item(NAME(m_port_c_in)); } DRIVER_INIT_MEMBER(renegade_state,kuniokun) @@ -219,6 +229,11 @@ DRIVER_INIT_MEMBER(renegade_state,kuniokun) m_mcu_encrypt_table_len = 0x2a; m_mcu->suspend(SUSPEND_REASON_DISABLE, 1); + + save_item(NAME(m_mcu_buffer)); + save_item(NAME(m_mcu_input_size)); + save_item(NAME(m_mcu_output_byte)); + save_item(NAME(m_mcu_key)); } DRIVER_INIT_MEMBER(renegade_state,kuniokunb) @@ -237,27 +252,27 @@ DRIVER_INIT_MEMBER(renegade_state,kuniokunb) ***************************************************************************/ -READ8_MEMBER(renegade_state::renegade_68705_port_a_r) +READ8_MEMBER(renegade_state::_68705_port_a_r) { return (m_port_a_out & m_ddr_a) | (m_port_a_in & ~m_ddr_a); } -WRITE8_MEMBER(renegade_state::renegade_68705_port_a_w) +WRITE8_MEMBER(renegade_state::_68705_port_a_w) { m_port_a_out = data; } -WRITE8_MEMBER(renegade_state::renegade_68705_ddr_a_w) +WRITE8_MEMBER(renegade_state::_68705_ddr_a_w) { m_ddr_a = data; } -READ8_MEMBER(renegade_state::renegade_68705_port_b_r) +READ8_MEMBER(renegade_state::_68705_port_b_r) { return (m_port_b_out & m_ddr_b) | (m_port_b_in & ~m_ddr_b); } -WRITE8_MEMBER(renegade_state::renegade_68705_port_b_w) +WRITE8_MEMBER(renegade_state::_68705_port_b_w) { if ((m_ddr_b & 0x02) && (~data & 0x02) && (m_port_b_out & 0x02)) { @@ -277,13 +292,13 @@ WRITE8_MEMBER(renegade_state::renegade_68705_port_b_w) m_port_b_out = data; } -WRITE8_MEMBER(renegade_state::renegade_68705_ddr_b_w) +WRITE8_MEMBER(renegade_state::_68705_ddr_b_w) { m_ddr_b = data; } -READ8_MEMBER(renegade_state::renegade_68705_port_c_r) +READ8_MEMBER(renegade_state::_68705_port_c_r) { m_port_c_in = 0; if (m_main_sent) @@ -294,12 +309,12 @@ READ8_MEMBER(renegade_state::renegade_68705_port_c_r) return (m_port_c_out & m_ddr_c) | (m_port_c_in & ~m_ddr_c); } -WRITE8_MEMBER(renegade_state::renegade_68705_port_c_w) +WRITE8_MEMBER(renegade_state::_68705_port_c_w) { m_port_c_out = data; } -WRITE8_MEMBER(renegade_state::renegade_68705_ddr_c_w) +WRITE8_MEMBER(renegade_state::_68705_ddr_c_w) { m_ddr_c = data; } @@ -567,7 +582,7 @@ WRITE8_MEMBER(renegade_state::bankswitch_w) m_rombank->set_entry(data & 1); } -TIMER_DEVICE_CALLBACK_MEMBER(renegade_state::renegade_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(renegade_state::interrupt) { int scanline = param; @@ -577,7 +592,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(renegade_state::renegade_interrupt) m_maincpu->set_input_line(0, HOLD_LINE); } -WRITE8_MEMBER(renegade_state::renegade_coin_counter_w) +WRITE8_MEMBER(renegade_state::coincounter_w) { //coin_counter_w(offset, data); } @@ -595,11 +610,11 @@ static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state ) AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0") AM_WRITE(scroll_lsb_w) /* Player#1 controls, P1,P2 start */ AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(scroll_msb_w) /* Player#2 controls, coin triggers */ AM_RANGE(0x3802, 0x3802) AM_READ_PORT("DSW2") AM_WRITE(sound_w) /* DIP2 various IO ports */ - AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") AM_WRITE(renegade_flipscreen_w) /* DIP1 */ + AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") AM_WRITE(flipscreen_w) /* DIP1 */ AM_RANGE(0x3804, 0x3804) AM_READWRITE(mcu_r, mcu_w) AM_RANGE(0x3805, 0x3805) AM_READWRITE(mcu_reset_r, bankswitch_w) AM_RANGE(0x3806, 0x3806) AM_WRITENOP // ?? watchdog - AM_RANGE(0x3807, 0x3807) AM_WRITE(renegade_coin_counter_w) + AM_RANGE(0x3807, 0x3807) AM_WRITE(coincounter_w) AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("rombank") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -616,12 +631,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( renegade_mcu_map, AS_PROGRAM, 8, renegade_state ) ADDRESS_MAP_GLOBAL_MASK(0x7ff) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(renegade_68705_port_a_r, renegade_68705_port_a_w) - AM_RANGE(0x0001, 0x0001) AM_READWRITE(renegade_68705_port_b_r, renegade_68705_port_b_w) - AM_RANGE(0x0002, 0x0002) AM_READWRITE(renegade_68705_port_c_r, renegade_68705_port_c_w) - AM_RANGE(0x0004, 0x0004) AM_WRITE(renegade_68705_ddr_a_w) - AM_RANGE(0x0005, 0x0005) AM_WRITE(renegade_68705_ddr_b_w) - AM_RANGE(0x0006, 0x0006) AM_WRITE(renegade_68705_ddr_c_w) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(_68705_port_a_r, _68705_port_a_w) + AM_RANGE(0x0001, 0x0001) AM_READWRITE(_68705_port_b_r, _68705_port_b_w) + AM_RANGE(0x0002, 0x0002) AM_READWRITE(_68705_port_c_r, _68705_port_c_w) + AM_RANGE(0x0004, 0x0004) AM_WRITE(_68705_ddr_a_w) + AM_RANGE(0x0005, 0x0005) AM_WRITE(_68705_ddr_b_w) + AM_RANGE(0x0006, 0x0006) AM_WRITE(_68705_ddr_c_w) // AM_RANGE(0x0008, 0x0008) AM_READWRITE(m68705_tdr_r, m68705_tdr_w) // AM_RANGE(0x0009, 0x0009) AM_READWRITE(m68705_tcr_r, m68705_tcr_w) AM_RANGE(0x0010, 0x007f) AM_RAM @@ -832,7 +847,7 @@ static MACHINE_CONFIG_START( renegade, renegade_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, 12000000/8) /* 1.5 MHz (measured) */ MCFG_CPU_PROGRAM_MAP(renegade_map) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", renegade_state, renegade_interrupt, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", renegade_state, interrupt, "screen", 0, 1) MCFG_CPU_ADD("audiocpu", M6809, 12000000/8) MCFG_CPU_PROGRAM_MAP(renegade_sound_map) /* IRQs are caused by the main CPU */ @@ -847,7 +862,7 @@ static MACHINE_CONFIG_START( renegade, renegade_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)*2) /* not accurate */ MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0, 30*8-1) - MCFG_SCREEN_UPDATE_DRIVER(renegade_state, screen_update_renegade) + MCFG_SCREEN_UPDATE_DRIVER(renegade_state, screen_update) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", renegade) @@ -998,6 +1013,6 @@ ROM_END -GAME( 1986, renegade, 0, renegade, renegade, renegade_state, renegade, ROT0, "Technos Japan (Taito America license)", "Renegade (US)", 0 ) -GAME( 1986, kuniokun, renegade, renegade, renegade, renegade_state, kuniokun, ROT0, "Technos Japan", "Nekketsu Kouha Kunio-kun (Japan)", 0 ) -GAME( 1986, kuniokunb, renegade, kuniokunb, renegade, renegade_state, kuniokunb, ROT0, "bootleg", "Nekketsu Kouha Kunio-kun (Japan bootleg)", 0 ) +GAME( 1986, renegade, 0, renegade, renegade, renegade_state, renegade, ROT0, "Technos Japan (Taito America license)", "Renegade (US)", GAME_SUPPORTS_SAVE ) +GAME( 1986, kuniokun, renegade, renegade, renegade, renegade_state, kuniokun, ROT0, "Technos Japan", "Nekketsu Kouha Kunio-kun (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1986, kuniokunb, renegade, kuniokunb, renegade, renegade_state, kuniokunb, ROT0, "bootleg", "Nekketsu Kouha Kunio-kun (Japan bootleg)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/renegade.h b/src/mame/includes/renegade.h index b3e8b6417d5..b5547d97b87 100644 --- a/src/mame/includes/renegade.h +++ b/src/mame/includes/renegade.h @@ -14,28 +14,31 @@ public: m_mcu(*this, "mcu"), m_msm(*this, "msm"), m_gfxdecode(*this, "gfxdecode"), - m_rombank(*this, "rombank"), - m_adpcmrom(*this, "adpcm"), m_fg_videoram(*this, "fg_videoram"), m_bg_videoram(*this, "bg_videoram"), - m_spriteram(*this, "spriteram") { } + m_spriteram(*this, "spriteram"), + m_rombank(*this, "rombank"), + m_adpcmrom(*this, "adpcm") { } required_device m_maincpu; required_device m_audiocpu; optional_device m_mcu; required_device m_msm; required_device m_gfxdecode; - required_memory_bank m_rombank; - required_region_ptr m_adpcmrom; + required_shared_ptr m_fg_videoram; required_shared_ptr m_bg_videoram; required_shared_ptr m_spriteram; + required_memory_bank m_rombank; + + required_region_ptr m_adpcmrom; + UINT32 m_adpcm_pos; UINT32 m_adpcm_end; bool m_adpcm_playing; - int m_mcu_sim; + bool m_mcu_sim; int m_from_main; int m_from_mcu; int m_main_sent; @@ -65,20 +68,20 @@ public: DECLARE_WRITE8_MEMBER(mcu_w); DECLARE_READ8_MEMBER(mcu_r); DECLARE_WRITE8_MEMBER(bankswitch_w); - DECLARE_WRITE8_MEMBER(renegade_coin_counter_w); + DECLARE_WRITE8_MEMBER(coincounter_w); void mcu_process_command(); - DECLARE_READ8_MEMBER(renegade_68705_port_a_r); - DECLARE_WRITE8_MEMBER(renegade_68705_port_a_w); - DECLARE_WRITE8_MEMBER(renegade_68705_ddr_a_w); - DECLARE_READ8_MEMBER(renegade_68705_port_b_r); - DECLARE_WRITE8_MEMBER(renegade_68705_port_b_w); - DECLARE_WRITE8_MEMBER(renegade_68705_ddr_b_w); - DECLARE_READ8_MEMBER(renegade_68705_port_c_r); - DECLARE_WRITE8_MEMBER(renegade_68705_port_c_w); - DECLARE_WRITE8_MEMBER(renegade_68705_ddr_c_w); + DECLARE_READ8_MEMBER(_68705_port_a_r); + DECLARE_WRITE8_MEMBER(_68705_port_a_w); + DECLARE_WRITE8_MEMBER(_68705_ddr_a_w); + DECLARE_READ8_MEMBER(_68705_port_b_r); + DECLARE_WRITE8_MEMBER(_68705_port_b_w); + DECLARE_WRITE8_MEMBER(_68705_ddr_b_w); + DECLARE_READ8_MEMBER(_68705_port_c_r); + DECLARE_WRITE8_MEMBER(_68705_port_c_w); + DECLARE_WRITE8_MEMBER(_68705_ddr_c_w); DECLARE_WRITE8_MEMBER(fg_videoram_w); DECLARE_WRITE8_MEMBER(bg_videoram_w); - DECLARE_WRITE8_MEMBER(renegade_flipscreen_w); + DECLARE_WRITE8_MEMBER(flipscreen_w); DECLARE_WRITE8_MEMBER(scroll_lsb_w); DECLARE_WRITE8_MEMBER(scroll_msb_w); DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r); @@ -87,15 +90,18 @@ public: DECLARE_WRITE8_MEMBER(adpcm_stop_w); DECLARE_WRITE_LINE_MEMBER(adpcm_int); + TILE_GET_INFO_MEMBER(get_bg_tilemap_info); + TILE_GET_INFO_MEMBER(get_fg_tilemap_info); + + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); + DECLARE_DRIVER_INIT(kuniokun); DECLARE_DRIVER_INIT(kuniokunb); DECLARE_DRIVER_INIT(renegade); - TILE_GET_INFO_MEMBER(get_bg_tilemap_info); - TILE_GET_INFO_MEMBER(get_fg_tilemap_info); virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); - UINT32 screen_update_renegade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(renegade_interrupt); + + UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); }; diff --git a/src/mame/video/renegade.c b/src/mame/video/renegade.c index af4d9c137b4..9a87e960c92 100644 --- a/src/mame/video/renegade.c +++ b/src/mame/video/renegade.c @@ -24,7 +24,7 @@ WRITE8_MEMBER(renegade_state::fg_videoram_w) m_fg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(renegade_state::renegade_flipscreen_w) +WRITE8_MEMBER(renegade_state::flipscreen_w) { flip_screen_set(~data & 0x01); } @@ -121,7 +121,7 @@ void renegade_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec } } -UINT32 renegade_state::screen_update_renegade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +UINT32 renegade_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->set_scrollx(0, m_scrollx); m_bg_tilemap->draw(screen, bitmap, cliprect, 0 , 0);