mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
circus: split classes part1
This commit is contained in:
parent
ae2eb005fa
commit
c8d2f8ddcf
@ -1,6 +1,6 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mike Coates
|
||||
/***************************************************************************
|
||||
/*******************************************************************************
|
||||
|
||||
Exidy 'Universal' Game Board V1
|
||||
|
||||
@ -14,7 +14,7 @@ Rip Cord May 1979 6502 RC30-0014 (cpu) 0015 (snd)
|
||||
9023-9026, 9027-9034, 9035
|
||||
Crash July 1979 6502 CR30-3162 (cpu) 3161 (snd) 9036 (?)
|
||||
|
||||
***************************************************************************
|
||||
********************************************************************************
|
||||
|
||||
driver (initial) by Mike Coates
|
||||
|
||||
@ -34,50 +34,89 @@ A000 Control Switches
|
||||
C000 Option Switches
|
||||
D000 Paddle Position and Interrupt Reset (where applicable)
|
||||
|
||||
NOTES:
|
||||
- Circus: Taito licensed and released the game as "Acrobat TV"
|
||||
********************************************************************************
|
||||
|
||||
TODO:
|
||||
- generic video timing (vsync, vblank, # of scanlines)
|
||||
- circus/ripcord collision detection is accurate?
|
||||
- crash: irq timing
|
||||
- improve discrete sound
|
||||
NOTES:
|
||||
- Circus: Taito licensed and released the game as "Acrobat TV"
|
||||
|
||||
***************************************************************************/
|
||||
TODO:
|
||||
- generic video timing (vsync, vblank, # of scanlines)
|
||||
- circus/ripcord collision detection is accurate?
|
||||
- crash: irq timing
|
||||
- improve discrete sound
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "circus.h"
|
||||
|
||||
#include "cpu/m6502/m6502.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
#include "circus.lh"
|
||||
#include "crash.lh"
|
||||
|
||||
|
||||
uint8_t circus_state::circus_paddle_r()
|
||||
|
||||
/*******************************************************************************
|
||||
Initialization
|
||||
*******************************************************************************/
|
||||
|
||||
void circus_state::machine_start()
|
||||
{
|
||||
// also clears irq
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
return ioport("PADDLE")->read();
|
||||
save_item(NAME(m_clown_x));
|
||||
save_item(NAME(m_clown_y));
|
||||
save_item(NAME(m_clown_z));
|
||||
}
|
||||
|
||||
void circus_state::circus_map(address_map &map)
|
||||
void circus_state::machine_reset()
|
||||
{
|
||||
m_clown_x = 0;
|
||||
m_clown_y = 0;
|
||||
m_clown_z = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Misc. I/O
|
||||
*******************************************************************************/
|
||||
|
||||
uint8_t circus_state::paddle_r()
|
||||
{
|
||||
// also clears irq
|
||||
if (!machine().side_effects_disabled())
|
||||
m_maincpu->set_input_line(0, CLEAR_LINE);
|
||||
|
||||
return m_paddle->read();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Address Maps
|
||||
*******************************************************************************/
|
||||
|
||||
void circus_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x01ff).ram();
|
||||
map(0x1000, 0x1fff).rom();
|
||||
map(0x2000, 0x2000).w(FUNC(circus_state::circus_clown_x_w));
|
||||
map(0x3000, 0x3000).w(FUNC(circus_state::circus_clown_y_w));
|
||||
map(0x4000, 0x43ff).ram().w(FUNC(circus_state::circus_videoram_w)).share("videoram");
|
||||
map(0x8000, 0x8000).ram().w(FUNC(circus_state::circus_clown_z_w));
|
||||
map(0x2000, 0x2000).w(FUNC(circus_state::clown_x_w));
|
||||
map(0x3000, 0x3000).w(FUNC(circus_state::clown_y_w));
|
||||
map(0x4000, 0x43ff).ram().w(FUNC(circus_state::videoram_w)).share("videoram");
|
||||
map(0x8000, 0x8000).ram().w(FUNC(circus_state::clown_z_w));
|
||||
map(0xa000, 0xa000).portr("INPUTS");
|
||||
map(0xc000, 0xc000).portr("DSW");
|
||||
map(0xd000, 0xd000).r(FUNC(circus_state::circus_paddle_r));
|
||||
map(0xd000, 0xd000).r(FUNC(circus_state::paddle_r));
|
||||
map(0xf000, 0xffff).rom();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Input Ports
|
||||
*******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( circus )
|
||||
PORT_START("INPUTS")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
|
||||
@ -218,6 +257,11 @@ static INPUT_PORTS_START( ripcord )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
GFX Layouts
|
||||
*******************************************************************************/
|
||||
|
||||
static const gfx_layout charlayout =
|
||||
{
|
||||
8,8, /* 8*8 characters */
|
||||
@ -265,45 +309,36 @@ GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Machine drivers
|
||||
***************************************************************************/
|
||||
void circus_state::machine_start()
|
||||
/*******************************************************************************
|
||||
Machine Configs
|
||||
*******************************************************************************/
|
||||
|
||||
void circus_state::base_mcfg(machine_config &config)
|
||||
{
|
||||
save_item(NAME(m_clown_x));
|
||||
save_item(NAME(m_clown_y));
|
||||
save_item(NAME(m_clown_z));
|
||||
}
|
||||
// basic machine hardware
|
||||
M6502(config, m_maincpu, XTAL(11'289'000) / 16); // 705.562kHz
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &circus_state::main_map);
|
||||
|
||||
void circus_state::machine_reset()
|
||||
{
|
||||
m_clown_x = 0;
|
||||
m_clown_y = 0;
|
||||
m_clown_z = 0;
|
||||
}
|
||||
|
||||
|
||||
void circus_state::circus(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, XTAL(11'289'000) / 16); /* 705.562kHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &circus_state::circus_map);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_video_attributes(VIDEO_ALWAYS_UPDATE); /* needed for proper hardware collisions */
|
||||
screen.set_refresh_hz(57);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(3500)); /* (complete guess) */
|
||||
screen.set_size(32*8, 32*8);
|
||||
screen.set_visarea(0*8, 31*8-1, 0*8, 32*8-1);
|
||||
screen.set_screen_update(FUNC(circus_state::screen_update_circus));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_circus);
|
||||
// video hardware
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); // needed for proper hardware collisions
|
||||
m_screen->set_refresh_hz(57);
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3500)); // complete guess
|
||||
m_screen->set_size(32*8, 32*8);
|
||||
m_screen->set_visarea(0*8, 31*8-1, 0*8, 32*8-1);
|
||||
m_screen->set_screen_update(FUNC(circus_state::screen_update));
|
||||
m_screen->set_palette(m_palette);
|
||||
|
||||
PALETTE(config, m_palette, palette_device::MONOCHROME);
|
||||
|
||||
/* sound hardware */
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_circus);
|
||||
}
|
||||
|
||||
void circus_state::circus(machine_config &config)
|
||||
{
|
||||
base_mcfg(config);
|
||||
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
SAMPLES(config, m_samples);
|
||||
@ -315,27 +350,14 @@ void circus_state::circus(machine_config &config)
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
void circus_state::robotbwl(machine_config &config)
|
||||
void robotbwl_state::robotbwl(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, XTAL(11'289'000) / 16); /* 705.562kHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &circus_state::circus_map);
|
||||
// does not generate irq!
|
||||
base_mcfg(config);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(57);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(3500)); /* (complete guess) */
|
||||
screen.set_size(32*8, 32*8);
|
||||
screen.set_visarea(0*8, 31*8-1, 0*8, 32*8-1);
|
||||
screen.set_screen_update(FUNC(circus_state::screen_update_robotbwl));
|
||||
screen.set_palette(m_palette);
|
||||
GFXDECODE(config.replace(), m_gfxdecode, m_palette, gfx_robotbwl);
|
||||
m_screen->set_video_attributes(0);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_robotbwl);
|
||||
|
||||
PALETTE(config, m_palette, palette_device::MONOCHROME);
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
SAMPLES(config, m_samples);
|
||||
@ -347,35 +369,15 @@ void circus_state::robotbwl(machine_config &config)
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(circus_state::crash_scanline)
|
||||
void crash_state::crash(machine_config &config)
|
||||
{
|
||||
int scanline = param;
|
||||
base_mcfg(config);
|
||||
|
||||
if(scanline == 256 || scanline == 0) // vblank-out / in irq
|
||||
m_maincpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
// vblank-out / in irq
|
||||
m_screen->screen_vblank().set([this](int state) { m_maincpu->set_input_line(0, ASSERT_LINE); });
|
||||
m_screen->set_video_attributes(0);
|
||||
|
||||
void circus_state::crash(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, XTAL(11'289'000) / 16); /* 705.562kHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &circus_state::circus_map);
|
||||
TIMER(config, "scantimer").configure_scanline(FUNC(circus_state::crash_scanline), "screen", 0, 1);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_refresh_hz(57);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(3500)); /* (complete guess) */
|
||||
screen.set_size(40*8, 40*8); // TODO // to do what?
|
||||
screen.set_visarea(0*8, 31*8-1, 0*8, 32*8-1);
|
||||
screen.set_screen_update(FUNC(circus_state::screen_update_crash));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_circus);
|
||||
|
||||
PALETTE(config, m_palette, palette_device::MONOCHROME);
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
SAMPLES(config, m_samples);
|
||||
@ -387,27 +389,11 @@ void circus_state::crash(machine_config &config)
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.80);
|
||||
}
|
||||
|
||||
void circus_state::ripcord(machine_config &config)
|
||||
void ripcord_state::ripcord(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M6502(config, m_maincpu, XTAL(11'289'000) / 16); /* 705.562kHz */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &circus_state::circus_map);
|
||||
base_mcfg(config);
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_video_attributes(VIDEO_ALWAYS_UPDATE); /* needed for proper hardware collisions */
|
||||
screen.set_refresh_hz(57);
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(3500)); /* (complete guess) */
|
||||
screen.set_size(32*8, 32*8);
|
||||
screen.set_visarea(0*8, 31*8-1, 0*8, 32*8-1);
|
||||
screen.set_screen_update(FUNC(circus_state::screen_update_ripcord));
|
||||
screen.set_palette(m_palette);
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_circus);
|
||||
|
||||
PALETTE(config, m_palette, palette_device::MONOCHROME);
|
||||
|
||||
/* sound hardware */
|
||||
// sound hardware
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
SAMPLES(config, m_samples);
|
||||
@ -419,6 +405,12 @@ void circus_state::ripcord(machine_config &config)
|
||||
m_discrete->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
ROM Definitions
|
||||
*******************************************************************************/
|
||||
|
||||
ROM_START( circus )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) // code
|
||||
ROM_LOAD( "9004a.1a", 0x1000, 0x0200, CRC(7654ea75) SHA1(fa29417618157002b8ecb21f4c15104c8145a742) )
|
||||
@ -440,7 +432,7 @@ ROM_START( circus )
|
||||
ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite
|
||||
ROM_LOAD( "9012.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) )
|
||||
|
||||
ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but might match
|
||||
ROM_REGION( 0x400, "proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but might match
|
||||
ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, BAD_DUMP CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) )
|
||||
ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, BAD_DUMP CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) )
|
||||
ROM_END
|
||||
@ -466,7 +458,7 @@ ROM_START( circuso ) // older set, there exist several bootlegs identical to thi
|
||||
ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite
|
||||
ROM_LOAD( "9012.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) )
|
||||
|
||||
ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but might match
|
||||
ROM_REGION( 0x400, "proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but might match
|
||||
ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, BAD_DUMP CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) )
|
||||
ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, BAD_DUMP CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) )
|
||||
ROM_END
|
||||
@ -492,7 +484,7 @@ ROM_START( springbd )
|
||||
ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite
|
||||
ROM_LOAD( "93448.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) )
|
||||
|
||||
ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but should match
|
||||
ROM_REGION( 0x400, "proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but should match
|
||||
ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, BAD_DUMP CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) )
|
||||
ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, BAD_DUMP CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) )
|
||||
ROM_END
|
||||
@ -509,17 +501,17 @@ ROM_START( robotbwl )
|
||||
ROM_LOAD( "4027b.9a", 0xfe00, 0x0200, CRC(07487e27) SHA1(b5528fb3fec474df2b66f36e28df13a7e81f9ce3) )
|
||||
|
||||
ROM_REGION( 0x0800, "gfx1", 0 ) // character set
|
||||
ROM_LOAD( "4010.4c", 0x0000, 0x0200, CRC(a5f7acb9) SHA1(556dd34d0fa50415b128477e208e96bf0c050c2c) ) // these are all N82S141N BPROMs
|
||||
ROM_LOAD( "4011.3c", 0x0200, 0x0200, CRC(d5380c9b) SHA1(b9670e87011a1b3aebd1d386f1fe6a74f8c77be9) )
|
||||
ROM_LOAD( "4012.2c", 0x0400, 0x0200, CRC(47b3e39c) SHA1(393c680fba3bd384e2c773150c3bae4d735a91bf) )
|
||||
ROM_LOAD( "4013.1c", 0x0600, 0x0200, CRC(b2991e7e) SHA1(32b6d42bb9312d6cbe5b4113fcf2262bfeef3777) )
|
||||
ROM_LOAD( "4010.4c", 0x0000, 0x0200, CRC(a5f7acb9) SHA1(556dd34d0fa50415b128477e208e96bf0c050c2c) ) // these are all N82S141N BPROMs
|
||||
ROM_LOAD( "4011.3c", 0x0200, 0x0200, CRC(d5380c9b) SHA1(b9670e87011a1b3aebd1d386f1fe6a74f8c77be9) )
|
||||
ROM_LOAD( "4012.2c", 0x0400, 0x0200, CRC(47b3e39c) SHA1(393c680fba3bd384e2c773150c3bae4d735a91bf) )
|
||||
ROM_LOAD( "4013.1c", 0x0600, 0x0200, CRC(b2991e7e) SHA1(32b6d42bb9312d6cbe5b4113fcf2262bfeef3777) )
|
||||
|
||||
ROM_REGION( 0x0020, "gfx2", ROMREGION_INVERT ) // ball sprite
|
||||
ROM_LOAD( "6000.14d",0x0000, 0x0020, CRC(a402ac06) SHA1(3bd75630786bcc86d9e9fbc826adc909eef9b41f) )
|
||||
ROM_LOAD( "6000.14d", 0x0000, 0x0020, CRC(a402ac06) SHA1(3bd75630786bcc86d9e9fbc826adc909eef9b41f) )
|
||||
|
||||
ROM_REGION( 0x100, "extra_proms", 0 ) // timing? not used by the emulation
|
||||
ROM_LOAD( "5000.4d", 0x000, 0x020, NO_DUMP ) // both of these are MMI6306-1J (N82S131 equivalent) BPROMs
|
||||
ROM_LOAD( "5001.5d", 0x020, 0x020, NO_DUMP )
|
||||
ROM_REGION( 0x0100, "proms", 0 ) // timing? not used by the emulation
|
||||
ROM_LOAD( "5000.4d", 0x0000, 0x0020, NO_DUMP ) // both of these are MMI6306-1J (N82S131 equivalent) BPROMs
|
||||
ROM_LOAD( "5001.5d", 0x0020, 0x0020, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
ROM_START( crash )
|
||||
@ -544,8 +536,6 @@ ROM_START( crash )
|
||||
ROM_LOAD( "crash.d14", 0x0000, 0x0200, CRC(833f81e4) SHA1(78a0ace3510546691ecaf6f6275cb3269495edc9) )
|
||||
ROM_END
|
||||
|
||||
// colours: the playfield is cyan. The entire centre box (and contents) is pale green
|
||||
// see http://forum.arcadecontrols.com/index.php/topic,146323.msg1526542.html
|
||||
ROM_START( crasha )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 ) // code
|
||||
ROM_LOAD( "nsa7.a8", 0x1000, 0x0800, CRC(2e47c5ee) SHA1(4712ec3080ce3797420266d6efb26e7d146a965a) )
|
||||
@ -622,11 +612,20 @@ void circus_state::init_ripcord()
|
||||
m_game_id = 4;
|
||||
}
|
||||
|
||||
GAMEL( 1977, circus, 0, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus )
|
||||
GAMEL( 1977, circuso, circus, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV (older)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus )
|
||||
GAMEL( 1977, springbd, circus, circus, circus, circus_state, init_circus, ROT0, "bootleg (Sub-Electro)", "Springboard (bootleg of Circus)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // looks like a text hack, but we've seen 2 identical copies so it's worth supporting
|
||||
GAME( 1977, robotbwl, 0, robotbwl, robotbwl, circus_state, init_robotbwl, ROT0, "Exidy", "Robot Bowl", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
GAMEL( 1979, crash, 0, crash, crash, circus_state, init_crash, ROT0, "Exidy", "Crash", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, crasha, crash, crash, crash, circus_state, init_crash, ROT0, "Exidy", "Crash (alt)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, smash, crash, crash, crash, circus_state, init_crash, ROT0, "bootleg", "Smash (Crash bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) // looks like a text hack, but it also had a different bezel
|
||||
GAME( 1979, ripcord, 0, ripcord, ripcord, circus_state, init_ripcord, ROT0, "Exidy", "Rip Cord", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Game Drivers
|
||||
*******************************************************************************/
|
||||
|
||||
GAMEL( 1977, circus, 0, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // named Acrobat TV when Taito published it in Japan
|
||||
GAMEL( 1977, circuso, circus, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV (older)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // "
|
||||
GAMEL( 1977, springbd, circus, circus, circus, circus_state, init_circus, ROT0, "bootleg (Sub-Electro)", "Springboard (bootleg of Circus)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // looks like a text hack, but it also had a different bezel
|
||||
|
||||
GAME( 1977, robotbwl, 0, robotbwl, robotbwl, robotbwl_state, init_robotbwl, ROT0, "Exidy", "Robot Bowl", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
GAMEL( 1979, crash, 0, crash, crash, crash_state, init_crash, ROT0, "Exidy", "Crash (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, crasha, crash, crash, crash, crash_state, init_crash, ROT0, "Exidy", "Crash (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash )
|
||||
GAMEL( 1979, smash, crash, crash, crash, crash_state, init_crash, ROT0, "bootleg", "Smash (Crash bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) // looks like a text hack, but it also had a different bezel
|
||||
|
||||
GAME( 1979, ripcord, 0, ripcord, ripcord, ripcord_state, init_ripcord, ROT0, "Exidy", "Rip Cord", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
@ -5,28 +5,31 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "sound/samples.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "tilemap.h"
|
||||
|
||||
// circus
|
||||
|
||||
class circus_state : public driver_device
|
||||
{
|
||||
public:
|
||||
circus_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_samples(*this, "samples"),
|
||||
m_discrete(*this, "discrete"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette")
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_paddle(*this, "PADDLE")
|
||||
{ }
|
||||
|
||||
void robotbwl(machine_config &config);
|
||||
void ripcord(machine_config &config);
|
||||
void crash(machine_config &config);
|
||||
void base_mcfg(machine_config &config);
|
||||
void circus(machine_config &config);
|
||||
|
||||
void init_ripcord();
|
||||
@ -39,51 +42,102 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
/* memory pointers */
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
int m_clown_x = 0;
|
||||
int m_clown_y = 0;
|
||||
int m_clown_z = 0;
|
||||
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<samples_device> m_samples;
|
||||
required_device<discrete_sound_device> m_discrete;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_ioport m_paddle;
|
||||
|
||||
tilemap_t *m_bg_tilemap = nullptr;
|
||||
int m_clown_x = 0;
|
||||
int m_clown_y = 0;
|
||||
int m_clown_z = 0;
|
||||
|
||||
/* game id */
|
||||
int m_game_id = 0;
|
||||
uint8_t circus_paddle_r();
|
||||
void circus_videoram_w(offs_t offset, uint8_t data);
|
||||
void circus_clown_x_w(uint8_t data);
|
||||
void circus_clown_y_w(uint8_t data);
|
||||
void circus_clown_z_w(uint8_t data);
|
||||
void videoram_w(offs_t offset, uint8_t data);
|
||||
void clown_x_w(uint8_t data) { m_clown_x = 240 - data; }
|
||||
void clown_y_w(uint8_t data) { m_clown_y = 240 - data; }
|
||||
void clown_z_w(uint8_t data);
|
||||
uint8_t paddle_r();
|
||||
|
||||
TILE_GET_INFO_MEMBER(get_bg_tile_info);
|
||||
uint32_t screen_update_circus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_robotbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_crash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update_ripcord(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(crash_scanline);
|
||||
void draw_line( bitmap_ind16 &bitmap, const rectangle &cliprect, int x1, int y1, int x2, int y2, int dotted );
|
||||
void draw_sprite_collision( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void circus_draw_fg( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void robotbwl_draw_box( bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y );
|
||||
void robotbwl_draw_scoreboard( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void robotbwl_draw_bowling_alley( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void robotbwl_draw_ball( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void crash_draw_car( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
void circus_map(address_map &map);
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_line(bitmap_ind16 &bitmap, const rectangle &cliprect, int x1, int y1, int x2, int y2, int dotted);
|
||||
void draw_sprite_collision(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
|
||||
void main_map(address_map &map);
|
||||
|
||||
private:
|
||||
void draw_fg(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
/*----------- defined in audio/circus.c -----------*/
|
||||
|
||||
|
||||
// robotbwl
|
||||
|
||||
class robotbwl_state : public circus_state
|
||||
{
|
||||
public:
|
||||
robotbwl_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
circus_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void robotbwl(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
|
||||
private:
|
||||
void draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y);
|
||||
void draw_scoreboard(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_bowling_alley(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_ball(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
|
||||
// crash
|
||||
|
||||
class crash_state : public circus_state
|
||||
{
|
||||
public:
|
||||
crash_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
circus_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void crash(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
|
||||
private:
|
||||
void draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
};
|
||||
|
||||
|
||||
// ripcord
|
||||
|
||||
class ripcord_state : public circus_state
|
||||
{
|
||||
public:
|
||||
ripcord_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
circus_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void ripcord(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
|
||||
};
|
||||
|
||||
|
||||
// defined in circus_a.cpp
|
||||
|
||||
DISCRETE_SOUND_EXTERN( circus_discrete );
|
||||
DISCRETE_SOUND_EXTERN( robotbwl_discrete );
|
||||
DISCRETE_SOUND_EXTERN( crash_discrete );
|
||||
|
||||
extern const char *const circus_sample_names[];
|
||||
extern const char *const crash_sample_names[];
|
||||
extern const char *const ripcord_sample_names[];
|
||||
|
@ -1,7 +1,14 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mike Coates
|
||||
/*******************************************************************************
|
||||
|
||||
circus_a.cpp
|
||||
|
||||
Functions to emulate the audio hardware of the machine.
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "sound/samples.h"
|
||||
#include "circus.h"
|
||||
|
||||
const char *const circus_sample_names[] =
|
||||
@ -51,7 +58,7 @@ DISCRETE_SOUND_START(circus_discrete)
|
||||
/************************************************/
|
||||
/* Input register mapping for circus */
|
||||
/************************************************/
|
||||
DISCRETE_INPUTX_NOT(CIRCUS_MUSIC_BIT, 20000, 0, 1)
|
||||
DISCRETE_INPUTX_NOT(CIRCUS_MUSIC_BIT, 20000, 0, 1)
|
||||
|
||||
/************************************************/
|
||||
/* Music is just a 1 bit DAC */
|
||||
@ -133,7 +140,7 @@ DISCRETE_SOUND_START(robotbwl_discrete)
|
||||
/************************************************/
|
||||
/* Input register mapping for robotbwl */
|
||||
/************************************************/
|
||||
DISCRETE_INPUTX_LOGIC(ROBOTBWL_MUSIC_BIT, 30000, 0, 0)
|
||||
DISCRETE_INPUTX_LOGIC(ROBOTBWL_MUSIC_BIT, 30000, 0, 0)
|
||||
|
||||
/************************************************/
|
||||
/* Music is just a 1 bit DAC */
|
||||
|
@ -1,39 +1,30 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Mike Coates
|
||||
/***************************************************************************
|
||||
/*******************************************************************************
|
||||
|
||||
circus.c video
|
||||
circus_v.cpp
|
||||
|
||||
Functions to emulate the video hardware of the machine.
|
||||
|
||||
***************************************************************************/
|
||||
*******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "sound/samples.h"
|
||||
#include "circus.h"
|
||||
|
||||
|
||||
void circus_state::circus_videoram_w(offs_t offset, uint8_t data)
|
||||
/*******************************************************************************
|
||||
Shared
|
||||
*******************************************************************************/
|
||||
|
||||
void circus_state::videoram_w(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_videoram[offset] = data;
|
||||
m_bg_tilemap->mark_tile_dirty(offset);
|
||||
}
|
||||
|
||||
void circus_state::circus_clown_x_w(uint8_t data)
|
||||
{
|
||||
m_clown_x = 240 - data;
|
||||
}
|
||||
|
||||
void circus_state::circus_clown_y_w(uint8_t data)
|
||||
{
|
||||
m_clown_y = 240 - data;
|
||||
}
|
||||
|
||||
TILE_GET_INFO_MEMBER(circus_state::get_bg_tile_info)
|
||||
{
|
||||
int code = m_videoram[tile_index];
|
||||
|
||||
tileinfo.set(0, code, 0, 0);
|
||||
tileinfo.set(0, m_videoram[tile_index], 0, 0);
|
||||
}
|
||||
|
||||
void circus_state::video_start()
|
||||
@ -41,41 +32,39 @@ void circus_state::video_start()
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(circus_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
}
|
||||
|
||||
void circus_state::draw_line( bitmap_ind16 &bitmap, const rectangle &cliprect, int x1, int y1, int x2, int y2, int dotted )
|
||||
void circus_state::draw_line(bitmap_ind16 &bitmap, const rectangle &cliprect, int x1, int y1, int x2, int y2, int dotted)
|
||||
{
|
||||
/* Draws horizontal and Vertical lines only! */
|
||||
int count, skip;
|
||||
|
||||
/* Draw the Line */
|
||||
if (dotted > 0)
|
||||
skip = 2;
|
||||
else
|
||||
skip = 1;
|
||||
// Draws horizontal and Vertical lines only!
|
||||
int skip = dotted ? 2 : 1;
|
||||
|
||||
if (x1 == x2)
|
||||
for (count = y2; count >= y1; count -= skip)
|
||||
{
|
||||
for (int count = y2; count >= y1; count -= skip)
|
||||
bitmap.pix(count, x1) = 1;
|
||||
}
|
||||
else
|
||||
for (count = x2; count >= x1; count -= skip)
|
||||
{
|
||||
for (int count = x2; count >= x1; count -= skip)
|
||||
bitmap.pix(y1, count) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void circus_state::draw_sprite_collision( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void circus_state::draw_sprite_collision(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
gfx_element *sprite_gfx = m_gfxdecode->gfx(1);
|
||||
const uint8_t *sprite_data = sprite_gfx->get_data(m_clown_z);
|
||||
const uint8_t *sprite_data = sprite_gfx->get_data(m_clown_z & 0xf);
|
||||
int collision = 0;
|
||||
|
||||
// draw sprite and check collision on a pixel basis
|
||||
for (int sy = 0; sy < 16; sy++)
|
||||
{
|
||||
int dy = m_clown_x + sy-1;
|
||||
if (dy>=0 && dy<bitmap.height())
|
||||
int dy = m_clown_x + sy - 1;
|
||||
if (dy >= 0 && dy < bitmap.height())
|
||||
{
|
||||
for (int sx = 0; sx < 16; sx++)
|
||||
{
|
||||
int dx = m_clown_y + sx;
|
||||
if (dx>=0 && dx<bitmap.width())
|
||||
if (dx >= 0 && dx < bitmap.width())
|
||||
{
|
||||
int pixel = sprite_data[sy * sprite_gfx->rowbytes() + sx];
|
||||
if (pixel)
|
||||
@ -92,11 +81,15 @@ void circus_state::draw_sprite_collision( bitmap_ind16 &bitmap, const rectangle
|
||||
m_maincpu->set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
void circus_state::circus_draw_fg( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
/* The sync generator hardware is used to */
|
||||
/* draw the border and diving boards */
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Circus
|
||||
*******************************************************************************/
|
||||
|
||||
void circus_state::draw_fg(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
// The sync generator hardware is used to draw the border and diving boards
|
||||
draw_line(bitmap, cliprect, 0, 18, 255, 18, 0);
|
||||
draw_line(bitmap, cliprect, 0, 249, 255, 249, 1);
|
||||
draw_line(bitmap, cliprect, 0, 18, 0, 248, 0);
|
||||
@ -108,58 +101,60 @@ void circus_state::circus_draw_fg( bitmap_ind16 &bitmap, const rectangle &clipre
|
||||
draw_line(bitmap, cliprect, 231, 192, 248, 192, 0);
|
||||
}
|
||||
|
||||
uint32_t circus_state::screen_update_circus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t circus_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
circus_draw_fg(bitmap, cliprect);
|
||||
draw_fg(bitmap, cliprect);
|
||||
draw_sprite_collision(bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void circus_state::robotbwl_draw_box( bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y )
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Robot Bowl
|
||||
*******************************************************************************/
|
||||
|
||||
void robotbwl_state::draw_box(bitmap_ind16 &bitmap, const rectangle &cliprect, int x, int y)
|
||||
{
|
||||
/* Box */
|
||||
// Box
|
||||
int ex = x + 24;
|
||||
int ey = y + 26;
|
||||
|
||||
draw_line(bitmap, cliprect, x, y, ex, y, 0); /* Top */
|
||||
draw_line(bitmap, cliprect, x, ey, ex, ey, 0); /* Bottom */
|
||||
draw_line(bitmap, cliprect, x, y, x, ey, 0); /* Left */
|
||||
draw_line(bitmap, cliprect, ex, y, ex, ey, 0); /* Right */
|
||||
draw_line(bitmap, cliprect, x, y, ex, y, 0); // Top
|
||||
draw_line(bitmap, cliprect, x, ey, ex, ey, 0); // Bottom
|
||||
draw_line(bitmap, cliprect, x, y, x, ey, 0); // Left
|
||||
draw_line(bitmap, cliprect, ex, y, ex, ey, 0); // Right
|
||||
|
||||
/* Score Grid */
|
||||
// Score Grid
|
||||
ey = y + 10;
|
||||
draw_line(bitmap, cliprect, x + 8, ey, ex, ey, 0); /* Horizontal Divide Line */
|
||||
draw_line(bitmap, cliprect, x + 8, ey, ex, ey, 0); // Horizontal Divide Line
|
||||
draw_line(bitmap, cliprect, x + 8, y, x + 8, ey, 0);
|
||||
draw_line(bitmap, cliprect, x + 16, y, x + 16, ey, 0);
|
||||
}
|
||||
|
||||
void circus_state::robotbwl_draw_scoreboard( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void robotbwl_state::draw_scoreboard(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int offs;
|
||||
|
||||
/* The sync generator hardware is used to */
|
||||
/* draw the bowling alley & scorecards */
|
||||
|
||||
for (offs = 15; offs <= 63; offs += 24)
|
||||
// The sync generator hardware is used to draw the bowling alley & scorecards
|
||||
for (int offs = 15; offs <= 63; offs += 24)
|
||||
{
|
||||
robotbwl_draw_box(bitmap, cliprect, offs, 31);
|
||||
robotbwl_draw_box(bitmap, cliprect, offs, 63);
|
||||
robotbwl_draw_box(bitmap, cliprect, offs, 95);
|
||||
draw_box(bitmap, cliprect, offs, 31);
|
||||
draw_box(bitmap, cliprect, offs, 63);
|
||||
draw_box(bitmap, cliprect, offs, 95);
|
||||
|
||||
robotbwl_draw_box(bitmap, cliprect, offs + 152, 31);
|
||||
robotbwl_draw_box(bitmap, cliprect, offs + 152, 63);
|
||||
robotbwl_draw_box(bitmap, cliprect, offs + 152, 95);
|
||||
draw_box(bitmap, cliprect, offs + 152, 31);
|
||||
draw_box(bitmap, cliprect, offs + 152, 63);
|
||||
draw_box(bitmap, cliprect, offs + 152, 95);
|
||||
}
|
||||
|
||||
robotbwl_draw_box(bitmap, cliprect, 39, 127); /* 10th Frame */
|
||||
draw_line(bitmap, cliprect, 39, 137, 47, 137, 0); /* Extra digit box */
|
||||
draw_box(bitmap, cliprect, 39, 127); // 10th Frame
|
||||
draw_line(bitmap, cliprect, 39, 137, 47, 137, 0); // Extra digit box
|
||||
|
||||
robotbwl_draw_box(bitmap, cliprect, 39 + 152, 127);
|
||||
draw_box(bitmap, cliprect, 39 + 152, 127);
|
||||
draw_line(bitmap, cliprect, 39 + 152, 137, 47 + 152, 137, 0);
|
||||
}
|
||||
|
||||
void circus_state::robotbwl_draw_bowling_alley( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void robotbwl_state::draw_bowling_alley(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
draw_line(bitmap, cliprect, 103, 17, 103, 205, 0);
|
||||
draw_line(bitmap, cliprect, 111, 17, 111, 203, 1);
|
||||
@ -167,43 +162,59 @@ void circus_state::robotbwl_draw_bowling_alley( bitmap_ind16 &bitmap, const rect
|
||||
draw_line(bitmap, cliprect, 144, 17, 144, 203, 1);
|
||||
}
|
||||
|
||||
void circus_state::robotbwl_draw_ball( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
void robotbwl_state::draw_ball(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,/* Y is horizontal position */
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,
|
||||
cliprect,
|
||||
m_clown_z,
|
||||
0,
|
||||
0,0,
|
||||
m_clown_y + 8, m_clown_x + 8, 0);
|
||||
m_clown_y + 8, // Y is horizontal position
|
||||
m_clown_x + 8,
|
||||
0);
|
||||
}
|
||||
|
||||
uint32_t circus_state::screen_update_robotbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t robotbwl_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
robotbwl_draw_scoreboard(bitmap, cliprect);
|
||||
robotbwl_draw_bowling_alley(bitmap, cliprect);
|
||||
robotbwl_draw_ball(bitmap, cliprect);
|
||||
draw_scoreboard(bitmap, cliprect);
|
||||
draw_bowling_alley(bitmap, cliprect);
|
||||
draw_ball(bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void circus_state::crash_draw_car( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Crash
|
||||
*******************************************************************************/
|
||||
|
||||
void crash_state::draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,/* Y is horizontal position */
|
||||
cliprect,
|
||||
m_clown_z,
|
||||
0,
|
||||
0,0,
|
||||
m_clown_y, m_clown_x - 1, 0);
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,
|
||||
cliprect,
|
||||
m_clown_z,
|
||||
0,
|
||||
0,0,
|
||||
m_clown_y, // Y is horizontal position
|
||||
m_clown_x - 1,
|
||||
0);
|
||||
}
|
||||
|
||||
uint32_t circus_state::screen_update_crash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t crash_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
crash_draw_car(bitmap, cliprect);
|
||||
draw_car(bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t circus_state::screen_update_ripcord(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Rip Cord
|
||||
*******************************************************************************/
|
||||
|
||||
uint32_t ripcord_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||
draw_sprite_collision(bitmap, cliprect);
|
||||
|
@ -393,6 +393,13 @@ static INPUT_PORTS_START( noahsark )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( berenstn )
|
||||
PORT_INCLUDE( noahsark )
|
||||
|
||||
PORT_MODIFY("IN1")
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
@ -557,4 +564,4 @@ ROM_END
|
||||
// YEAR NAME PARENT MACHINE INPUT CLASS INIT SCREEN COMPANY FULLNAME FLAGS
|
||||
GAME( 1982, tugboat, 0, tugboat, tugboat, tugboat_state, empty_init, ROT90, "Enter-Tech, Ltd.", "Tugboat", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, noahsark, 0, noahsark, noahsark, tugboat_state, empty_init, ROT90, "Enter-Tech, Ltd.", "Noah's Ark", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, berenstn, 0, noahsark, noahsark, tugboat_state, empty_init, ROT90, "Enter-Tech, Ltd.", "The Berenstain Bears in Bigpaw's Cave", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, berenstn, 0, noahsark, berenstn, tugboat_state, empty_init, ROT90, "Enter-Tech, Ltd.", "The Berenstain Bears in Bigpaw's Cave", MACHINE_IMPERFECT_GRAPHICS | MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )
|
||||
|
Loading…
Reference in New Issue
Block a user