mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Playmatic Pinballs : WIP
This commit is contained in:
parent
8d5c5edbc5
commit
15fcefa4d5
@ -18,6 +18,8 @@ Status:
|
||||
#include "machine/genpin.h"
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
#include "machine/clock.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "play_1.lh"
|
||||
|
||||
class play_1_state : public driver_device
|
||||
{
|
||||
@ -25,12 +27,10 @@ public:
|
||||
play_1_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_dips(*this, "X")
|
||||
, m_monotone(*this, "monotone")
|
||||
{ }
|
||||
|
||||
DECLARE_DRIVER_INIT(play_1);
|
||||
DECLARE_READ8_MEMBER(port00_r);
|
||||
DECLARE_READ8_MEMBER(port01_r);
|
||||
DECLARE_READ8_MEMBER(port06_r);
|
||||
DECLARE_READ8_MEMBER(port07_r);
|
||||
DECLARE_WRITE8_MEMBER(port01_w);
|
||||
DECLARE_WRITE8_MEMBER(port02_w);
|
||||
@ -38,7 +38,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(port04_w);
|
||||
DECLARE_WRITE8_MEMBER(port05_w);
|
||||
DECLARE_WRITE8_MEMBER(port06_w);
|
||||
DECLARE_WRITE8_MEMBER(port07_w);
|
||||
DECLARE_READ_LINE_MEMBER(clear_r);
|
||||
DECLARE_READ_LINE_MEMBER(ef2_r);
|
||||
DECLARE_READ_LINE_MEMBER(ef3_r);
|
||||
@ -47,96 +46,261 @@ public:
|
||||
|
||||
private:
|
||||
UINT16 m_resetcnt;
|
||||
UINT8 m_segment;
|
||||
UINT8 m_digit;
|
||||
UINT8 m_match;
|
||||
virtual void machine_reset() override;
|
||||
required_device<cosmac_device> m_maincpu;
|
||||
required_ioport_array<4> m_dips;
|
||||
required_device<clock_device> m_monotone;
|
||||
};
|
||||
|
||||
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(0x0800, 0x081f) AM_RAM
|
||||
AM_RANGE(0x0800, 0x081f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 3-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(0x0c00, 0x0c1f) AM_RAM
|
||||
AM_RANGE(0x0c00, 0x0c1f) AM_RAM AM_SHARE("nvram") // capacitor acting as a 3-month "battery"
|
||||
AM_RANGE(0x0e00, 0x0e1f) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( play_1_io, AS_IO, 8, play_1_state )
|
||||
AM_RANGE(0x00, 0x00) AM_READ(port00_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(port01_r,port01_w) //segments
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // N1-8
|
||||
AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) // D1-4
|
||||
AM_RANGE(0x04, 0x04) AM_WRITE(port04_w) // U1-8
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE(port05_w) // V1-8
|
||||
AM_RANGE(0x06, 0x06) AM_READWRITE(port06_r,port06_w) // W1-8, input selector
|
||||
AM_RANGE(0x07, 0x07) AM_READ(port07_r) // another input selector
|
||||
AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(port01_w) //segments
|
||||
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_WRITE(port02_w) // N1-8
|
||||
AM_RANGE(0x03, 0x03) AM_READ_PORT("IN3") AM_WRITE(port03_w) // D1-4
|
||||
AM_RANGE(0x04, 0x04) AM_READ_PORT("IN4") AM_WRITE(port04_w) // U1-8
|
||||
AM_RANGE(0x05, 0x05) AM_READ_PORT("IN5") AM_WRITE(port05_w) // V1-8
|
||||
AM_RANGE(0x06, 0x06) AM_READ_PORT("IN6") AM_WRITE(port06_w) // W1-8
|
||||
AM_RANGE(0x07, 0x07) AM_READ(port07_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START( play_1 )
|
||||
PORT_START("DSW0")
|
||||
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_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(0x02, 0x00, "Balls")
|
||||
PORT_DIPSETTING ( 0x00, "3" )
|
||||
PORT_DIPSETTING ( 0x02, "5" )
|
||||
PORT_DIPNAME(0x04, 0x00, "Special award")
|
||||
PORT_DIPSETTING ( 0x00, "Free game" )
|
||||
PORT_DIPSETTING ( 0x04, "Extra ball" )
|
||||
// rotary switches for credits per coin
|
||||
|
||||
PORT_START("X.1")
|
||||
PORT_DIPNAME(0xff, 0x20, "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 ) )
|
||||
PORT_DIPSETTING ( 0x08, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING ( 0x10, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPSETTING ( 0x20, DEF_STR( 1C_4C ) )
|
||||
PORT_DIPSETTING ( 0x40, DEF_STR( 1C_5C ) )
|
||||
PORT_DIPSETTING ( 0x80, DEF_STR( 1C_6C ) )
|
||||
|
||||
PORT_START("X.2")
|
||||
PORT_DIPNAME(0xff, 0x20, "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 ) )
|
||||
PORT_DIPSETTING ( 0x08, DEF_STR( 1C_6C ) )
|
||||
PORT_DIPSETTING ( 0x10, DEF_STR( 1C_7C ) )
|
||||
PORT_DIPSETTING ( 0x20, DEF_STR( 1C_8C ) )
|
||||
PORT_DIPSETTING ( 0x40, DEF_STR( 1C_9C ) )
|
||||
PORT_DIPSETTING ( 0x80, "1 coin 10 credits" )
|
||||
|
||||
PORT_START("IN1") // 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("IN2") // 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("IN3") // 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("IN4") // 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("IN5") // 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("IN6") // 61-68
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
|
||||
|
||||
PORT_START("X.3") // 71-78
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_6)
|
||||
INPUT_PORTS_END
|
||||
|
||||
void play_1_state::machine_reset()
|
||||
{
|
||||
m_resetcnt = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_1_state::port00_r )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_1_state::port01_r )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_1_state::port06_r )
|
||||
{
|
||||
return 0xff; // Big Town etc check this at boot
|
||||
m_segment = 0;
|
||||
m_digit = 0;
|
||||
m_match = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_1_state::port07_r )
|
||||
{
|
||||
return 0;
|
||||
UINT8 data = m_dips[3]->read();
|
||||
data |= (m_segment & m_dips[1]->read()) ? 0x40 : 0;
|
||||
data |= (m_segment & m_dips[2]->read()) ? 0x80 : 0;
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port01_w )
|
||||
{
|
||||
static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
// d0-1 via 4013 to match-game board
|
||||
// d4-7 via 4511 to match-game board
|
||||
if BIT(data, 0)
|
||||
output().set_digit_value(40, patterns[1]);
|
||||
else
|
||||
output().set_digit_value(40, 0);
|
||||
|
||||
if BIT(data, 1)
|
||||
output().set_digit_value(45, patterns[0]);
|
||||
else
|
||||
output().set_digit_value(45, 0);
|
||||
|
||||
m_match = patterns[data>>4] & 0x7f;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port02_w )
|
||||
{
|
||||
// N1-8, segments and other
|
||||
m_segment = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port03_w )
|
||||
{
|
||||
static const UINT8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
|
||||
// D1-4, digit select
|
||||
// according to the schematic, there's nothing to light up the tens and units for players 2,3,4
|
||||
m_digit = data & 15;
|
||||
switch (m_digit)
|
||||
{
|
||||
case 1:
|
||||
// a combination of bits could set higher frequencies, but that isn't documented
|
||||
if BIT(m_segment, 0)
|
||||
m_monotone->set_unscaled_clock(523);
|
||||
else
|
||||
if BIT(m_segment, 1)
|
||||
m_monotone->set_unscaled_clock(659);
|
||||
else
|
||||
if BIT(m_segment, 2)
|
||||
m_monotone->set_unscaled_clock(784);
|
||||
else
|
||||
if BIT(m_segment, 3)
|
||||
m_monotone->set_unscaled_clock(988);
|
||||
else
|
||||
m_monotone->set_unscaled_clock(0);
|
||||
break;
|
||||
case 2:
|
||||
output().set_digit_value(0, patterns[m_segment>>4]);
|
||||
output().set_digit_value(1, patterns[m_segment&15]);
|
||||
break;
|
||||
case 3:
|
||||
output().set_digit_value(2, patterns[m_segment>>4]);
|
||||
output().set_digit_value(3, patterns[m_segment&15]);
|
||||
break;
|
||||
case 4:
|
||||
output().set_digit_value(4, patterns[m_segment>>4]);
|
||||
output().set_digit_value(5, patterns[m_segment&15]);
|
||||
break;
|
||||
case 5:
|
||||
output().set_digit_value(10, patterns[m_segment>>4]);
|
||||
output().set_digit_value(11, patterns[m_segment&15]);
|
||||
break;
|
||||
case 6:
|
||||
output().set_digit_value(12, patterns[m_segment>>4]);
|
||||
output().set_digit_value(13, patterns[m_segment&15]);
|
||||
break;
|
||||
case 7:
|
||||
output().set_digit_value(20, patterns[m_segment>>4]);
|
||||
output().set_digit_value(21, patterns[m_segment&15]);
|
||||
break;
|
||||
case 8:
|
||||
output().set_digit_value(22, patterns[m_segment>>4]);
|
||||
output().set_digit_value(23, patterns[m_segment&15]);
|
||||
break;
|
||||
case 9:
|
||||
output().set_digit_value(30, patterns[m_segment>>4]);
|
||||
output().set_digit_value(31, patterns[m_segment&15]);
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
output().set_digit_value(32, patterns[m_segment>>4]);
|
||||
output().set_digit_value(33, patterns[m_segment&15]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port04_w )
|
||||
{
|
||||
// U1-8
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port05_w )
|
||||
{
|
||||
// V1-8
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_1_state::port06_w )
|
||||
{
|
||||
// W1-8
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_1_state::clear_r )
|
||||
@ -149,29 +313,30 @@ READ_LINE_MEMBER( play_1_state::clear_r )
|
||||
|
||||
READ_LINE_MEMBER( play_1_state::ef2_r )
|
||||
{
|
||||
return BIT(ioport("DSW0")->read(), 0); // 1 or 3 games dip (1=1 game)
|
||||
return !BIT(m_dips[0]->read(), 0); // 1 or 3 games dip (1=1 game) inverted
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_1_state::ef3_r )
|
||||
{
|
||||
return BIT(ioport("DSW0")->read(), 1); // 3 or 5 balls dip (1=5 balls)
|
||||
return !BIT(m_dips[0]->read(), 1); // 3 or 5 balls dip (1=5 balls) inverted
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_1_state::ef4_r )
|
||||
{
|
||||
return BIT(ioport("DSW0")->read(), 2); // extra ball or game dip (1=extra ball)
|
||||
return !BIT(m_dips[0]->read(), 2); // extra ball or game dip (1=extra ball) inverted
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( play_1_state::clock_w )
|
||||
{
|
||||
m_maincpu->int_w(1);
|
||||
m_maincpu->int_w(0); // INT is a pulse-line
|
||||
m_maincpu->ef1_w(state);
|
||||
// also, state and !state go to display panel
|
||||
}
|
||||
m_maincpu->int_w(0);
|
||||
m_maincpu->ef1_w(!state); // inverted
|
||||
if (state)
|
||||
output().set_digit_value(41, m_match);
|
||||
else
|
||||
output().set_digit_value(44, m_match);
|
||||
m_maincpu->int_w(1); // INT is a pulse-line - inverted
|
||||
|
||||
DRIVER_INIT_MEMBER(play_1_state,play_1)
|
||||
{
|
||||
// also, state and !state go to display panel
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( play_1, play_1_state )
|
||||
@ -185,11 +350,21 @@ static MACHINE_CONFIG_START( play_1, play_1_state )
|
||||
MCFG_COSMAC_EF3_CALLBACK(READLINE(play_1_state, ef3_r))
|
||||
MCFG_COSMAC_EF4_CALLBACK(READLINE(play_1_state, ef4_r))
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
/* Video */
|
||||
MCFG_DEFAULT_LAYOUT(layout_play_1)
|
||||
|
||||
MCFG_DEVICE_ADD("xpoint", CLOCK, 60) // crossing-point detector
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_1_state, clock_w))
|
||||
|
||||
/* Sound */
|
||||
MCFG_FRAGMENT_ADD( genpin_audio )
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MCFG_DEVICE_ADD("monotone", CLOCK, 0) // sound device
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("speaker", speaker_sound_device, level_w))
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( chance, play_1 )
|
||||
@ -245,8 +420,8 @@ 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, play_1_state, play_1, ROT0, "Playmatic", "Big Town", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1978, chance, 0, chance, play_1, play_1_state, play_1, ROT0, "Playmatic", "Chance", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1978, lastlap, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Last Lap", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1978, spcgambl, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Space Gambler", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1979, party, 0, play_1, play_1, play_1_state, play_1, ROT0, "Playmatic", "Party", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1978, bigtown, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Big Town", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
GAME(1978, chance, 0, chance, play_1, driver_device, 0, ROT0, "Playmatic", "Chance", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
GAME(1978, lastlap, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Last Lap", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
GAME(1978, spcgambl, 0, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Space Gambler", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
GAME(1979, party, bigtown, play_1, play_1, driver_device, 0, ROT0, "Playmatic", "Party", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
|
@ -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 )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_2_state::port02_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_2_state::port03_w )
|
||||
{
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_2_state::port04_r )
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_2_state::port05_r )
|
||||
{
|
||||
return 0xff;
|
||||
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::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 )
|
||||
{
|
||||
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 m_keyboard[6]->read();
|
||||
}
|
||||
|
||||
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::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);
|
||||
return (!BIT(m_clockcnt, 10)); // inverted
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_2_state::ef4_r )
|
||||
{
|
||||
return 1; // test button
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( play_2_state, play_2 )
|
||||
{
|
||||
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)
|
||||
|
@ -13,7 +13,7 @@ Status:
|
||||
- Mechanical sounds to add
|
||||
|
||||
***********************************************************************************/
|
||||
|
||||
#if 0
|
||||
|
||||
#include "machine/genpin.h"
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
@ -217,3 +217,4 @@ ROM_END
|
||||
|
||||
GAME(1983, megaaton, 0, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1983, megaatona, megaaton, play_3, play_3, play_3_state, play_3, ROT0, "Playmatic", "Meg-Aaton (alternate set)", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
#endif
|
||||
|
@ -1,28 +1,53 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Miodrag Milanovic, Robbbert
|
||||
/**********************************************************************************
|
||||
/*********************************************************************************************
|
||||
|
||||
PINBALL
|
||||
Playmatic MPU 5
|
||||
Playmatic MPU 3,4,5
|
||||
|
||||
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
|
||||
- Most games work
|
||||
-- Spain82: not working
|
||||
-- Nautilus: sound is broken (runs into the weeds)
|
||||
-- Skill Flight: not working, no sound roms
|
||||
-- Flash Dragon: no sound roms
|
||||
-- Meg Aaton: not working (No Ball)
|
||||
|
||||
(note to self: MPU3 and MPU5 appear at first glance to be identical apart from
|
||||
cpu clock. MPU2 also appears to be identical to MPU3 apart from the RAM address.
|
||||
If the sound cards are sufficiently similar, we should be able to merge all 3.)
|
||||
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.
|
||||
- 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.
|
||||
- Any games marked working actually do work, but like most pinballs they are a pain to play
|
||||
with the keyboard.
|
||||
|
||||
Setting up:
|
||||
The manual is not that clear, there's a lot we don't know, this *seems* to work...
|
||||
- Start machine, wait for it to say No Ball, and it plays a tune
|
||||
- Press 8 (to simulate opening the front door)
|
||||
- Press 1, it says BooP (Bookkeeping)
|
||||
- Press 8 and the credits number increments to 8, then 01 and on to 17 (2 pushes per number)
|
||||
- When it gets to 01, the display says Adjust
|
||||
- To adjust a setting, press 1 to choose a digit, then tap 9 until it is correct.
|
||||
- The settings in the manual do not fully line up with what we see in the display.
|
||||
|
||||
|
||||
***********************************************************************************************/
|
||||
|
||||
|
||||
#include "machine/genpin.h"
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/7474.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "play_5.lh"
|
||||
|
||||
|
||||
class play_5_state : public driver_device
|
||||
{
|
||||
@ -30,11 +55,12 @@ public:
|
||||
play_5_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_5);
|
||||
DECLARE_WRITE8_MEMBER(port01_w);
|
||||
DECLARE_WRITE8_MEMBER(port02_w);
|
||||
DECLARE_WRITE8_MEMBER(port03_w);
|
||||
@ -48,14 +74,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<10> m_keyboard;
|
||||
};
|
||||
|
||||
|
||||
@ -65,50 +103,181 @@ static ADDRESS_MAP_START( play_5_map, AS_PROGRAM, 8, play_5_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( play_5_io, AS_IO, 8, play_5_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(0x04, 0x04) AM_READ(port04_r)
|
||||
AM_RANGE(0x05, 0x05) AM_READ(port05_r)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(port01_w) // digits, scan-lines
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(port02_w) // sound code
|
||||
AM_RANGE(0x03, 0x03) AM_WRITE(port03_w) //
|
||||
AM_RANGE(0x04, 0x04) AM_READ(port04_r) // switches
|
||||
AM_RANGE(0x05, 0x05) AM_READ(port05_r) // more switches
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(port06_w) // segments
|
||||
AM_RANGE(0x07, 0x07) AM_WRITE(port07_w)
|
||||
AM_RANGE(0x07, 0x07) AM_WRITE(port07_w) // flipflop clear
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( play_5_audio_map, AS_PROGRAM, 8, play_5_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_5_audio_io, AS_IO, 8, play_5_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_5 )
|
||||
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( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_TOGGLE // zone select (door switch)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_X) // outhole
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_TOGGLE // test button
|
||||
|
||||
PORT_START("X.7")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_TILT )
|
||||
PORT_BIT( 0xE0, IP_ACTIVE_HIGH, IPT_UNUSED )
|
||||
|
||||
PORT_START("X.8")
|
||||
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_UNUSED )
|
||||
|
||||
PORT_START("X.9")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE )
|
||||
INPUT_PORTS_END
|
||||
|
||||
void play_5_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_5_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] & 0x7f);
|
||||
// decimal dot on tens controls if last 0 shows or not
|
||||
if ((j == 5) && BIT(m_segment[i], 7))
|
||||
output().set_digit_value(60 + i, 0x3f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_5_state::port02_w )
|
||||
{
|
||||
m_soundlatch = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_5_state::port03_w )
|
||||
{
|
||||
if BIT(data, 6)
|
||||
m_audiocpu->ef1_w(1); // inverted
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_5_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_5_state::port05_r )
|
||||
{
|
||||
return 0xff;
|
||||
UINT8 data = 0, key8 = m_keyboard[8]->read() & 0x0f;
|
||||
if BIT(m_kbdrow, 0)
|
||||
data |= m_keyboard[6]->read();
|
||||
if BIT(m_kbdrow, 1)
|
||||
data |= m_keyboard[7]->read();
|
||||
return (data & 0xf0) | key8;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_5_state::port06_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_5_state::port07_w )
|
||||
@ -117,6 +286,18 @@ WRITE8_MEMBER( play_5_state::port07_w )
|
||||
m_4013b->clear_w(1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( play_5_state::port01_a_w )
|
||||
{
|
||||
m_a_irqset = data;
|
||||
m_a_irqcnt = (m_a_irqset << 3) | 7;
|
||||
}
|
||||
|
||||
READ8_MEMBER( play_5_state::port02_a_r )
|
||||
{
|
||||
m_audiocpu->ef1_w(0); // inverted
|
||||
return m_soundlatch;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_5_state::clear_r )
|
||||
{
|
||||
// A hack to make the machine reset itself on boot
|
||||
@ -125,18 +306,22 @@ READ_LINE_MEMBER( play_5_state::clear_r )
|
||||
return (m_resetcnt == 0xff00) ? 0 : 1;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_5_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_5_state::ef1_r )
|
||||
{
|
||||
return BIT(m_clockcnt, 10);
|
||||
return (!BIT(m_clockcnt, 10)); // inverted
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( play_5_state::ef4_r )
|
||||
{
|
||||
return 1; // reset button
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( play_5_state, play_5 )
|
||||
{
|
||||
return BIT(m_keyboard[9]->read(), 0); // inverted test button - doesn't seem to do anything
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( play_5_state::clock_w )
|
||||
@ -149,13 +334,24 @@ WRITE_LINE_MEMBER( play_5_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_5_state::clock2_w )
|
||||
{
|
||||
m_4013b->clock_w(state);
|
||||
m_maincpu->ef3_w(!state);
|
||||
m_maincpu->ef3_w(state); // inverted
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( play_5_state::q4013a_w )
|
||||
@ -176,6 +372,10 @@ static MACHINE_CONFIG_START( play_5, play_5_state )
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
|
||||
/* Video */
|
||||
MCFG_DEFAULT_LAYOUT(layout_play_5)
|
||||
|
||||
// Devices
|
||||
MCFG_DEVICE_ADD("tpb_clock", CLOCK, XTAL_3_579545MHz / 8) // TPB line from CPU
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(play_5_state, clock_w))
|
||||
|
||||
@ -184,17 +384,30 @@ static MACHINE_CONFIG_START( play_5, play_5_state )
|
||||
|
||||
// This is actually a 4013 chip (has 2 RS flipflops)
|
||||
MCFG_DEVICE_ADD("4013a", TTL7474, 0)
|
||||
MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w))
|
||||
MCFG_7474_OUTPUT_CB(WRITELINE(play_5_state, q4013a_w))
|
||||
MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("4013a", ttl7474_device, d_w))
|
||||
|
||||
MCFG_DEVICE_ADD("4013b", TTL7474, 0)
|
||||
MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w))
|
||||
MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // int is reversed in mame
|
||||
MCFG_7474_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, ef2_w)) MCFG_DEVCB_INVERT // inverted
|
||||
MCFG_7474_COMP_OUTPUT_CB(DEVWRITELINE("maincpu", cosmac_device, int_w)) MCFG_DEVCB_INVERT // inverted
|
||||
|
||||
/* Sound */
|
||||
MCFG_FRAGMENT_ADD( genpin_audio )
|
||||
|
||||
MCFG_CPU_ADD("audiocpu", CDP1802, XTAL_3_579545MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(play_5_audio_map)
|
||||
MCFG_CPU_IO_MAP(play_5_audio_io)
|
||||
MCFG_COSMAC_WAIT_CALLBACK(VCC)
|
||||
MCFG_COSMAC_CLEAR_CALLBACK(READLINE(play_5_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
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------
|
||||
/ KZ-26 (1984)
|
||||
/-------------------------------------------------------------------*/
|
||||
@ -331,14 +544,38 @@ ROM_START(trailer)
|
||||
ROM_LOAD("trsndu4.rom", 0x2000, 0x0800, CRC(bda2a735) SHA1(134b5abb813ed8bf2eeac0861b4c88c7176582d8))
|
||||
ROM_END
|
||||
|
||||
GAME(1982, spain82, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Spain '82", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1984, nautilus, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Nautilus", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1984, theraid, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "The Raid", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1984, ufo_x, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "UFO-X", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1984, kz26, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "KZ-26", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1985, rock2500, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Rock 2500", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1985, starfirp, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1985, starfirpa, starfirp, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Star Fire (alternate set)", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1985, trailer, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Trailer", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1986, fldragon, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Flash Dragon", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
GAME(1987, sklflite, 0, play_5, play_5, play_5_state, play_5, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_IS_SKELETON_MECHANICAL)
|
||||
/*-------------------------------------------------------------------
|
||||
/ Meg Aaton
|
||||
/-------------------------------------------------------------------*/
|
||||
ROM_START(megaaton)
|
||||
ROM_REGION(0x10000, "maincpu", 0)
|
||||
ROM_LOAD("cpumegat.bin", 0x0000, 0x2000, CRC(7e7a4ede) SHA1(3194b367cbbf6e0cb2629cd5d82ddee6fe36985a))
|
||||
|
||||
ROM_REGION(0x10000, "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_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_LOAD("smogot.bin", 0x0000, 0x2000, CRC(fefc3ab2) SHA1(e748d9b443a69fcdd587f22c87d41818b6c0e436))
|
||||
ROM_LOAD("smegat.bin", 0x2000, 0x1000, CRC(910ab7fe) SHA1(0ddfd15c9c25f43b8fcfc4e11bc8ea180f6bd761))
|
||||
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(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)
|
||||
GAME(1985, rock2500, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Rock 2500", MACHINE_MECHANICAL | MACHINE_IMPERFECT_SOUND)
|
||||
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(1987, sklflite, 0, play_5, play_5, driver_device, 0, ROT0, "Playmatic", "Skill Flight (Playmatic)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
||||
|
145
src/mame/layout/play_1.lay
Normal file
145
src/mame/layout/play_1.lay
Normal file
@ -0,0 +1,145 @@
|
||||
<!-- play_1.lay -->
|
||||
|
||||
<!-- 2016-08-13: Initial version. [Robbbert] -->
|
||||
|
||||
<mamelayout version="2">
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="1.0" green="0.0" blue="0.0" />
|
||||
</led7seg>
|
||||
</element>
|
||||
|
||||
<element name="background">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="P0"><text string="Ball/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="Extra"><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>
|
||||
|
||||
<view name="Default Layout">
|
||||
|
||||
<!-- Background -->
|
||||
<backdrop element="background">
|
||||
<bounds left="0" top="20" right="274" bottom="394" />
|
||||
</backdrop>
|
||||
|
||||
<!-- LEDs -->
|
||||
|
||||
<!-- Player 1 Score -->
|
||||
|
||||
<bezel name="digit0" element="digit">
|
||||
<bounds left="10" top="45" right="44" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit1" element="digit">
|
||||
<bounds left="54" top="45" right="88" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit2" element="digit">
|
||||
<bounds left="98" top="45" right="132" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit3" element="digit">
|
||||
<bounds left="142" top="45" right="176" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit4" element="digit">
|
||||
<bounds left="186" top="45" right="220" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit5" element="digit">
|
||||
<bounds left="230" top="45" right="264" bottom="84" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 2 Score -->
|
||||
<bezel name="digit10" element="digit">
|
||||
<bounds left="10" top="105" right="44" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit11" element="digit">
|
||||
<bounds left="54" top="105" right="88" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit12" element="digit">
|
||||
<bounds left="98" top="105" right="132" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit13" element="digit">
|
||||
<bounds left="142" top="105" right="176" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit14" element="digit">
|
||||
<bounds left="186" top="105" right="220" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit15" element="digit">
|
||||
<bounds left="230" top="105" right="264" bottom="144" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 3 Score -->
|
||||
<bezel name="digit20" element="digit">
|
||||
<bounds left="10" top="165" right="44" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit21" element="digit">
|
||||
<bounds left="54" top="165" right="88" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit22" element="digit">
|
||||
<bounds left="98" top="165" right="132" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit23" element="digit">
|
||||
<bounds left="142" top="165" right="176" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit24" element="digit">
|
||||
<bounds left="186" top="165" right="220" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit25" element="digit">
|
||||
<bounds left="230" top="165" right="264" bottom="204" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 4 Score -->
|
||||
<bezel name="digit30" element="digit">
|
||||
<bounds left="10" top="225" right="44" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit31" element="digit">
|
||||
<bounds left="54" top="225" right="88" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit32" element="digit">
|
||||
<bounds left="98" top="225" right="132" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit33" element="digit">
|
||||
<bounds left="142" top="225" right="176" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit34" element="digit">
|
||||
<bounds left="186" top="225" right="220" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit35" element="digit">
|
||||
<bounds left="230" top="225" right="264" bottom="264" />
|
||||
</bezel>
|
||||
|
||||
<!-- Credits and Balls -->
|
||||
<bezel name="digit40" element="digit">
|
||||
<bounds left="10" top="345" right="44" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit41" element="digit">
|
||||
<bounds left="54" top="345" right="88" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit42" element="digit">
|
||||
<bounds left="98" top="345" right="132" 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>
|
||||
<bezel name="digit45" element="digit">
|
||||
<bounds left="230" top="345" right="264" bottom="384" />
|
||||
</bezel>
|
||||
|
||||
<bezel element="P0"><bounds left="60" right="130" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P1"><bounds left="200" right="260" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P2"><bounds left="10" right="48" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel>
|
||||
<bezel element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
|
||||
<bezel element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
|
||||
<bezel element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
|
||||
</view>
|
||||
</mamelayout>
|
145
src/mame/layout/play_2.lay
Normal file
145
src/mame/layout/play_2.lay
Normal file
@ -0,0 +1,145 @@
|
||||
<!-- play_2.lay -->
|
||||
|
||||
<!-- 2016-08-12: Initial version. [Robbbert] -->
|
||||
|
||||
<mamelayout version="2">
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="1.0" green="0.0" blue="0.0" />
|
||||
</led7seg>
|
||||
</element>
|
||||
|
||||
<element name="background">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="P0"><text string="Ball/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="Extra"><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>
|
||||
|
||||
<view name="Default Layout">
|
||||
|
||||
<!-- Background -->
|
||||
<backdrop element="background">
|
||||
<bounds left="0" top="20" right="274" bottom="394" />
|
||||
</backdrop>
|
||||
|
||||
<!-- LEDs -->
|
||||
|
||||
<!-- Player 1 Score -->
|
||||
|
||||
<bezel name="digit0" element="digit">
|
||||
<bounds left="10" top="45" right="44" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit10" element="digit">
|
||||
<bounds left="54" top="45" right="88" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit20" element="digit">
|
||||
<bounds left="98" top="45" right="132" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit30" element="digit">
|
||||
<bounds left="142" top="45" right="176" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit40" element="digit">
|
||||
<bounds left="186" top="45" right="220" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit50" element="digit">
|
||||
<bounds left="230" top="45" right="264" bottom="84" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 2 Score -->
|
||||
<bezel name="digit1" element="digit">
|
||||
<bounds left="10" top="105" right="44" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit11" element="digit">
|
||||
<bounds left="54" top="105" right="88" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit21" element="digit">
|
||||
<bounds left="98" top="105" right="132" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit31" element="digit">
|
||||
<bounds left="142" top="105" right="176" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit41" element="digit">
|
||||
<bounds left="186" top="105" right="220" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit51" element="digit">
|
||||
<bounds left="230" top="105" right="264" bottom="144" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 3 Score -->
|
||||
<bezel name="digit2" element="digit">
|
||||
<bounds left="10" top="165" right="44" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit12" element="digit">
|
||||
<bounds left="54" top="165" right="88" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit22" element="digit">
|
||||
<bounds left="98" top="165" right="132" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit32" element="digit">
|
||||
<bounds left="142" top="165" right="176" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit42" element="digit">
|
||||
<bounds left="186" top="165" right="220" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit52" element="digit">
|
||||
<bounds left="230" top="165" right="264" bottom="204" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 4 Score -->
|
||||
<bezel name="digit3" element="digit">
|
||||
<bounds left="10" top="225" right="44" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit13" element="digit">
|
||||
<bounds left="54" top="225" right="88" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit23" element="digit">
|
||||
<bounds left="98" top="225" right="132" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit33" element="digit">
|
||||
<bounds left="142" top="225" right="176" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit43" element="digit">
|
||||
<bounds left="186" top="225" right="220" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit53" element="digit">
|
||||
<bounds left="230" top="225" right="264" bottom="264" />
|
||||
</bezel>
|
||||
|
||||
<!-- Credits and Balls -->
|
||||
<bezel name="digit4" element="digit">
|
||||
<bounds left="10" top="345" right="44" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit14" element="digit">
|
||||
<bounds left="54" top="345" right="88" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit24" element="digit">
|
||||
<bounds left="98" top="345" right="132" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit34" 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>
|
||||
<bezel name="digit54" element="digit">
|
||||
<bounds left="230" top="345" right="264" bottom="384" />
|
||||
</bezel>
|
||||
|
||||
<bezel element="P0"><bounds left="60" right="130" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P1"><bounds left="200" right="260" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P2"><bounds left="10" right="48" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel>
|
||||
<bezel element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
|
||||
<bezel element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
|
||||
<bezel element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
|
||||
</view>
|
||||
</mamelayout>
|
154
src/mame/layout/play_5.lay
Normal file
154
src/mame/layout/play_5.lay
Normal file
@ -0,0 +1,154 @@
|
||||
<!-- play_5.lay -->
|
||||
|
||||
<!-- 2016-08-12: Initial version. [Robbbert] -->
|
||||
|
||||
<mamelayout version="2">
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="1.0" green="0.0" blue="0.0" />
|
||||
</led7seg>
|
||||
</element>
|
||||
|
||||
<element name="background">
|
||||
<rect>
|
||||
<bounds left="0" top="0" right="1" bottom="1" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="P0"><text string="Ball/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="Extra"><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>
|
||||
|
||||
<view name="Default Layout">
|
||||
|
||||
<!-- Background -->
|
||||
<backdrop element="background">
|
||||
<bounds left="0" top="20" right="318" bottom="394" />
|
||||
</backdrop>
|
||||
|
||||
<!-- LEDs -->
|
||||
|
||||
<!-- Player 1 Score -->
|
||||
|
||||
<bezel name="digit0" element="digit">
|
||||
<bounds left="10" top="45" right="44" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit10" element="digit">
|
||||
<bounds left="54" top="45" right="88" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit20" element="digit">
|
||||
<bounds left="98" top="45" right="132" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit30" element="digit">
|
||||
<bounds left="142" top="45" right="176" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit40" element="digit">
|
||||
<bounds left="186" top="45" right="220" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit50" element="digit">
|
||||
<bounds left="230" top="45" right="264" bottom="84" />
|
||||
</bezel>
|
||||
<bezel name="digit60" element="digit">
|
||||
<bounds left="274" top="45" right="308" bottom="84" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 2 Score -->
|
||||
<bezel name="digit1" element="digit">
|
||||
<bounds left="10" top="105" right="44" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit11" element="digit">
|
||||
<bounds left="54" top="105" right="88" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit21" element="digit">
|
||||
<bounds left="98" top="105" right="132" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit31" element="digit">
|
||||
<bounds left="142" top="105" right="176" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit41" element="digit">
|
||||
<bounds left="186" top="105" right="220" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit51" element="digit">
|
||||
<bounds left="230" top="105" right="264" bottom="144" />
|
||||
</bezel>
|
||||
<bezel name="digit61" element="digit">
|
||||
<bounds left="274" top="105" right="308" bottom="144" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 3 Score -->
|
||||
<bezel name="digit2" element="digit">
|
||||
<bounds left="10" top="165" right="44" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit12" element="digit">
|
||||
<bounds left="54" top="165" right="88" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit22" element="digit">
|
||||
<bounds left="98" top="165" right="132" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit32" element="digit">
|
||||
<bounds left="142" top="165" right="176" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit42" element="digit">
|
||||
<bounds left="186" top="165" right="220" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit52" element="digit">
|
||||
<bounds left="230" top="165" right="264" bottom="204" />
|
||||
</bezel>
|
||||
<bezel name="digit62" element="digit">
|
||||
<bounds left="274" top="165" right="308" bottom="204" />
|
||||
</bezel>
|
||||
|
||||
<!-- Player 4 Score -->
|
||||
<bezel name="digit3" element="digit">
|
||||
<bounds left="10" top="225" right="44" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit13" element="digit">
|
||||
<bounds left="54" top="225" right="88" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit23" element="digit">
|
||||
<bounds left="98" top="225" right="132" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit33" element="digit">
|
||||
<bounds left="142" top="225" right="176" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit43" element="digit">
|
||||
<bounds left="186" top="225" right="220" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit53" element="digit">
|
||||
<bounds left="230" top="225" right="264" bottom="264" />
|
||||
</bezel>
|
||||
<bezel name="digit63" element="digit">
|
||||
<bounds left="274" top="225" right="308" bottom="264" />
|
||||
</bezel>
|
||||
|
||||
<!-- Credits and Balls -->
|
||||
<bezel name="digit4" element="digit">
|
||||
<bounds left="10" top="345" right="44" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit14" element="digit">
|
||||
<bounds left="54" top="345" right="88" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit34" element="digit">
|
||||
<bounds left="142" top="345" right="176" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit54" element="digit">
|
||||
<bounds left="230" top="345" right="264" bottom="384" />
|
||||
</bezel>
|
||||
<bezel name="digit64" element="digit">
|
||||
<bounds left="274" top="345" right="308" bottom="384" />
|
||||
</bezel>
|
||||
|
||||
<bezel element="P0"><bounds left="240" right="298" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P1"><bounds left="30" right="88" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P2"><bounds left="120" right="200" top="330" bottom="342" /></bezel>
|
||||
<bezel element="P3"><bounds left="100" right="180" top="30" bottom="42" /></bezel>
|
||||
<bezel element="P4"><bounds left="100" right="180" top="90" bottom="102" /></bezel>
|
||||
<bezel element="P5"><bounds left="100" right="180" top="150" bottom="162" /></bezel>
|
||||
<bezel element="P6"><bounds left="100" right="180" top="210" bottom="222" /></bezel>
|
||||
</view>
|
||||
</mamelayout>
|
Loading…
Reference in New Issue
Block a user