From 7ff62b4b455e08a797709abe9c9444bf9858c64b Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 9 Jun 2015 14:41:23 +0200 Subject: [PATCH] grchamp.c: added save state support (nw) --- src/mame/drivers/grchamp.c | 49 +++++++++++++++---------- src/mame/includes/grchamp.h | 71 ++++++++++++++++++++----------------- src/mame/video/grchamp.c | 8 ++--- 3 files changed, 73 insertions(+), 55 deletions(-) diff --git a/src/mame/drivers/grchamp.c b/src/mame/drivers/grchamp.c index 799e3498574..d10424246a8 100644 --- a/src/mame/drivers/grchamp.c +++ b/src/mame/drivers/grchamp.c @@ -78,7 +78,20 @@ * *************************************/ -void grchamp_state::machine_reset() +void grchamp_state::machine_start() +{ + save_item(NAME(m_cpu0_out)); + save_item(NAME(m_cpu1_out)); + save_item(NAME(m_comm_latch)); + save_item(NAME(m_comm_latch2)); + save_item(NAME(m_ledlatch)); + save_item(NAME(m_ledaddr)); + save_item(NAME(m_ledram)); + save_item(NAME(m_collide)); + save_item(NAME(m_collmode)); +} + + void grchamp_state::machine_reset() { /* if the coin system is 1 way, lock Coin B (Page 40) */ coin_lockout_w(machine(), 1, (ioport("DSWB")->read() & 0x10) ? 1 : 0); @@ -92,14 +105,14 @@ void grchamp_state::machine_reset() * *************************************/ -INTERRUPT_GEN_MEMBER(grchamp_state::grchamp_cpu0_interrupt) +INTERRUPT_GEN_MEMBER(grchamp_state::cpu0_interrupt) { if (m_cpu0_out[0] & 0x01) device.execute().set_input_line(0, ASSERT_LINE); } -INTERRUPT_GEN_MEMBER(grchamp_state::grchamp_cpu1_interrupt) +INTERRUPT_GEN_MEMBER(grchamp_state::cpu1_interrupt) { if (m_cpu1_out[4] & 0x01) device.execute().set_input_line(0, ASSERT_LINE); @@ -409,22 +422,22 @@ READ8_MEMBER(grchamp_state::main_to_sub_comm_r) * *************************************/ -WRITE8_MEMBER(grchamp_state::grchamp_portA_0_w) +WRITE8_MEMBER(grchamp_state::portA_0_w) { m_discrete->write(space, GRCHAMP_A_DATA, data); } -WRITE8_MEMBER(grchamp_state::grchamp_portB_0_w) +WRITE8_MEMBER(grchamp_state::portB_0_w) { m_discrete->write(space, GRCHAMP_B_DATA, 255-data); } -WRITE8_MEMBER(grchamp_state::grchamp_portA_2_w) +WRITE8_MEMBER(grchamp_state::portA_2_w) { /* A0/A1 modify the output of AY8910 #2 */ /* A7 contributes to the discrete logic hanging off of AY8910 #0 */ } -WRITE8_MEMBER(grchamp_state::grchamp_portB_2_w) +WRITE8_MEMBER(grchamp_state::portB_2_w) { /* B0 connects elsewhere */ } @@ -505,9 +518,9 @@ ADDRESS_MAP_END /* complete memory map derived from schematics */ static ADDRESS_MAP_START( sub_map, AS_PROGRAM, 8, grchamp_state ) AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(grchamp_left_w) AM_SHARE("leftram") - AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(grchamp_right_w) AM_SHARE("rightram") - AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(grchamp_center_w) AM_SHARE("centerram") + AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(left_w) AM_SHARE("leftram") + AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(right_w) AM_SHARE("rightram") + AM_RANGE(0x3000, 0x37ff) AM_RAM_WRITE(center_w) AM_SHARE("centerram") AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0400) AM_RAM AM_RANGE(0x5000, 0x6fff) AM_ROM ADDRESS_MAP_END @@ -636,13 +649,13 @@ static MACHINE_CONFIG_START( grchamp, grchamp_state ) MCFG_CPU_ADD("maincpu", Z80, PIXEL_CLOCK/2) MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(main_portmap) - MCFG_CPU_VBLANK_INT_DRIVER("screen", grchamp_state, grchamp_cpu0_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", grchamp_state, cpu0_interrupt) /* GAME BOARD */ MCFG_CPU_ADD("sub", Z80, PIXEL_CLOCK/2) MCFG_CPU_PROGRAM_MAP(sub_map) MCFG_CPU_IO_MAP(sub_portmap) - MCFG_CPU_VBLANK_INT_DRIVER("screen", grchamp_state, grchamp_cpu1_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", grchamp_state, cpu1_interrupt) /* SOUND BOARD */ MCFG_CPU_ADD("audiocpu", Z80, SOUND_CLOCK/2) @@ -660,23 +673,23 @@ static MACHINE_CONFIG_START( grchamp, grchamp_state ) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(grchamp_state, screen_update_grchamp) + MCFG_SCREEN_UPDATE_DRIVER(grchamp_state, screen_update) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ay1", AY8910, SOUND_CLOCK/4) /* 3B */ - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(grchamp_state, grchamp_portA_0_w)) - MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(grchamp_state, grchamp_portB_0_w)) + MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(grchamp_state, portA_0_w)) + MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(grchamp_state, portB_0_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.2) MCFG_SOUND_ADD("ay2", AY8910, SOUND_CLOCK/4) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.2) MCFG_SOUND_ADD("ay3", AY8910, SOUND_CLOCK/4) /* 1B */ - MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(grchamp_state, grchamp_portA_2_w)) - MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(grchamp_state, grchamp_portB_2_w)) + MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(grchamp_state, portA_2_w)) + MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(grchamp_state, portB_2_w)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.2) MCFG_SOUND_ADD("discrete", DISCRETE, 0) @@ -747,4 +760,4 @@ ROM_END * *************************************/ -GAMEL( 1981, grchamp, 0, grchamp, grchamp, driver_device, 0, ROT270, "Taito", "Grand Champion", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS, layout_grchamp ) +GAMEL( 1981, grchamp, 0, grchamp, grchamp, driver_device, 0, ROT270, "Taito", "Grand Champion", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE, layout_grchamp ) diff --git a/src/mame/includes/grchamp.h b/src/mame/includes/grchamp.h index b14083bdae5..a9c4d4dbf66 100644 --- a/src/mame/includes/grchamp.h +++ b/src/mame/includes/grchamp.h @@ -13,19 +13,34 @@ class grchamp_state : public driver_device public: grchamp_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_radarram(*this, "radarram"), - m_videoram(*this, "videoram"), - m_spriteram(*this, "spriteram"), - m_leftram(*this, "leftram"), - m_rightram(*this, "rightram"), - m_centerram(*this, "centerram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_subcpu(*this, "sub"), m_discrete(*this, "discrete"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), - m_screen(*this, "screen") { } + m_screen(*this, "screen"), + m_radarram(*this, "radarram"), + m_videoram(*this, "videoram"), + m_spriteram(*this, "spriteram"), + m_leftram(*this, "leftram"), + m_rightram(*this, "rightram"), + m_centerram(*this, "centerram") { } + + required_device m_maincpu; + required_device m_audiocpu; + required_device m_subcpu; + required_device m_discrete; + required_device m_gfxdecode; + required_device m_palette; + required_device m_screen; + + required_shared_ptr m_radarram; + required_shared_ptr m_videoram; + required_shared_ptr m_spriteram; + required_shared_ptr m_leftram; + required_shared_ptr m_rightram; + required_shared_ptr m_centerram; UINT8 m_cpu0_out[16]; UINT8 m_cpu1_out[16]; @@ -40,13 +55,6 @@ public: UINT16 m_collide; UINT8 m_collmode; - required_shared_ptr m_radarram; - required_shared_ptr m_videoram; - required_shared_ptr m_spriteram; - required_shared_ptr m_leftram; - required_shared_ptr m_rightram; - required_shared_ptr m_centerram; - bitmap_ind16 m_work_bitmap; tilemap_t * m_text_tilemap; tilemap_t * m_left_tilemap; @@ -64,37 +72,34 @@ public: DECLARE_WRITE8_MEMBER(main_to_sub_comm_w); DECLARE_READ8_MEMBER(main_to_sub_comm_r); UINT8 get_pc3259_bits(int offs); - DECLARE_WRITE8_MEMBER(grchamp_left_w); - DECLARE_WRITE8_MEMBER(grchamp_center_w); - DECLARE_WRITE8_MEMBER(grchamp_right_w); - DECLARE_WRITE8_MEMBER(grchamp_portA_0_w); - DECLARE_WRITE8_MEMBER(grchamp_portB_0_w); - DECLARE_WRITE8_MEMBER(grchamp_portA_2_w); - DECLARE_WRITE8_MEMBER(grchamp_portB_2_w); + DECLARE_WRITE8_MEMBER(left_w); + DECLARE_WRITE8_MEMBER(center_w); + DECLARE_WRITE8_MEMBER(right_w); + DECLARE_WRITE8_MEMBER(portA_0_w); + DECLARE_WRITE8_MEMBER(portB_0_w); + DECLARE_WRITE8_MEMBER(portA_2_w); + DECLARE_WRITE8_MEMBER(portB_2_w); + TILE_GET_INFO_MEMBER(get_text_tile_info); TILE_GET_INFO_MEMBER(get_left_tile_info); TILE_GET_INFO_MEMBER(get_right_tile_info); TILE_GET_INFO_MEMBER(get_center_tile_info); - DECLARE_PALETTE_INIT(grchamp); TILEMAP_MAPPER_MEMBER(get_memory_offset); + + DECLARE_PALETTE_INIT(grchamp); + virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); - void palette_generate(); - UINT32 screen_update_grchamp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(grchamp_cpu0_interrupt); - INTERRUPT_GEN_MEMBER(grchamp_cpu1_interrupt); + + INTERRUPT_GEN_MEMBER(cpu0_interrupt); + INTERRUPT_GEN_MEMBER(cpu1_interrupt); TIMER_CALLBACK_MEMBER(main_to_sub_comm_sync_w); + + UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); void draw_objects(int y, UINT8 *objdata); int collision_check(bitmap_ind16 &bitmap, int which ); void draw_fog(bitmap_ind16 &bitmap, const rectangle &cliprect, int fog); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); - required_device m_maincpu; - required_device m_audiocpu; - required_device m_subcpu; - required_device m_discrete; - required_device m_gfxdecode; - required_device m_palette; - required_device m_screen; }; /* Discrete Sound Input Nodes */ diff --git a/src/mame/video/grchamp.c b/src/mame/video/grchamp.c index 42c9c9c4c03..668fe88cd01 100644 --- a/src/mame/video/grchamp.c +++ b/src/mame/video/grchamp.c @@ -53,19 +53,19 @@ PALETTE_INIT_MEMBER(grchamp_state, grchamp) } -WRITE8_MEMBER(grchamp_state::grchamp_left_w) +WRITE8_MEMBER(grchamp_state::left_w) { m_leftram[offset] = data; m_left_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(grchamp_state::grchamp_center_w) +WRITE8_MEMBER(grchamp_state::center_w) { m_centerram[offset] = data; m_center_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(grchamp_state::grchamp_right_w) +WRITE8_MEMBER(grchamp_state::right_w) { m_rightram[offset] = data; m_right_tilemap->mark_tile_dirty(offset); @@ -343,7 +343,7 @@ void grchamp_state::draw_objects(int y, UINT8 *objdata) } -UINT32 grchamp_state::screen_update_grchamp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +UINT32 grchamp_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { static const rgb_t objpix_lookup[8] = {