From 4808e882903367d1eaa4f24b540e4b413f098b00 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Fri, 19 Aug 2016 03:24:05 +1000 Subject: [PATCH] Playmatic Pinball: All MPU-1 games working, plus other WIP. --- src/mame/drivers/play_1.cpp | 112 ++++++++----- src/mame/drivers/play_2.cpp | 312 +++++++++++++++++++----------------- src/mame/drivers/play_5.cpp | 92 ++++++----- src/mame/layout/play_1.lay | 23 ++- 4 files changed, 311 insertions(+), 228 deletions(-) diff --git a/src/mame/drivers/play_1.cpp b/src/mame/drivers/play_1.cpp index 47d2ee83e67..7e54a6f09a2 100644 --- a/src/mame/drivers/play_1.cpp +++ b/src/mame/drivers/play_1.cpp @@ -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 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 ) diff --git a/src/mame/drivers/play_2.cpp b/src/mame/drivers/play_2.cpp index bf18c83cc5c..de1192d41fc 100644 --- a/src/mame/drivers/play_2.cpp +++ b/src/mame/drivers/play_2.cpp @@ -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 m_maincpu; - required_device m_audiocpu; required_device m_4013a; required_device m_4013b; + optional_device m_1863; + optional_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) diff --git a/src/mame/drivers/play_5.cpp b/src/mame/drivers/play_5.cpp index 2d0e5b69b4f..55d2a0f5a2e 100644 --- a/src/mame/drivers/play_5.cpp +++ b/src/mame/drivers/play_5.cpp @@ -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 m_audiocpu; required_device m_4013a; required_device m_4013b; + required_device m_aysnd1; + required_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) diff --git a/src/mame/layout/play_1.lay b/src/mame/layout/play_1.lay index 09de3911e74..3c3d57fcd0d 100644 --- a/src/mame/layout/play_1.lay +++ b/src/mame/layout/play_1.lay @@ -9,7 +9,9 @@ - + + + @@ -18,10 +20,12 @@ + + @@ -120,6 +124,9 @@ + + + @@ -127,11 +134,23 @@ - + + + + + + + + + + + + +