summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/play_2.cpp
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2016-08-14 00:38:28 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2016-08-14 00:38:28 +1000
commit15fcefa4d58a82563e1c054c77db5f4e64f70377 (patch)
tree83799acb2081074efd609dcded0f7803c26ec959 /src/mame/drivers/play_2.cpp
parent8d5c5edbc573c84661ae0dd5607934972f54510e (diff)
Playmatic Pinballs : WIP
Diffstat (limited to 'src/mame/drivers/play_2.cpp')
-rw-r--r--src/mame/drivers/play_2.cpp239
1 files changed, 207 insertions, 32 deletions
diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp
index 4a386b6cc6f..a0c9e8376ad 100644
--- a/src/mame/drivers/play_2.cpp
+++ b/src/mame/drivers/play_2.cpp
@@ -6,11 +6,11 @@ PINBALL
Playmatic MPU 2
Status:
-- Main board is emulated and working (currently runs the initial test mode)
-- Displays to add
-- Switches, lamps, solenoids to add
-- Sound board to emulate
+- 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
***********************************************************************************/
@@ -19,6 +19,8 @@ Status:
#include "cpu/cosmac/cosmac.h"
#include "machine/clock.h"
#include "machine/7474.h"
+#include "sound/ay8910.h"
+#include "play_2.lh"
class play_2_state : public driver_device
{
@@ -26,11 +28,12 @@ public:
play_2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_audiocpu(*this, "audiocpu")
, m_4013a(*this, "4013a")
, m_4013b(*this, "4013b")
+ , m_keyboard(*this, "X")
{ }
- DECLARE_DRIVER_INIT(play_2);
DECLARE_WRITE8_MEMBER(port01_w);
DECLARE_WRITE8_MEMBER(port02_w);
DECLARE_WRITE8_MEMBER(port03_w);
@@ -44,14 +47,26 @@ 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);
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;
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;
+ required_ioport_array<8> m_keyboard;
};
@@ -70,41 +85,156 @@ static ADDRESS_MAP_START( play_2_io, AS_IO, 8, play_2_state )
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
+ADDRESS_MAP_END
+
static INPUT_PORTS_START( play_2 )
+ PORT_START("X.0") // 11-18
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5_PAD)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6_PAD)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7_PAD)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8_PAD)
+
+ 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( 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_START("X.2") // 31-38
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_L)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_C)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_V)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_B)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_N)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_M)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
+
+ PORT_START("X.3") // 41-48
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_A)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
+
+ PORT_START("X.4") // 51-58
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
+
+ PORT_START("X.5") // 61-68
+ 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_START("X.6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) // zone select (door switch)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_9) // reset button on the ios board
+
+ PORT_START("X.7")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE ) // reset button on main cpu EF4
INPUT_PORTS_END
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++)
+ m_segment[i] = 0;
}
WRITE8_MEMBER( play_2_state::port01_w )
{
+ m_kbdrow = data;
+ if (m_kbdrow && m_disp_sw)
+ {
+ m_disp_sw = 0;
+ 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]);
+ }
}
-WRITE8_MEMBER( play_2_state::port02_w )
+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 )
{
- return 0xff;
+ if (m_kbdrow & 0x3f)
+ for (UINT8 i = 0; i < 6; i++)
+ if BIT(m_kbdrow, i)
+ return m_keyboard[i]->read();
+
+ return 0;
}
READ8_MEMBER( play_2_state::port05_r )
{
- return 0xff;
+ return m_keyboard[6]->read();
}
-WRITE8_MEMBER( play_2_state::port06_w )
+WRITE8_MEMBER( play_2_state::port02_w )
{
+ m_segment[4] = m_segment[3];
+ m_segment[3] = m_segment[2];
+ m_segment[2] = m_segment[1];
+ m_segment[1] = m_segment[0];
+ m_segment[0] = data;
+ m_disp_sw = 1;
}
WRITE8_MEMBER( play_2_state::port07_w )
@@ -113,6 +243,18 @@ WRITE8_MEMBER( play_2_state::port07_w )
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
@@ -121,18 +263,22 @@ READ_LINE_MEMBER( play_2_state::clear_r )
return (m_resetcnt == 0xff00) ? 0 : 1;
}
-READ_LINE_MEMBER( play_2_state::ef1_r )
+READ_LINE_MEMBER( play_2_state::clear_a_r )
{
- return BIT(m_clockcnt, 10);
+ // 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::ef4_r )
+READ_LINE_MEMBER( play_2_state::ef1_r )
{
- return 1; // test button
+ return (!BIT(m_clockcnt, 10)); // inverted
}
-DRIVER_INIT_MEMBER( play_2_state, play_2 )
+READ_LINE_MEMBER( play_2_state::ef4_r )
{
+ return BIT(m_keyboard[7]->read(), 0); // inverted test button - doesn't seem to do anything
}
WRITE_LINE_MEMBER( play_2_state::clock_w )
@@ -145,13 +291,24 @@ 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
+ }
}
}
WRITE_LINE_MEMBER( play_2_state::clock2_w )
{
m_4013b->clock_w(state);
- m_maincpu->ef3_w(!state);
+ m_maincpu->ef3_w(state); // inverted
}
WRITE_LINE_MEMBER( play_2_state::q4013a_w )
@@ -172,6 +329,9 @@ static MACHINE_CONFIG_START( play_2, play_2_state )
MCFG_NVRAM_ADD_0FILL("nvram")
+ /* Video */
+ MCFG_DEFAULT_LAYOUT(layout_play_2)
+
MCFG_DEVICE_ADD("tpb_clock", CLOCK, 2950000 / 8) // TPB line from CPU
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_2_state, clock_w))
@@ -189,6 +349,18 @@ 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)
MACHINE_CONFIG_END
/*-------------------------------------------------------------------
@@ -200,6 +372,8 @@ ROM_START(antar)
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)
@@ -208,6 +382,8 @@ ROM_START(antar2)
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
@@ -220,6 +396,8 @@ ROM_START(evlfight)
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_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_END
/*-------------------------------------------------------------------
@@ -246,6 +424,8 @@ ROM_START(attack)
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
/*-------------------------------------------------------------------
@@ -257,6 +437,8 @@ ROM_START(blkfever)
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
/*-------------------------------------------------------------------
@@ -267,7 +449,7 @@ ROM_START(zira)
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", 0)
+ ROM_REGION(0x10000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("zira.snd", 0x0000, 0x0400, NO_DUMP)
ROM_END
@@ -284,19 +466,12 @@ ROM_START(cerberup)
ROM_LOAD("cerb.snd", 0x0000, 0x2000, CRC(8af53a23) SHA1(a80b57576a1eb1b4544b718b9abba100531e3942))
ROM_END
-// ??/84 Nautilus
-// ??/84 The Raid
-// ??/85 Stop Ship
-// ??/86 Flash Dragon
-// ??/87 Phantom Ship
-// ??/87 Skill Flight
-
-
-GAME(1979, antar, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 1)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1979, antar2, antar, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Antar (set 2)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, evlfight, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Evil Fight", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, attack, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Attack", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, blkfever, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Black Fever", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1982, cerberup, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Cerberus (Pinball)", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1985, madrace, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Mad Race", MACHINE_IS_SKELETON_MECHANICAL)
-GAME(1980, zira, 0, play_2, play_2, play_2_state, play_2, ROT0, "Playmatic", "Zira", MACHINE_IS_SKELETON_MECHANICAL)
+
+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)