by6803.cpp: added a layout for Gen 2 machines.

This commit is contained in:
Robbbert 2021-12-23 01:34:02 +11:00
parent e115a7d07c
commit f02e37489f
2 changed files with 234 additions and 163 deletions

View File

@ -2,20 +2,25 @@
// copyright-holders:Robbbert
/********************************************************************************************
PINBALL
Bally MPU A084-91786-AH06 (6803)
PINBALL
Bally MPU A084-91786-AH06 (6803)
There are no dipswitches; everything is done with a numeric keypad located just inside the
door. The system responds with messages on the display.
The characteristic 6803 pinball has 4x 7-digit displays lined up along the bottom of the
backbox. They show scores, moving messages, and anything else that's needed.
Schematic has a number of mistakes.
Status:
- 2nd gen games boot up and display, some can coin up, but cannot start due to balls missing
ToDo:
- Everything
- Fails PIA test
- Artwork
- Outputs
- 1st gen display
- Commas are missing from the display.
- Code has provision for a round LED, to be added to layout.
- Operator keypad
- Various sound boards
- Inputs, Solenoids vary per game
- Mechanical
*********************************************************************************************/
@ -29,7 +34,7 @@ ToDo:
#include "machine/6821pia.h"
#include "machine/timer.h"
//#include "by6803.lh"
#include "by6803.lh"
namespace {
@ -43,12 +48,12 @@ public:
, m_pia0(*this, "pia0")
, m_pia1(*this, "pia1")
, m_io_test(*this, "TEST")
, m_io_x(*this, "X%u", 0U)
, m_digits(*this, "digit%u", 0U)
, m_leds(*this, "led%u", 0U)
, m_io_keyboard(*this, "X%d", 0U)
, m_digits(*this, "digit%d", 0U)
, m_leds(*this, "led%d", 0U)
, m_io_outputs(*this, "out%d", 0U)
{ }
void init_by6803();
void by6803(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(activity_test);
@ -59,17 +64,17 @@ protected:
virtual void machine_reset() override;
private:
uint8_t port1_r();
void port1_w(uint8_t data);
uint8_t port2_r();
void port2_w(uint8_t data);
uint8_t pia0_a_r();
void pia0_a_w(uint8_t data);
uint8_t pia0_b_r();
void pia0_b_w(uint8_t data);
uint8_t pia1_a_r();
void pia1_a_w(uint8_t data);
void pia1_b_w(uint8_t data);
u8 port1_r();
void port1_w(u8 data);
u8 port2_r();
void port2_w(u8 data);
u8 pia0_a_r();
void pia0_a_w(u8 data);
u8 pia0_b_r();
void pia0_b_w(u8 data);
u8 pia1_a_r();
void pia1_a_w(u8 data);
void pia1_b_w(u8 data);
DECLARE_WRITE_LINE_MEMBER(pia0_ca2_w);
DECLARE_WRITE_LINE_MEMBER(pia0_cb2_w);
DECLARE_WRITE_LINE_MEMBER(pia1_cb2_w);
@ -77,22 +82,23 @@ private:
void by6803_map(address_map &map);
uint8_t m_pia0_a;
uint8_t m_pia0_b;
uint8_t m_pia1_a;
uint8_t m_pia1_b;
bool m_pia0_cb2;
bool m_pia0_timer;
uint8_t m_port1, m_port2;
//uint8_t m_digit;
uint8_t m_segment;
u8 m_pia0_a = 0;
u8 m_pia0_b = 0;
u8 m_pia1_a = 0;
u8 m_pia1_b = 0;
bool m_pia0_cb2 = 0;
bool m_pia0_timer = 0;
u8 m_port1, m_port2 = 0;
u8 m_digit = 0;
u8 m_segment[2]{};
required_device<m6803_cpu_device> m_maincpu;
required_device<pia6821_device> m_pia0;
required_device<pia6821_device> m_pia1;
required_ioport m_io_test;
required_ioport_array<5> m_io_x;
required_ioport_array<6> m_io_keyboard;
output_finder<40> m_digits;
output_finder<1> m_leds;
output_finder<112> m_io_outputs; // 16 solenoids + 96 lamps
};
@ -110,52 +116,65 @@ static INPUT_PORTS_START( by6803 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Activity") PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, by6803_state, activity_test, 0)
PORT_START("X0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
PORT_BIT( 0x0a, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER )
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_NAME("INP01")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_NAME("INP02")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_NAME("INP03")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_NAME("INP04")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_NAME("INP05")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_TILT )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Outhole") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_NAME("INP07")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_X) PORT_NAME("Outhole")
PORT_START("X1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_BIT( 0x38, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_TILT1 ) PORT_NAME("Slam Tilt")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_G) PORT_NAME("INP12")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_H) PORT_NAME("INP13")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Tilt")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Slam Tilt")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_I) PORT_NAME("INP16")
// from here, vary per game
PORT_START("X2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_D)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_F)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_G)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_H)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_J)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_K)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_J) PORT_NAME("INP17")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_K) PORT_NAME("INP18")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_L) PORT_NAME("INP19")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_M) PORT_NAME("INP20")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_N) PORT_NAME("INP21")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_O) PORT_NAME("INP22")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_P) PORT_NAME("INP23")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Q) PORT_NAME("INP24")
PORT_START("X3")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_W)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_U)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_I)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_O)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_R) PORT_NAME("INP25")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_S) PORT_NAME("INP26")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_T) PORT_NAME("INP27")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_U) PORT_NAME("INP28")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_V) PORT_NAME("INP29")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_W) PORT_NAME("INP30")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Y) PORT_NAME("INP31")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_Z) PORT_NAME("INP32")
PORT_START("X4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP33")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP34")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP35")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP36")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP37")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP38")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP39")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP40")
PORT_START("X5")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP41")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("INP42")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("INP43")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("INP44")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("INP45")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("INP46")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("INP47")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("INP48")
INPUT_PORTS_END
INPUT_CHANGED_MEMBER( by6803_state::activity_test )
@ -169,18 +188,18 @@ INPUT_CHANGED_MEMBER( by6803_state::self_test )
m_pia0->ca1_w(newval);
}
uint8_t by6803_state::port1_r()
u8 by6803_state::port1_r()
{
return m_port1;
}
// P10-17 - goes to peripheral bus
void by6803_state::port1_w(uint8_t data)
void by6803_state::port1_w(u8 data)
{
m_port1 = data; // sound data = P10,11,12,13,24; P14-17 unknown
}
uint8_t by6803_state::port2_r()
u8 by6803_state::port2_r()
{
return m_port2;
}
@ -190,7 +209,7 @@ uint8_t by6803_state::port2_r()
// P22 - LED, connects to reset circuit, could be a watchdog
// P23 - high
// P24 - sound strobe
void by6803_state::port2_w(uint8_t data)
void by6803_state::port2_w(u8 data)
{
m_port2 = data;
m_leds[0] = BIT(data, 2); // P22 drives LED
@ -199,19 +218,29 @@ void by6803_state::port2_w(uint8_t data)
// display latch strobes; display blanking
WRITE_LINE_MEMBER( by6803_state::pia0_ca2_w )
{
//printf("CA02=%X ",state);
if (state)
{
// comma info is available in m_pia1_a at this time.
m_digits[m_digit] = m_segment[0];
m_digits[m_digit+16] = m_segment[1];
}
}
// lamp strobe 1 when high
WRITE_LINE_MEMBER( by6803_state::pia0_cb2_w )
{
//printf("CB02=%X ",state);
}
// sol bank select (0 to enable sol selection)
WRITE_LINE_MEMBER( by6803_state::pia1_cb2_w )
{
//printf("CB12=%X ",state);
}
uint8_t by6803_state::pia0_a_r()
u8 by6803_state::pia0_a_r()
{
return m_pia0_a;
}
@ -221,65 +250,51 @@ uint8_t by6803_state::pia0_a_r()
// d0-3 lamp rows & d5=0 & pia0:cb2=1 (1st lamp bank)
// d0-3 lamp rows & d6=0 & pia0:cb2=1 (2nd lamp bank)
// d0-3 lamp rows & d7=0 & pia0:cb2=1 (3rd lamp bank)
void by6803_state::pia0_a_w(uint8_t data)
void by6803_state::pia0_a_w(u8 data)
{
m_pia0_a = data;
#if 0
// This is all wrong
switch (m_pia0_a)
if ((data & 15)==14)
{
case 0x10: // wrong
m_digits[m_digit] = m_segment;
break;
case 0x1d:
m_digits[8+m_digit] = m_segment;
break;
case 0x1b:
m_digits[16+m_digit] = m_segment;
break;
case 0x07:
m_digits[24+m_digit] = m_segment;
break;
case 0x0f:
m_digits[32+m_digit] m_segment;
break;
default:
break;
m_digit = data >> 4;
m_segment[0] = bitswap<8>(m_pia1_a, 0, 7, 6, 5, 4, 3, 2, 1) ^ 0x80;
}
else
if ((data & 15)==13)
{
m_segment[1] = bitswap<8>(m_pia1_a, 0, 7, 6, 5, 4, 3, 2, 1) ^ 0x80;
}
#endif
}
// switch returns
uint8_t by6803_state::pia0_b_r()
u8 by6803_state::pia0_b_r()
{
uint8_t data = 0;
u8 data = 0;
for (unsigned i = 0; m_io_x.size() > i; ++i)
for (u8 i = 0; i < 6; i++)
if (BIT(m_pia0_a, i))
data |= m_io_x[i]->read();
data |= m_io_keyboard[i]->read();
return data;
}
void by6803_state::pia0_b_w(uint8_t data)
void by6803_state::pia0_b_w(u8 data)
{
m_pia0_b = data;
}
uint8_t by6803_state::pia1_a_r()
u8 by6803_state::pia1_a_r()
{
return m_pia1_a;
}
// segment data; d0 & pia0:ca2 = comma; passed to digits when PA0? is high (assume they mean pia0:pa0)
void by6803_state::pia1_a_w(uint8_t data)
void by6803_state::pia1_a_w(u8 data)
{
m_pia1_a = data;
m_segment = data >> 1;
}
// solenoids, activated when pia1:cb2 is low
void by6803_state::pia1_b_w(uint8_t data)
void by6803_state::pia1_b_w(u8 data)
{
m_pia1_b = data;
switch (data & 15)
@ -333,12 +348,29 @@ void by6803_state::pia1_b_w(uint8_t data)
void by6803_state::machine_start()
{
genpin_class::machine_start();
m_io_outputs.resolve();
m_digits.resolve();
m_leds.resolve();
save_item(NAME(m_pia0_a));
save_item(NAME(m_pia0_b));
save_item(NAME(m_pia1_a));
save_item(NAME(m_pia1_b));
save_item(NAME(m_pia0_cb2));
save_item(NAME(m_pia0_timer));
save_item(NAME(m_port1));
save_item(NAME(m_port2));
save_item(NAME(m_digit));
save_item(NAME(m_segment));
}
void by6803_state::machine_reset()
{
genpin_class::machine_reset();
for (u8 i = 0; i < m_io_outputs.size(); i++)
m_io_outputs[i] = 0;
m_pia0_a = 0;
m_pia0_b = 0;
m_pia0_cb2 = 0;
@ -347,10 +379,6 @@ void by6803_state::machine_reset()
m_port2 = 2+8;
}
void by6803_state::init_by6803()
{
}
// zero-cross detection
TIMER_DEVICE_CALLBACK_MEMBER( by6803_state::pia0_timer )
{
@ -383,7 +411,7 @@ void by6803_state::by6803(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* Video */
//config.set_default_layout(layout_by6803);
config.set_default_layout(layout_by6803);
/* Sound */
genpin_audio(config);
@ -429,7 +457,7 @@ ROM_START(atlantip)
ROM_END
/*------------------------------------
/ Beat the Clock #OC70
/ Beat the Clock #0C70
/------------------------------------*/
ROM_START(beatclck)
ROM_REGION(0x10000, "maincpu", 0)
@ -456,7 +484,7 @@ ROM_END
/------------------------------------*/
/*------------------------------------
/ Black Belt #OE52
/ Black Belt #0E52
/------------------------------------*/
ROM_START(blackblt)
ROM_REGION(0x10000, "maincpu", 0)
@ -478,7 +506,7 @@ ROM_START(blackblt2)
ROM_END
/*------------------------------------
/ Blackwater 100 #OH07
/ Blackwater 100 #0H07
/------------------------------------*/
ROM_START(black100)
ROM_REGION(0x10000, "maincpu", 0)
@ -503,7 +531,7 @@ ROM_START(black100s)
ROM_END
/*------------------------------------
/ City Slicker #OE79
/ City Slicker #0E79
/------------------------------------*/
ROM_START(cityslck)
ROM_REGION(0x10000, "maincpu", 0)
@ -514,7 +542,7 @@ ROM_START(cityslck)
ROM_END
/*------------------------------------
/ Dungeons & Dragons #OH06
/ Dungeons & Dragons #0H06
/------------------------------------*/
ROM_START(dungdrag)
ROM_REGION(0x10000, "maincpu", 0)
@ -528,7 +556,7 @@ ROM_START(dungdrag)
ROM_END
/*------------------------------------
/ Eight Ball Champ #OB38
/ Eight Ball Champ #0B38
/------------------------------------*/
ROM_START(eballchp)
ROM_REGION(0x10000, "maincpu", 0)
@ -539,20 +567,8 @@ ROM_START(eballchp)
ROM_LOAD("u5_snd.532", 0xf000, 0x1000, CRC(655441df) SHA1(9da5578856ded3dcdafed67679eb4c4134dc9f81))
ROM_END
#ifdef MISSING_GAME // same as above but with CPU2 roms as NO_DUMP
ROM_START(eballch2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD( "u3_cpu.128", 0xc000, 0x4000, CRC(025f3008) SHA1(25d310f169b92ce6b348330816ddc3b5710e57da))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("ebcu4.snd", 0x8000, 0x2000, NO_DUMP)
ROM_RELOAD(0xa000, 0x2000)
ROM_LOAD("ebcu3.snd", 0xc000, 0x2000, NO_DUMP)
ROM_RELOAD(0xe000, 0x2000)
ROM_END
#endif
/*------------------------------------------------
/ Escape from the Lost World #OH05
/ Escape from the Lost World #0H05
/-----------------------------------------------*/
ROM_START(esclwrld)
ROM_REGION(0x10000, "maincpu", 0)
@ -576,7 +592,7 @@ ROM_START(esclwrldg)
ROM_LOAD16_BYTE("u13.512", 0x20000, 0x10000, CRC(b056842e) SHA1(7c67e5d69235a784b9c38cb31302d206278a3814))
ROM_END
/*------------------------------------
/ Hardbody #OE94
/ Hardbody #0E94
/------------------------------------*/
ROM_START(hardbody)
ROM_REGION(0x10000, "maincpu", 0)
@ -603,7 +619,7 @@ ROM_START(hardbodyg)
ROM_END
/*-----------------------------------------
/ Heavy Metal Meltdown #OH03
/ Heavy Metal Meltdown #0H03
/-----------------------------------------*/
ROM_START(hvymetap)
ROM_REGION(0x10000, "maincpu", 0)
@ -624,7 +640,7 @@ ROM_START(hvymetapg)
ROM_END
/*------------------------------------
/ Lady Luck #OE34
/ Lady Luck #0E34
/------------------------------------*/
ROM_START(ladyluck)
ROM_REGION(0x10000, "maincpu", 0)
@ -637,7 +653,7 @@ ROM_START(ladyluck)
ROM_END
/*--------------------------------
/ MotorDome #OE14
/ MotorDome #0E14
/-------------------------------*/
ROM_START(motrdome)
ROM_REGION(0x10000, "maincpu", 0)
@ -664,7 +680,7 @@ ROM_START(motrdomeg) // German version claims to be game #E69
ROM_END
/*--------------------------------
/ Party Animal #OH01
/ Party Animal #0H01
/-------------------------------*/
ROM_START(prtyanim)
ROM_REGION(0x10000, "maincpu", 0)
@ -689,7 +705,7 @@ ROM_START(prtyanimg)
ROM_END
/*------------------------------------
/ Special Force #OE47 - 1st Game to use Sounds Deluxe Sound Hardware
/ Special Force #0E47 - 1st Game to use Sounds Deluxe Sound Hardware
/------------------------------------*/
ROM_START(specforc)
ROM_REGION(0x10000, "maincpu", 0)
@ -703,7 +719,7 @@ ROM_START(specforc)
ROM_END
/*------------------------------------
/ Strange Science #OE35
/ Strange Science #0E35
/------------------------------------*/
ROM_START(strngsci)
@ -764,32 +780,35 @@ ROM_END
} // anonymous namespace
GAME( 1985, eballchp, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Eight Ball Champ", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1985, beatclck, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Beat the Clock", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1985, beatclck2, beatclck, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Beat the Clock (with flasher support)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, motrdome, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "MotorDome (rev. D)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, motrdomeb, motrdome, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "MotorDome (rev. B)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, motrdomeg, motrdome, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "MotorDome (German rev. B)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, ladyluck, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Lady Luck", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, strngsci, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Strange Science (Rev C)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, strngscia, strngsci, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Strange Science (Rev A)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, strngscig, strngsci, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Strange Science (German, Rev A)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, specforc, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Special Force", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, blackblt, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Black Belt", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1986, blackblt2, blackblt, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Black Belt (Squawk and Talk)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, cityslck, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "City Slicker", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, hardbody, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Hardbody (rev. D)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, hardbodyc, hardbody, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Hardbody (rev. C)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, hardbodyg, hardbody, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Hardbody (German rev. B)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, prtyanim, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Party Animal", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, prtyanimg, prtyanim, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Party Animal (German)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, hvymetap, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Heavy Metal Meltdown", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, hvymetapg, hvymetap, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Heavy Metal Meltdown (German)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, esclwrld, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Escape from the Lost World", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, esclwrldg, esclwrld, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Escape from the Lost World (German)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1987, dungdrag, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Dungeons & Dragons", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1988, black100, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Blackwater 100", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1988, black100s, black100, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Blackwater 100 (Single Ball Play)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1988, trucksp3, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Truck Stop (P-3)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1988, trucksp2, trucksp3, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Truck Stop (P-2)", MACHINE_IS_SKELETON_MECHANICAL)
GAME( 1989, atlantip, 0, by6803, by6803, by6803_state, init_by6803, ROT0, "Bally", "Atlantis", MACHINE_IS_SKELETON_MECHANICAL)
// 1st gen
GAME( 1985, eballchp, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Eight Ball Champ", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, beatclck, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Beat the Clock", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1985, beatclck2, beatclck, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Beat the Clock (with flasher support)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, ladyluck, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Lady Luck", MACHINE_IS_SKELETON_MECHANICAL )
// 2nd gen
GAME( 1986, motrdome, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "MotorDome (rev. D)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, motrdomeb, motrdome, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "MotorDome (rev. B)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, motrdomeg, motrdome, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "MotorDome (German rev. B)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, strngsci, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Strange Science (Rev C)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, strngscia, strngsci, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Strange Science (Rev A)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, strngscig, strngsci, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Strange Science (German, Rev A)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, specforc, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Special Force", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, blackblt, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Black Belt", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1986, blackblt2, blackblt, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Black Belt (Squawk and Talk)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, cityslck, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "City Slicker", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, hardbody, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Hardbody (rev. D)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, hardbodyc, hardbody, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Hardbody (rev. C)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, hardbodyg, hardbody, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Hardbody (German rev. B)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, prtyanim, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Party Animal", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, prtyanimg, prtyanim, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Party Animal (German)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, hvymetap, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Heavy Metal Meltdown", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, hvymetapg, hvymetap, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Heavy Metal Meltdown (German)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, esclwrld, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Escape from the Lost World", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, esclwrldg, esclwrld, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Escape from the Lost World (German)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1987, dungdrag, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Dungeons & Dragons", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1988, black100, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Blackwater 100", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1988, black100s, black100, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Blackwater 100 (Single Ball Play)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1988, trucksp3, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Truck Stop (P-3)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1988, trucksp2, trucksp3, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Truck Stop (P-2)", MACHINE_IS_SKELETON_MECHANICAL )
GAME( 1989, atlantip, 0, by6803, by6803, by6803_state, empty_init, ROT0, "Bally", "Atlantis", MACHINE_IS_SKELETON_MECHANICAL )

View File

@ -0,0 +1,52 @@
<?xml version="1.0"?>
<!--
license:CC0
copyright-holders:Robbbert
-->
<mamelayout version="2">
<element name="digit" defstate="0">
<led8seg_gts1>
<color red="1.0" green="0.0" blue="0.0" />
</led8seg_gts1>
</element>
<group name="score">
<repeat count="7">
<param name="n" start="~s~" increment="-1" />
<param name="x" start="0" increment="44" />
<element name="digit~n~" ref="digit">
<bounds x="~x~" y="0" width="34" height="39" />
</element>
</repeat>
</group>
<view name="Default Layout">
<bounds left="0" top="20" right="318" bottom="279" />
<!-- Player 1 Score -->
<param name="s" value="6" />
<group ref="score">
<bounds left="10" top="45" right="308" bottom="84" />
</group>
<!-- Player 2 Score -->
<param name="s" value="13" />
<group ref="score">
<bounds left="10" top="105" right="308" bottom="144" />
</group>
<!-- Player 3 Score -->
<param name="s" value="22" />
<group ref="score">
<bounds left="10" top="165" right="308" bottom="204" />
</group>
<!-- Player 4 Score -->
<param name="s" value="29" />
<group ref="score">
<bounds left="10" top="225" right="308" bottom="264" />
</group>
</view>
</mamelayout>