mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
grchamp.c: added save state support (nw)
This commit is contained in:
parent
01eef6ee90
commit
7ff62b4b45
@ -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 )
|
||||
|
@ -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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<discrete_device> m_discrete;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
required_shared_ptr<UINT8> m_radarram;
|
||||
required_shared_ptr<UINT8> m_videoram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
required_shared_ptr<UINT8> m_leftram;
|
||||
required_shared_ptr<UINT8> m_rightram;
|
||||
required_shared_ptr<UINT8> 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<UINT8> m_radarram;
|
||||
required_shared_ptr<UINT8> m_videoram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
required_shared_ptr<UINT8> m_leftram;
|
||||
required_shared_ptr<UINT8> m_rightram;
|
||||
required_shared_ptr<UINT8> 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<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<cpu_device> m_subcpu;
|
||||
required_device<discrete_device> m_discrete;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<screen_device> m_screen;
|
||||
};
|
||||
|
||||
/* Discrete Sound Input Nodes */
|
||||
|
@ -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] =
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user