renegade.c: completed save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-05-08 18:12:58 +02:00
parent bedee83f26
commit 1d12e0e909
3 changed files with 72 additions and 51 deletions

View File

@ -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 )

View File

@ -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<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
optional_device<cpu_device> m_mcu;
required_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_memory_bank m_rombank;
required_region_ptr<UINT8> m_adpcmrom;
required_shared_ptr<UINT8> m_fg_videoram;
required_shared_ptr<UINT8> m_bg_videoram;
required_shared_ptr<UINT8> m_spriteram;
required_memory_bank m_rombank;
required_region_ptr<UINT8> 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);
};

View File

@ -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);