Playmatic Pinball: All MPU-1 games working, plus other WIP.

This commit is contained in:
Robbbert 2016-08-19 03:24:05 +10:00
parent 0457e4cd1f
commit 4808e88290
4 changed files with 311 additions and 228 deletions

View File

@ -6,16 +6,16 @@ PINBALL
Playmatic MPU 1
ToDo:
- Sounds play too fast, especially in Chance.
- Add mechanical sounds
- Lamps, solenoids
- Ball numbers are individual lamps
- Add remaining mechanical sounds
- Lamps, solenoids (spcgambl has a "cone" lighted by the COx outputs)
Notes:
All games work.
Max credits is 15.
X is the outhole.
Chance: When starting the game, hold down X to make "Player 1" light up.
Others: When starting the game, hold down X, then release it and hit Z to advance
the player to the correct number otherwise some weird bugs can happen.
Others: When starting the game, hold down X, then release and hit Z, otherwise
some weird bugs can happen.
**********************************************************************************/
@ -26,11 +26,11 @@ Others: When starting the game, hold down X, then release it and hit Z to advanc
#include "sound/speaker.h"
#include "play_1.lh"
class play_1_state : public driver_device
class play_1_state : public genpin_class
{
public:
play_1_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_dips(*this, "X")
, m_monotone(*this, "monotone")
@ -44,6 +44,7 @@ public:
DECLARE_WRITE8_MEMBER(port05_w);
DECLARE_WRITE8_MEMBER(port06_w);
DECLARE_READ_LINE_MEMBER(clear_r);
DECLARE_READ_LINE_MEMBER(wait_r);
DECLARE_READ_LINE_MEMBER(ef2_r);
DECLARE_READ_LINE_MEMBER(ef3_r);
DECLARE_READ_LINE_MEMBER(ef4_r);
@ -52,8 +53,10 @@ public:
private:
UINT16 m_resetcnt;
UINT16 m_clockcnt;
UINT16 m_waitcnt;
UINT8 m_segment;
UINT8 m_match;
UINT8 m_ball;
virtual void machine_reset() override;
required_device<cosmac_device> m_maincpu;
required_ioport_array<4> m_dips;
@ -62,14 +65,14 @@ private:
static ADDRESS_MAP_START( play_1_map, AS_PROGRAM, 8, play_1_state )
ADDRESS_MAP_GLOBAL_MASK(0xfff)
AM_RANGE(0x0000, 0x07ff) AM_ROM
AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("roms", 0)
AM_RANGE(0x0800, 0x081f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery"
AM_RANGE(0x0c00, 0x0c1f) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( chance_map, AS_PROGRAM, 8, play_1_state )
ADDRESS_MAP_GLOBAL_MASK(0xfff)
AM_RANGE(0x0000, 0x0bff) AM_ROM
AM_RANGE(0x0000, 0x0bff) AM_ROM AM_REGION("roms", 0)
AM_RANGE(0x0c00, 0x0c1f) AM_RAM
AM_RANGE(0x0e00, 0x0e1f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 2-month "battery"
ADDRESS_MAP_END
@ -86,9 +89,9 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( chance )
PORT_START("X.0")
// PORT_DIPNAME(0x01, 0x01, DEF_STR( Coinage ) ) // this is something else, don't know what yet
// PORT_DIPSETTING ( 0x00, DEF_STR( 1C_3C ) )
// PORT_DIPSETTING ( 0x01, DEF_STR( 1C_1C ) )
PORT_DIPNAME(0x01, 0x01, "Unknown" ) // Shows in schematic, not mentioned in the manuals, appears to have no effect
PORT_DIPSETTING ( 0x00, "3 games" )
PORT_DIPSETTING ( 0x01, "1 game" )
PORT_DIPNAME(0x02, 0x00, "Balls")
PORT_DIPSETTING ( 0x00, "3" )
PORT_DIPSETTING ( 0x02, "5" )
@ -97,7 +100,7 @@ static INPUT_PORTS_START( chance )
PORT_DIPSETTING ( 0x04, "Extra ball" )
PORT_START("X.1")
PORT_DIPNAME(0xff, 0x10, "Coinage for slot 2" )
PORT_DIPNAME(0xff, 0x08, "Coinage for slot 2" )
PORT_DIPSETTING ( 0x01, DEF_STR( 2C_1C ) )
PORT_DIPSETTING ( 0x02, DEF_STR( 1C_1C ) )
PORT_DIPSETTING ( 0x04, DEF_STR( 2C_3C ) )
@ -108,7 +111,7 @@ static INPUT_PORTS_START( chance )
PORT_DIPSETTING ( 0x80, DEF_STR( 1C_6C ) )
PORT_START("X.2")
PORT_DIPNAME(0xff, 0x10, "Coinage for slot 3" )
PORT_DIPNAME(0xff, 0x01, "Coinage for slot 3" )
PORT_DIPSETTING ( 0x01, DEF_STR( 1C_3C ) )
PORT_DIPSETTING ( 0x02, DEF_STR( 1C_4C ) )
PORT_DIPSETTING ( 0x04, DEF_STR( 1C_5C ) )
@ -150,11 +153,11 @@ static INPUT_PORTS_START( chance )
PORT_START("IN4") // 41-48
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z) // lastlap trough
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON) // lastlap outhole
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
@ -185,7 +188,6 @@ static INPUT_PORTS_START( chance )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD) // Set 3rd replay score
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD) // Set 2nd replay score
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD) // Set 1st replay score
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( play_1 )
@ -237,15 +239,17 @@ INPUT_PORTS_END
void play_1_state::machine_reset()
{
m_waitcnt = 0xffff;
m_resetcnt = 0;
m_clockcnt = 0;
m_segment = 0;
m_match = 0;
m_ball = 0;
}
READ8_MEMBER( play_1_state::port07_r )
{
UINT8 data = m_dips[3]->read();
UINT8 data = m_dips[3]->read() & 0x3f;
data |= (m_segment & m_dips[1]->read()) ? 0x40 : 0;
data |= (m_segment & m_dips[2]->read()) ? 0x80 : 0;
return data;
@ -262,17 +266,25 @@ WRITE8_MEMBER( play_1_state::port01_w )
output().set_digit_value(40, 0);
if (BIT(data, 1))
{
output().set_digit_value(44, patterns[0]);
output().set_digit_value(45, patterns[0]);
}
else
{
output().set_digit_value(44, 0);
output().set_digit_value(45, 0);
}
m_match = patterns[data>>4] & 0x7f;
m_waitcnt = 0;
}
WRITE8_MEMBER( play_1_state::port02_w )
{
// N1-8, segments and other
m_segment = data;
m_waitcnt = 0;
}
WRITE8_MEMBER( play_1_state::port03_w )
@ -282,10 +294,14 @@ WRITE8_MEMBER( play_1_state::port03_w )
switch (~data & 15)
{
case 0:
// M1 thru M8 (unknown purpose) bit 4 lights up the bumpers
break;
// M1 thru M8: bit 4 lights up the bumpers, bit 6 outhole, bit 7 knocker
if (BIT(m_segment, 6)) // outhole
m_samples->start(0, 5);
if (BIT(m_segment, 7)) // knocker
m_samples->start(0, 6);
break;
case 1:
// a combination of bits could set higher frequencies, but that isn't documented
// a combination of bits could set higher frequencies, but that isn't documented or used
if (BIT(m_segment, 0))
m_monotone->set_unscaled_clock(523);
else
@ -300,7 +316,7 @@ WRITE8_MEMBER( play_1_state::port03_w )
else
if ((m_segment & 0x0F)==0)
m_monotone->set_unscaled_clock(0);
// Bit 4 adjusts the volume, not emulated yet
// Bit 4 when low makes the sound fade out, not emulated yet
// display player number
{
@ -359,21 +375,26 @@ WRITE8_MEMBER( play_1_state::port03_w )
default:
break;
}
m_waitcnt = 0;
}
WRITE8_MEMBER( play_1_state::port04_w )
{
// U1-8
m_ball = data;
m_waitcnt = 0;
}
WRITE8_MEMBER( play_1_state::port05_w )
{
// V1-8
m_waitcnt = 0;
}
WRITE8_MEMBER( play_1_state::port06_w )
{
// W1-8
m_waitcnt = 0;
}
READ_LINE_MEMBER( play_1_state::clear_r )
@ -384,6 +405,18 @@ READ_LINE_MEMBER( play_1_state::clear_r )
return (m_resetcnt == 0x8000) ? 0 : 1;
}
READ_LINE_MEMBER( play_1_state::wait_r )
{
// Any OUT instruction forces a 60-100msec wait
if (m_waitcnt < 0x180)
{
m_waitcnt++;
return 0;
}
else
return 1;
}
READ_LINE_MEMBER( play_1_state::ef2_r )
{
return !BIT(m_dips[0]->read(), 0); // 1 or 3 games dip (1=1 game) inverted
@ -409,7 +442,14 @@ WRITE_LINE_MEMBER( play_1_state::clock_w )
if (BIT(m_clockcnt, 1))
output().set_digit_value(41, m_match);
else
output().set_digit_value(44, m_match);
{
output().set_digit_value(43, m_match);
output().set_value("led1", !BIT(m_ball, 1));
output().set_value("led2", !BIT(m_ball, 2));
output().set_value("led3", !BIT(m_ball, 3));
output().set_value("led4", !BIT(m_ball, 4));
output().set_value("led5", !BIT(m_ball, 5));
}
}
}
@ -418,7 +458,7 @@ static MACHINE_CONFIG_START( play_1, play_1_state )
MCFG_CPU_ADD("maincpu", CDP1802, 400000) // 2 gates, 1 cap, 1 resistor oscillating somewhere between 350 to 450 kHz
MCFG_CPU_PROGRAM_MAP(play_1_map)
MCFG_CPU_IO_MAP(play_1_io)
MCFG_COSMAC_WAIT_CALLBACK(VCC)
MCFG_COSMAC_WAIT_CALLBACK(READLINE(play_1_state, wait_r))
MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_1_state, clear_r))
MCFG_COSMAC_EF2_CALLBACK(READLINE(play_1_state, ef2_r))
MCFG_COSMAC_EF3_CALLBACK(READLINE(play_1_state, ef3_r))
@ -429,7 +469,7 @@ static MACHINE_CONFIG_START( play_1, play_1_state )
/* Video */
MCFG_DEFAULT_LAYOUT(layout_play_1)
MCFG_DEVICE_ADD("xpoint", CLOCK, 120) // crossing-point detector
MCFG_DEVICE_ADD("xpoint", CLOCK, 100) // crossing-point detector
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_1_state, clock_w))
/* Sound */
@ -450,7 +490,7 @@ MACHINE_CONFIG_END
/ Space Gambler (03/78)
/-------------------------------------------------------------------*/
ROM_START(spcgambl)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x800, "roms", 0)
ROM_LOAD("spcgamba.bin", 0x0000, 0x0400, CRC(3b6e5287) SHA1(4d2fae779bb4117a99a9311b96ab79799f40067b))
ROM_LOAD("spcgambb.bin", 0x0400, 0x0400, CRC(5c61f25c) SHA1(44b2d74926bf5678146b6d2347b4147e8a29a660))
ROM_END
@ -459,7 +499,7 @@ ROM_END
/ Big Town (04/78)
/-------------------------------------------------------------------*/
ROM_START(bigtown)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x800, "roms", 0)
ROM_LOAD("bigtowna.bin", 0x0000, 0x0400, CRC(253f1b93) SHA1(7ff5267d0dfe6ae19ec6b0412902f4ce83f23ed1))
ROM_LOAD("bigtownb.bin", 0x0400, 0x0400, CRC(5e2ba9c0) SHA1(abd285aa5702c7fb84257b4341f64ff83c1fc0ce))
ROM_END
@ -468,7 +508,7 @@ ROM_END
/ Last Lap (09/78)
/-------------------------------------------------------------------*/
ROM_START(lastlap)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x800, "roms", 0)
ROM_LOAD("lastlapa.bin", 0x0000, 0x0400, CRC(253f1b93) SHA1(7ff5267d0dfe6ae19ec6b0412902f4ce83f23ed1))
ROM_LOAD("lastlapb.bin", 0x0400, 0x0400, CRC(5e2ba9c0) SHA1(abd285aa5702c7fb84257b4341f64ff83c1fc0ce))
ROM_END
@ -477,7 +517,7 @@ ROM_END
/ Chance (09/78)
/-------------------------------------------------------------------*/
ROM_START(chance)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0xc00, "roms", 0)
ROM_LOAD("chance_a.bin", 0x0000, 0x0400, CRC(3cd9d5a6) SHA1(c1d9488495a67198f7f60f70a889a9a3062c71d7))
ROM_LOAD("chance_b.bin", 0x0400, 0x0400, CRC(a281b0f1) SHA1(1d2d26ce5f50294d5a95f688c82c3bdcec75de95))
ROM_LOAD("chance_c.bin", 0x0800, 0x0200, CRC(369afee3) SHA1(7fa46c7f255a5ef21b0d1cc018056bc4889d68b8))
@ -487,15 +527,15 @@ ROM_END
/ Party (05/79)
/-------------------------------------------------------------------*/
ROM_START(party)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x800, "roms", 0)
ROM_LOAD("party_a.bin", 0x0000, 0x0400, CRC(253f1b93) SHA1(7ff5267d0dfe6ae19ec6b0412902f4ce83f23ed1))
ROM_LOAD("party_b.bin", 0x0400, 0x0400, CRC(5e2ba9c0) SHA1(abd285aa5702c7fb84257b4341f64ff83c1fc0ce))
ROM_END
/* Big Town, Last Lap and Party all reportedly share the same roms with different playfield/machine artworks */
GAME(1978, bigtown, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND )
GAME(1978, chance, 0, chance, chance, driver_device, 0, ROT0, "Playmatic", "Chance", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1978, lastlap, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Last Lap", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1978, spcgambl, 0, play_1, spcgambl, driver_device, 0, ROT0, "Playmatic", "Space Gambler", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1979, party, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Party", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1978, bigtown, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL )
GAME(1978, lastlap, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Last Lap", MACHINE_MECHANICAL )
GAME(1979, party, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Party", MACHINE_MECHANICAL )
GAME(1978, spcgambl, 0, play_1, spcgambl, driver_device, 0, ROT0, "Playmatic", "Space Gambler", MACHINE_MECHANICAL )
GAME(1978, chance, 0, chance, chance, driver_device, 0, ROT0, "Playmatic", "Chance", MACHINE_MECHANICAL )

View File

@ -5,32 +5,46 @@
PINBALL
Playmatic MPU 2
Status:
4 different sound boards were used.
- Those without sound roms use a CDP1863
- Zira uses a COP402 and a AY-3-8910
- Cerberus uses a 90435 (appears to be a CDP1802) and a 90503 (unknown)
- Mad Race uses a Sound Board IV (same as MPU-3 and later), but I/O ports
that talk to it are unknown.
ToDo:
- Lamps, Solenoids to add
- AY chips output port adds various components across the analog outputs (including muting)
- Mechanical sounds to add
- Sound board to add
- Most games work
- Some sound boards to add
Notes:
- Mad Race: S is the outhole for now. Game works, but no sound.
- Zira, Cerberus: not working
- Others: X is the outhole, and these games all work.
- Hold down the outhole key (usually X), when starting a game.
***********************************************************************************/
#include "machine/genpin.h"
#include "cpu/cosmac/cosmac.h"
#include "cpu/cop400/cop400.h"
#include "machine/clock.h"
#include "machine/7474.h"
#include "sound/ay8910.h"
#include "sound/cdp1863.h"
#include "play_2.lh"
class play_2_state : public driver_device
class play_2_state : public genpin_class
{
public:
play_2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_4013a(*this, "4013a")
, m_4013b(*this, "4013b")
, m_1863(*this, "1863")
, m_aysnd1(*this, "aysnd1")
, m_keyboard(*this, "X")
{ }
@ -47,54 +61,49 @@ public:
DECLARE_WRITE_LINE_MEMBER(q4013a_w);
DECLARE_WRITE_LINE_MEMBER(clock_w);
DECLARE_WRITE_LINE_MEMBER(clock2_w);
DECLARE_WRITE8_MEMBER(port01_a_w);
DECLARE_READ8_MEMBER(port02_a_r);
DECLARE_READ_LINE_MEMBER(clear_a_r);
// Zira
DECLARE_WRITE8_MEMBER(sound_d_w);
DECLARE_WRITE8_MEMBER(sound_g_w);
DECLARE_READ8_MEMBER(psg_r);
DECLARE_WRITE8_MEMBER(psg_w);
DECLARE_READ8_MEMBER(sound_in_r);
DECLARE_DRIVER_INIT(zira);
private:
UINT16 m_clockcnt;
UINT16 m_resetcnt;
UINT16 m_resetcnt_a;
UINT8 m_soundlatch;
UINT8 m_a_irqset;
UINT16 m_a_irqcnt;
UINT8 m_kbdrow;
UINT8 m_segment[5];
bool m_disp_sw;
UINT8 m_soundlatch;
UINT8 m_psg_latch;
virtual void machine_reset() override;
required_device<cosmac_device> m_maincpu;
required_device<cosmac_device> m_audiocpu;
required_device<ttl7474_device> m_4013a;
required_device<ttl7474_device> m_4013b;
optional_device<cdp1863_device> m_1863;
optional_device<ay8910_device> m_aysnd1;
required_ioport_array<8> m_keyboard;
};
static ADDRESS_MAP_START( play_2_map, AS_PROGRAM, 8, play_2_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x0000, 0x1fff) AM_ROM AM_REGION("roms", 0)
AM_RANGE(0x2000, 0x20ff) AM_RAM AM_SHARE("nvram") // pair of 5101, battery-backed
ADDRESS_MAP_END
static ADDRESS_MAP_START( play_2_io, AS_IO, 8, play_2_state )
AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits
AM_RANGE(0x02, 0x02) AM_WRITE(port02_w)
AM_RANGE(0x03, 0x03) AM_WRITE(port03_w)
AM_RANGE(0x03, 0x03) AM_DEVWRITE("1863", cdp1863_device, str_w)
AM_RANGE(0x04, 0x04) AM_READ(port04_r)
AM_RANGE(0x05, 0x05) AM_READ(port05_r)
AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // segments
AM_RANGE(0x07, 0x07) AM_WRITE(port07_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( play_2_audio_map, AS_PROGRAM, 8, play_2_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x4000, 0x4001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd1", ay8910_device, data_r, address_data_w)
AM_RANGE(0x6000, 0x6001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("aysnd2", ay8910_device, data_r, address_data_w)
AM_RANGE(0x8000, 0x80ff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( play_2_audio_io, AS_IO, 8, play_2_state )
AM_RANGE(0x01, 0x01) AM_WRITE(port01_a_w) // irq counter
AM_RANGE(0x02, 0x02) AM_READ(port02_a_r) // sound code
static ADDRESS_MAP_START( zira_sound_map, AS_PROGRAM, 8, play_2_state )
AM_RANGE(0x000, 0x3ff) AM_ROMBANK("bank1")
ADDRESS_MAP_END
@ -111,7 +120,7 @@ static INPUT_PORTS_START( play_2 )
PORT_START("X.1") // 21-28
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9_PAD)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_S) // outhole on Mad Race
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)
@ -177,11 +186,7 @@ void play_2_state::machine_reset()
{
m_clockcnt = 0;
m_resetcnt = 0;
m_resetcnt_a = 0;
m_4013b->d_w(1);
m_a_irqset = 54; // default value of the CDP1863
m_a_irqcnt = (m_a_irqset << 3) | 7;
m_soundlatch = 0;
m_kbdrow = 0;
m_disp_sw = 0;
for (UINT8 i = 0; i < 5; i++)
@ -197,19 +202,17 @@ WRITE8_MEMBER( play_2_state::port01_w )
for (UINT8 j = 0; j < 6; j++)
if (BIT(m_kbdrow, j))
for (UINT8 i = 0; i < 5; i++)
output().set_digit_value(j*10 + i, m_segment[i]);
output().set_digit_value(j*10 + i, m_segment[i] & 0x7f);
}
m_1863->oe_w(BIT(data, 7)); // this actually mutes the audio amp, but doing it this way is far easier
}
WRITE8_MEMBER( play_2_state::port06_w )
{
//m_soundlatch = data;
}
WRITE8_MEMBER( play_2_state::port03_w )
{
if (BIT(data, 6))
m_audiocpu->ef1_w(1); // inverted
}
READ8_MEMBER( play_2_state::port04_r )
@ -239,22 +242,11 @@ WRITE8_MEMBER( play_2_state::port02_w )
WRITE8_MEMBER( play_2_state::port07_w )
{
m_soundlatch = (data & 0x70) >> 4; // Zira (manual doesn't say where data comes from)
m_4013b->clear_w(0);
m_4013b->clear_w(1);
}
WRITE8_MEMBER( play_2_state::port01_a_w )
{
m_a_irqset = data;
m_a_irqcnt = (m_a_irqset << 3) | 7;
}
READ8_MEMBER( play_2_state::port02_a_r )
{
m_audiocpu->ef1_w(0); // inverted
return m_soundlatch;
}
READ_LINE_MEMBER( play_2_state::clear_r )
{
// A hack to make the machine reset itself on boot
@ -263,14 +255,6 @@ READ_LINE_MEMBER( play_2_state::clear_r )
return (m_resetcnt == 0xff00) ? 0 : 1;
}
READ_LINE_MEMBER( play_2_state::clear_a_r )
{
// A hack to make the machine reset itself on boot
if (m_resetcnt_a < 0xffff)
m_resetcnt_a++;
return (m_resetcnt_a == 0xff00) ? 0 : 1;
}
READ_LINE_MEMBER( play_2_state::ef1_r )
{
return (!BIT(m_clockcnt, 10)); // inverted
@ -291,17 +275,6 @@ WRITE_LINE_MEMBER( play_2_state::clock_w )
// simulate 4020 chip
if ((m_clockcnt & 0x3ff) == 0)
m_4013b->preset_w(BIT(m_clockcnt, 10)); // Q10 output
// sound irq
m_a_irqcnt--;
if (m_a_irqcnt == 1)
m_audiocpu->int_w(1); // inverted
else
if (m_a_irqcnt == 0)
{
m_a_irqcnt = (m_a_irqset << 3) | 7;
m_audiocpu->int_w(0); // inverted
}
}
}
@ -316,6 +289,47 @@ WRITE_LINE_MEMBER( play_2_state::q4013a_w )
m_clockcnt = 0;
}
// *********** Zira Sound handlers ***************** (same as cidelsa.cpp)
WRITE8_MEMBER( play_2_state::sound_d_w )
{
// D3 2716 A10
membank("bank1")->set_entry(BIT(data, 3));
}
WRITE8_MEMBER( play_2_state::sound_g_w )
{
switch (data)
{
case 0x01:
m_aysnd1->data_w(space, 0, m_psg_latch);
break;
case 0x02:
m_psg_latch = m_aysnd1->data_r(space, 0);
break;
case 0x03:
m_aysnd1->address_w(space, 0, m_psg_latch);
break;
}
}
READ8_MEMBER( play_2_state::sound_in_r )
{
return m_soundlatch;
}
READ8_MEMBER( play_2_state::psg_r )
{
return m_psg_latch;
}
WRITE8_MEMBER( play_2_state::psg_w )
{
m_psg_latch = data;
}
// **************** Machine *****************************
static MACHINE_CONFIG_START( play_2, play_2_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", CDP1802, 2950000)
@ -350,40 +364,51 @@ static MACHINE_CONFIG_START( play_2, play_2_state )
/* Sound */
MCFG_FRAGMENT_ADD( genpin_audio )
MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz)
MCFG_CPU_PROGRAM_MAP(play_2_audio_map)
MCFG_CPU_IO_MAP(play_2_audio_io)
MCFG_COSMAC_WAIT_CALLBACK(VCC)
MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_2_state, clear_a_r))
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_CDP1863_ADD("1863", 0, 2950000 / 8)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( zira, play_2 )
MCFG_CPU_ADD("cop402", COP402, XTAL_2MHz)
MCFG_CPU_PROGRAM_MAP(zira_sound_map)
MCFG_COP400_CONFIG( COP400_CKI_DIVISOR_16, COP400_CKO_OSCILLATOR_OUTPUT, false )
MCFG_COP400_WRITE_D_CB(WRITE8(play_2_state, sound_d_w))
MCFG_COP400_WRITE_G_CB(WRITE8(play_2_state, sound_g_w))
MCFG_COP400_READ_L_CB(READ8(play_2_state, psg_r))
MCFG_COP400_WRITE_L_CB(WRITE8(play_2_state, psg_w))
MCFG_COP400_READ_IN_CB(READ8(play_2_state, sound_in_r))
MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_2MHz)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MACHINE_CONFIG_END
DRIVER_INIT_MEMBER( play_2_state, zira )
{
/* setup COP402 memory banking */
membank("bank1")->configure_entries(0, 2, memregion("cop402")->base(), 0x400);
membank("bank1")->set_entry(0);
}
/*-------------------------------------------------------------------
/ Antar (11/79)
/-------------------------------------------------------------------*/
ROM_START(antar)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("antar08.bin", 0x0000, 0x0400, CRC(f6207f77) SHA1(f68ce967c6189457bd0ce8638e9c477f16e65763))
ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47))
ROM_LOAD("antar10.bin", 0x0800, 0x0400, CRC(a6ce5667) SHA1(85ecd4fce94dc419e4c210262f867310b0889cd3))
ROM_LOAD("antar11.bin", 0x0c00, 0x0400, CRC(6474b17f) SHA1(e4325ceff820393b06eb2e8e4a85412b0d01a385))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
ROM_START(antar2)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("antar08.bin", 0x0000, 0x0400, CRC(f6207f77) SHA1(f68ce967c6189457bd0ce8638e9c477f16e65763))
ROM_LOAD("antar09.bin", 0x0400, 0x0400, CRC(2c954f1a) SHA1(fa83a5f1c269ea28d4eeff181f493cbb4dc9bc47))
ROM_LOAD("antar10a.bin", 0x0800, 0x0400, CRC(520eb401) SHA1(1d5e3f829a7e7f38c7c519c488e6b7e1a4d34321))
ROM_LOAD("antar11a.bin", 0x0c00, 0x0400, CRC(17ad38bf) SHA1(e2c9472ed8fbe9d5965a5c79515a1b7ea9edaa79))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
@ -391,20 +416,65 @@ ROM_END
/ Evil Fight (03/80)
/-------------------------------------------------------------------*/
ROM_START(evlfight)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("evfg08.bin", 0x0000, 0x0400, CRC(2cc2e79a) SHA1(17440512c419b3bb2012539666a5f052f3cd8c1d))
ROM_LOAD("evfg09.bin", 0x0400, 0x0400, CRC(5232dc4c) SHA1(6f95a578e9f09688e6ce8b0a622bcee887936c82))
ROM_LOAD("evfg10.bin", 0x0800, 0x0400, CRC(de2f754d) SHA1(0287a9975095bcbf03ddb2b374ff25c080c8020f))
ROM_LOAD("evfg11.bin", 0x0c00, 0x0400, CRC(5eb8ac02) SHA1(31c80e74a4272becf7014aa96eaf7de555e26cd6))
ROM_END
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
/*-------------------------------------------------------------------
/ Attack (10/80)
/-------------------------------------------------------------------*/
ROM_START(attack)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("attack8.bin", 0x0000, 0x0400, CRC(a5204b58) SHA1(afb4b81720f8d56e88f47fc842b23313824a1085))
ROM_LOAD("attack9.bin", 0x0400, 0x0400, CRC(bbd086b4) SHA1(6fc94b94beea482d8c8f5b3c69d3f218e2b2dfc4))
ROM_LOAD("attack10.bin", 0x0800, 0x0400, CRC(764925e4) SHA1(2f207ef87786d27d0d856c5816a570a59d89b718))
ROM_LOAD("attack11.bin", 0x0c00, 0x0400, CRC(972157b4) SHA1(23c90f23a34b34acfe445496a133b6022a749ccc))
ROM_END
/*-------------------------------------------------------------------
/ Black Fever (12/80)
/-------------------------------------------------------------------*/
ROM_START(blkfever)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("blackf8.bin", 0x0000, 0x0400, CRC(916b8ed8) SHA1(ddc7e09b68e3e1a033af5dc5ec32ab5b0922a833))
ROM_LOAD("blackf9.bin", 0x0400, 0x0400, CRC(ecb72fdc) SHA1(d3598031b7170fab39727b3402b7053d4f9e1ca7))
ROM_LOAD("blackf10.bin", 0x0800, 0x0400, CRC(b3fae788) SHA1(e14e09cc7da1098abf2f60f26a8ec507e123ff7c))
ROM_LOAD("blackf11.bin", 0x0c00, 0x0400, CRC(5a97c1b4) SHA1(b9d7eb0dd55ef6d959c0fab48f710e4b1c8d8003))
ROM_END
/*-------------------------------------------------------------------
/ Zira (??/81)
/-------------------------------------------------------------------*/
ROM_START(zira)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("zira_u8.bin", 0x0000, 0x0800, CRC(53f8bf17) SHA1(5eb74f27bc65374a85dd44bbc8f6142488c226a2))
ROM_LOAD("zira_u9.bin", 0x0800, 0x0800, CRC(d50a2419) SHA1(81b157f579a433389506817b1b6e02afaa2cf0d5))
ROM_REGION(0x800, "cop402", 0) // according to the schematic this is a 2716 with a size of 0x800
ROM_LOAD("zira.snd", 0x0000, 0x0400, CRC(c8a54854) SHA1(6c0367dcb2a11f0478c44b4e2115c1cb1e8052f3))
ROM_END
/*-------------------------------------------------------------------
/ Cerberus (03/82)
/-------------------------------------------------------------------*/
ROM_START(cerberup)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("cerb8.cpu", 0x0000, 0x0800, CRC(021d0452) SHA1(496010e6892311b1cabcdac62296cd6aa0782c5d))
ROM_LOAD("cerb9.cpu", 0x0800, 0x0800, CRC(0fd41156) SHA1(95d1bf42c82f480825e3d907ae3c87b5f994fd2a))
ROM_LOAD("cerb10.cpu", 0x1000, 0x0800, CRC(785602e0) SHA1(f38df3156cd14ab21752dbc849c654802079eb33))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("cerb.snd", 0x0000, 0x2000, CRC(8af53a23) SHA1(a80b57576a1eb1b4544b718b9abba100531e3942))
ROM_END
/*-------------------------------------------------------------------
/ Mad Race (??/85?)
/-------------------------------------------------------------------*/
ROM_START(madrace)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x2000, "roms", 0)
ROM_LOAD("madrace.2a0", 0x0000, 0x0800, CRC(ab487c79) SHA1(a5df29b2af4c9d94d8bf54c5c91d1e9b5ca4d065))
ROM_LOAD("madrace.2b0", 0x0800, 0x0800, CRC(dcb54b39) SHA1(8e2ca7180f5ea3a28feb34b01f3387b523dbfa3b))
ROM_LOAD("madrace.2c0", 0x1000, 0x0800, CRC(b24ea245) SHA1(3f868ccbc4bfb77c40c4cc05dcd8eeca85ecd76f))
@ -415,63 +485,11 @@ ROM_START(madrace)
ROM_END
/*-------------------------------------------------------------------
/ Attack (10/80)
/-------------------------------------------------------------------*/
ROM_START(attack)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("attack8.bin", 0x0000, 0x0400, CRC(a5204b58) SHA1(afb4b81720f8d56e88f47fc842b23313824a1085))
ROM_LOAD("attack9.bin", 0x0400, 0x0400, CRC(bbd086b4) SHA1(6fc94b94beea482d8c8f5b3c69d3f218e2b2dfc4))
ROM_LOAD("attack10.bin", 0x0800, 0x0400, CRC(764925e4) SHA1(2f207ef87786d27d0d856c5816a570a59d89b718))
ROM_LOAD("attack11.bin", 0x0c00, 0x0400, CRC(972157b4) SHA1(23c90f23a34b34acfe445496a133b6022a749ccc))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
/ Black Fever (12/80)
/-------------------------------------------------------------------*/
ROM_START(blkfever)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("blackf8.bin", 0x0000, 0x0400, CRC(916b8ed8) SHA1(ddc7e09b68e3e1a033af5dc5ec32ab5b0922a833))
ROM_LOAD("blackf9.bin", 0x0400, 0x0400, CRC(ecb72fdc) SHA1(d3598031b7170fab39727b3402b7053d4f9e1ca7))
ROM_LOAD("blackf10.bin", 0x0800, 0x0400, CRC(b3fae788) SHA1(e14e09cc7da1098abf2f60f26a8ec507e123ff7c))
ROM_LOAD("blackf11.bin", 0x0c00, 0x0400, CRC(5a97c1b4) SHA1(b9d7eb0dd55ef6d959c0fab48f710e4b1c8d8003))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
/ Zira (??/81)
/-------------------------------------------------------------------*/
ROM_START(zira)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("zira_u8.bin", 0x0000, 0x0800, CRC(53f8bf17) SHA1(5eb74f27bc65374a85dd44bbc8f6142488c226a2))
ROM_LOAD("zira_u9.bin", 0x0800, 0x0800, CRC(d50a2419) SHA1(81b157f579a433389506817b1b6e02afaa2cf0d5))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("zira.snd", 0x0000, 0x0400, CRC(c8a54854) SHA1(6c0367dcb2a11f0478c44b4e2115c1cb1e8052f3))
ROM_END
/*-------------------------------------------------------------------
/ Cerberus (03/82)
/-------------------------------------------------------------------*/
ROM_START(cerberup)
ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("cerb8.cpu", 0x0000, 0x0800, CRC(021d0452) SHA1(496010e6892311b1cabcdac62296cd6aa0782c5d))
ROM_LOAD("cerb9.cpu", 0x0800, 0x0800, CRC(0fd41156) SHA1(95d1bf42c82f480825e3d907ae3c87b5f994fd2a))
ROM_LOAD("cerb10.cpu", 0x1000, 0x0800, CRC(785602e0) SHA1(f38df3156cd14ab21752dbc849c654802079eb33))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("cerb.snd", 0x0000, 0x2000, CRC(8af53a23) SHA1(a80b57576a1eb1b4544b718b9abba100531e3942))
ROM_END
GAME(1979, antar, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 1)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1979, antar2, antar, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 2)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1980, evlfight, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Evil Fight", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1980, attack, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Attack", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1980, blkfever, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Black Fever", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1982, cerberup, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1985, madrace, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Mad Race", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, zira, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Zira", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1979, antar, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 1)", MACHINE_MECHANICAL )
GAME(1979, antar2, antar, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Antar (set 2)", MACHINE_MECHANICAL )
GAME(1980, evlfight, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Evil Fight", MACHINE_MECHANICAL )
GAME(1980, attack, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Attack", MACHINE_MECHANICAL )
GAME(1980, blkfever, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Black Fever", MACHINE_MECHANICAL )
GAME(1982, cerberup, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1985, madrace, 0, play_2, play_2, driver_device, 0, ROT0, "Playmatic", "Mad Race", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1980, zira, 0, zira, play_2, play_2_state, zira, ROT0, "Playmatic", "Zira", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)

View File

@ -7,19 +7,21 @@ Playmatic MPU 3,4,5
Status:
- Lamps, Solenoids to add
- AY chips output port adds various components across the analog outputs (including muting)
- AY chips output port adds various components across the analog outputs
- Lots of loud siren-like noises when there should be silence
- Mechanical sounds to add
- Most games work
-- Spain82: not working
-- Nautilus: sound is broken (runs into the weeds)
-- Skill Flight: not working
-- Meg Aaton: not working (No Ball)
-- Miss Disco: not working
-- Phantom Ship: different unknown sound card (no manual available)
Note: The input lines INT, EF1-4 are inverted (not true voltage).
First time:
- The default settings are fine, so start with a clean slate
- Wait for it to say No Ball, then hold down X.
- Wait for it to say No Ball, then hold down X (Meg Aaton = 8-pad)
- Keep holding X, insert credits, and press start. When it says ball 1, let go immediately.
- If you hold down X longer than you should, it says Coil Error, and the game is ended. You
should let go the instant the ball number increments.
@ -57,6 +59,8 @@ public:
, m_audiocpu(*this, "audiocpu")
, m_4013a(*this, "4013a")
, m_4013b(*this, "4013b")
, m_aysnd1(*this, "aysnd1")
, m_aysnd2(*this, "aysnd2")
, m_keyboard(*this, "X")
{ }
@ -92,6 +96,8 @@ private:
required_device<cosmac_device> m_audiocpu;
required_device<ttl7474_device> m_4013a;
required_device<ttl7474_device> m_4013b;
required_device<ay8910_device> m_aysnd1;
required_device<ay8910_device> m_aysnd2;
required_ioport_array<10> m_keyboard;
};
@ -401,9 +407,9 @@ static MACHINE_CONFIG_START( play_5, play_5_state )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("aysnd1", AY8910, XTAL_3_579545MHz / 2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.75)
MCFG_SOUND_ADD("aysnd2", AY8910, XTAL_3_579545MHz / 2)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.75)
MACHINE_CONFIG_END
@ -411,10 +417,10 @@ MACHINE_CONFIG_END
/ KZ-26 (1984)
/-------------------------------------------------------------------*/
ROM_START(kz26)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("kz26.cpu", 0x0000, 0x2000, CRC(8030a699) SHA1(4f86b325801d8ce16011f7b6ba2f3633e2f2af35))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("sound1.su3", 0x0000, 0x2000, CRC(8ad1a804) SHA1(6177619f09af4302ffddd8c0c1b374dab7f47e91))
ROM_LOAD("sound2.su4", 0x2000, 0x0800, CRC(355dc9ad) SHA1(eac8bc27157afd908f9bc5b5a7c40be5b9427269))
ROM_END
@ -423,11 +429,11 @@ ROM_END
/ Spain 82 (10/82)
/-------------------------------------------------------------------*/
ROM_START(spain82)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("spaic12.bin", 0x0000, 0x1000, CRC(cd37ecdc) SHA1(ff2d406b6ac150daef868121e5857a956aabf005))
ROM_LOAD("spaic11.bin", 0x1000, 0x0800, CRC(c86c0801) SHA1(1b52539538dae883f9c8fe5bc6454f9224780d11))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("spasnd.bin", 0x0000, 0x2000, CRC(62412e2e) SHA1(9e48dc3295e78e1024f726906be6e8c3fe3e61b1))
ROM_END
@ -435,10 +441,10 @@ ROM_END
/ ??/84 Nautilus
/-------------------------------------------------------------------*/
ROM_START(nautilus)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("nautilus.rom", 0x0000, 0x2000, CRC(197e5492) SHA1(0f83fc2e742fd0cca0bd162add4bef68c6620067))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("nautilus.snd", 0x0000, 0x2000, CRC(413d110f) SHA1(8360f652296c46339a70861efb34c41e92b25d0e))
ROM_END
@ -446,10 +452,10 @@ ROM_END
/ ??/84 The Raid
/-------------------------------------------------------------------*/
ROM_START(theraid)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("theraid.rom", 0x0000, 0x2000, CRC(97aa1489) SHA1(6b691b287138cc78cfc1010f380ff8c66342c39b))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("theraid.snd", 0x0000, 0x2000, CRC(e33f8363) SHA1(e7f251c334b15e12b1eb7e079c2e9a5f64338052))
ROM_END
@ -457,10 +463,10 @@ ROM_END
/ 11/84 UFO-X
/-------------------------------------------------------------------*/
ROM_START(ufo_x)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("ufoxcpu.rom", 0x0000, 0x2000, CRC(cf0f7c52) SHA1(ce52da05b310ac84bdd57609e21b0401ee3a2564))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("ufoxu3.rom", 0x0000, 0x2000, CRC(6ebd8ee1) SHA1(83522b76a755556fd38d7b292273b4c68bfc0ddf))
ROM_LOAD("ufoxu4.rom", 0x2000, 0x0800, CRC(aa54ede6) SHA1(7dd7e2852d42aa0f971936dbb84c7708727ce0e7))
ROM_END
@ -469,10 +475,10 @@ ROM_END
/ ??/85 Rock 2500
/-------------------------------------------------------------------*/
ROM_START(rock2500)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("r2500cpu.rom", 0x0000, 0x2000, CRC(9c07e373) SHA1(5bd4e69d11e69fdb911a6e65b3d0a7192075abc8))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("r2500snd.rom", 0x0000, 0x2000, CRC(24fbaeae) SHA1(20ff35ed689291f321e483287a977c02e84d4524))
ROM_END
@ -480,19 +486,19 @@ ROM_END
/ ??/85 Star Fire
/-------------------------------------------------------------------*/
ROM_START(starfirp)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("starfcpu.rom", 0x0000, 0x2000, CRC(450ddf20) SHA1(c63c4e3833ffc1f69fcec39bafecae9c80befb2a))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("starfu3.rom", 0x0000, 0x2000, CRC(5d602d80) SHA1(19d21adbcbd0067c051f3033468eda8c5af57be1))
ROM_LOAD("starfu4.rom", 0x2000, 0x0800, CRC(9af8be9a) SHA1(da6db3716db73baf8e1493aba91d4d85c5d613b4))
ROM_END
ROM_START(starfirpa)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("starcpua.rom", 0x0000, 0x2000, CRC(29bac350) SHA1(ab3e3ea4881be954f7fa7278800ffd791c4581da))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("starfu3.rom", 0x0000, 0x2000, CRC(5d602d80) SHA1(19d21adbcbd0067c051f3033468eda8c5af57be1))
ROM_LOAD("starfu4.rom", 0x2000, 0x0800, CRC(9af8be9a) SHA1(da6db3716db73baf8e1493aba91d4d85c5d613b4))
ROM_END
@ -501,21 +507,21 @@ ROM_END
/ ??/86 Flash Dragon
/-------------------------------------------------------------------*/
ROM_START(fldragon)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("fldrcpu1.rom", 0x0000, 0x2000, CRC(e513ded0) SHA1(64ed3dcff53311fb93bd50d105a4c1186043fdd7))
ROM_LOAD("fldraudiocpu.rom", 0x2000, 0x2000, CRC(6ff2b276) SHA1(040b614f0b0587521ef5550b5587b94a7f3f178b))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d))
ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6))
ROM_END
ROM_START(fldragona)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("fldr_1a.cpu", 0x0000, 0x2000, CRC(21fda8e8) SHA1(feea608c2605cea1cdf9f7ed884297a95993f754))
ROM_LOAD("fldr_2a.cpu", 0x2000, 0x2000, CRC(3592a0b7) SHA1(4c4ed7930dcbbf81ce2e5296c0b36bb615bd2270))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("fdsndu3.rom", 0x0000, 0x2000, CRC(aa9c52a8) SHA1(97d5d63b14d10c70a5eb80c08ccf5a1f3df7596d))
ROM_LOAD("fdsndu4.rom", 0x2000, 0x0800, CRC(0a7dc1d2) SHA1(32c7be5e9fbe4fa9ca661af7b7b5ea13ef250ce6))
ROM_END
@ -528,7 +534,7 @@ ROM_END
/ ??/87 Skill Flight
/-------------------------------------------------------------------*/
ROM_START(sklflite)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("skflcpu1.rom", 0x0000, 0x2000, CRC(8f833b55) SHA1(1729203582c22b51d1cc401aa8f270aa5cdadabe))
ROM_LOAD("skflaudiocpu.rom", 0x2000, 0x2000, CRC(ffc497aa) SHA1(3e88539ae1688322b9268f502d8ca41cffb28df3))
@ -540,7 +546,7 @@ ROM_END
/ ??/87 Phantom Ship
/-------------------------------------------------------------------*/
ROM_START(phntmshp)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("video1.bin", 0x0000, 0x2000, CRC(2b61a8d2) SHA1(1b5cabbab252b2ffb6ed12fb7e4181de7695ed9a))
ROM_LOAD("video2.bin", 0x2000, 0x2000, CRC(50126db1) SHA1(58d89e44131554cb087c4cad62869f90366704ad))
@ -555,10 +561,10 @@ ROM_END
/ Trailer (1985)
/-------------------------------------------------------------------*/
ROM_START(trailer)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("trcpu.rom", 0x0000, 0x2000, CRC(cc81f84d) SHA1(7a3282a47de271fde84cfddbaceb118add0df116))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("trsndu3.rom", 0x0000, 0x2000, CRC(05975c29) SHA1(e54d3a5613c3e39fc0338a53dbadc2e91c09ffe3))
ROM_LOAD("trsndu4.rom", 0x2000, 0x0800, CRC(bda2a735) SHA1(134b5abb813ed8bf2eeac0861b4c88c7176582d8))
ROM_END
@ -567,20 +573,20 @@ ROM_END
/ Meg Aaton
/-------------------------------------------------------------------*/
ROM_START(megaaton)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("cpumegat.bin", 0x0000, 0x2000, CRC(7e7a4ede) SHA1(3194b367cbbf6e0cb2629cd5d82ddee6fe36985a))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436))
ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761))
ROM_END
ROM_START(megaatona)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("mega_u12.bin", 0x0000, 0x1000, CRC(65761b02) SHA1(dd9586eaf70698ef7a80ce1be293322f64829aea))
ROM_LOAD("mega_u11.bin", 0x1000, 0x1000, CRC(513f3683) SHA1(0f080a33426df1ffdb14e9b2e6382304e201e335))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436))
ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761))
ROM_END
@ -589,10 +595,10 @@ ROM_END
/ ??/87 Iron Balls (Stargame)
/-------------------------------------------------------------------*/
ROM_START(ironball)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("video.bin", 0x0000, 0x2000, CRC(1867ebff) SHA1(485e46c742d914febcbdd58cb5a886f1d773282a))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_REGION(0x4000, "audiocpu", 0)
ROM_LOAD("sound.bin", 0x0000, 0x2000, CRC(83165483) SHA1(5076e5e836105d69c4ba606d8b995ecb16f88504))
ROM_END
@ -600,16 +606,16 @@ ROM_END
/ ??/83 Miss Disco (Bingo machine)
/-------------------------------------------------------------------*/
ROM_START(msdisco)
ROM_REGION(0x10000, "maincpu", 0)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("1.bin", 0x0000, 0x1000, CRC(06fb7da9) SHA1(36c6fda166b2a07a5ed9ad5d2b6fdfe8fd707b0f))
ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_REGION(0x4000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
GAME(1982, spain82, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Spain '82", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1983, megaaton, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
GAME(1983, megaatona, megaaton, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
GAME(1984, nautilus, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Nautilus", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
GAME(1983, megaaton, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1983, megaatona, megaaton, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1984, nautilus, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Nautilus", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1984, theraid, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "The Raid", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1984, ufo_x, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "UFO-X", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1984, kz26, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "KZ-26", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
@ -617,11 +623,11 @@ GAME(1985, rock2500, 0, play_5, play_5, driver_device, 0, ROT0, "Playma
GAME(1985, starfirp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1985, starfirpa, starfirp, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1985, trailer, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Trailer", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1986, fldragon, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1986, fldragona, fldragon, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon (alternate set)", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1986, fldragon, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1986, fldragona, fldragon, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Flash Dragon (alternate set)", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
GAME(1987, phntmshp, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Phantom Ship", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1987, sklflite, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
// not by Playmatic, but same hardware
GAME(1987, ironball, 0, play_5, play_5, driver_device, 0, ROT0, "Stargame", "Iron Balls", MACHINE_MECHANICAL | MACHINE_NO_SOUND)
GAME(1987, ironball, 0, play_5, play_5, driver_device, 0, ROT0, "Stargame", "Iron Balls", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
// bingo hardware, to be split (?)
GAME(1983, msdisco, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Miss Disco (Bingo)", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -9,7 +9,9 @@
<color red="1.0" green="0.0" blue="0.0" />
</led7seg>
</element>
<element name="red_led">
<disk><color red="1.0" green="1.0" blue="0.0" /></disk>
</element>
<element name="background">
<rect>
<bounds left="0" top="0" right="1" bottom="1" />
@ -18,10 +20,12 @@
</element>
<element name="P0"><text string="Match"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P1"><text string="Credits"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P2"><text string="Ball"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<element name="P7"><text string="1 2 3 4 5"><color red="1.0" green="1.0" blue="1.0" /></text></element>
<view name="Default Layout">
@ -120,6 +124,9 @@
<bezel name="digit41" element="digit">
<bounds left="54" top="345" right="88" bottom="384" />
</bezel>
<bezel name="digit43" element="digit">
<bounds left="142" top="345" right="176" bottom="384" />
</bezel>
<bezel name="digit44" element="digit">
<bounds left="186" top="345" right="220" bottom="384" />
</bezel>
@ -127,11 +134,23 @@
<bounds left="230" top="345" right="264" bottom="384" />
</bezel>
<bezel element="P0"><bounds left="200" right="260" top="330" bottom="342" /></bezel>
<bezel element="P0"><bounds left="180" right="240" top="330" bottom="342" /></bezel>
<bezel element="P1"><bounds left="20" right="80" top="330" bottom="342" /></bezel>
<bezel element="P2"><bounds left="110" right="168" top="270" bottom="282" /></bezel>
<bezel name="text1" element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel>
<bezel name="text2" element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
<bezel name="text3" element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
<bezel name="text4" element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
<bezel element="P7"><bounds left="110" right="168" top="290" bottom="302" /></bezel>
<bezel name="led1" element="red_led">
<bounds left="114" right="119" top="305" bottom="310" /></bezel>
<bezel name="led2" element="red_led">
<bounds left="124" right="129" top="305" bottom="310" /></bezel>
<bezel name="led3" element="red_led">
<bounds left="134" right="139" top="305" bottom="310" /></bezel>
<bezel name="led4" element="red_led">
<bounds left="146" right="151" top="305" bottom="310" /></bezel>
<bezel name="led5" element="red_led">
<bounds left="156" right="161" top="305" bottom="310" /></bezel>
</view>
</mamelayout>