summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/grchamp.c49
-rw-r--r--src/mame/includes/grchamp.h71
-rw-r--r--src/mame/video/grchamp.c8
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<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 */
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] =
{