barcrest/mpu4*: Refactoring and functionality additions. (#10002)

* Added the ability to override the lamp current checks (will fix Lamp Drive errors) - Connect4 no longer requires a lamping hack.
* Replaced data logger with serial loopback for systems that expect this.
This commit is contained in:
James Wallace 2022-06-30 22:43:47 +01:00 committed by GitHub
parent 1a79bbb5e7
commit ed27efc34c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 283 additions and 180 deletions

View File

@ -519,6 +519,16 @@ void mpu4_state::pia_ic3_porta_w(uint8_t data)
// As a consequence, the lamp column data can change before the input strobe without
// causing the relevant lamps to black out.
if (m_overcurrent_detect)
{
m_overcurrent = true;
}
if (m_undercurrent_detect)
{
m_undercurrent = true;
}
for (i = 0; i < 8; i++)
{
m_lamps[(8*m_input_strobe)+i] = BIT(data, i);
@ -537,6 +547,16 @@ void mpu4_state::pia_ic3_portb_w(uint8_t data)
{
if (m_lamp_strobe2 != m_input_strobe)
{
if (m_overcurrent_detect)
{
m_overcurrent = true;
}
if (m_undercurrent_detect)
{
m_undercurrent = true;
}
for (i = 0; i < 8; i++)
{
m_lamps[(8*m_input_strobe)+i+64] = BIT(data, i);
@ -544,24 +564,6 @@ void mpu4_state::pia_ic3_portb_w(uint8_t data)
m_lamp_strobe2 = m_input_strobe;
}
if (m_led_lamp)
{
/* Some games (like Connect 4) use 'programmable' LED displays, built from light display lines in section 2. */
/* These are mostly low-tech machines, where such wiring proved cheaper than an extender card */
uint8_t pled_segs[2] = {0,0};
static const int lamps1[8] = { 106, 107, 108, 109, 104, 105, 110, 111 };
static const int lamps2[8] = { 114, 115, 116, 117, 112, 113, 118, 119 };
for (i = 0; i < 8; i++)
{
if (m_lamps[lamps1[i]]) pled_segs[0] |= (1 << i);
if (m_lamps[lamps2[i]]) pled_segs[1] |= (1 << i);
}
m_digits[8] = pled_segs[0];
m_digits[9] = pled_segs[1];
}
}
}
@ -635,7 +637,7 @@ void mpu4_state::ic24_setup()
{
double duration = TIME_OF_74LS123((220*1000),(0.1*0.000001));
{
m_ic23_active=1;
m_ic23_active=true;
ic24_output(0);
m_ic24_timer->adjust(attotime::from_double(duration));
}
@ -645,14 +647,13 @@ void mpu4_state::ic24_setup()
TIMER_CALLBACK_MEMBER(mpu4_state::update_ic24)
{
m_ic23_active=0;
m_ic23_active=false;
ic24_output(1);
}
WRITE_LINE_MEMBER(mpu4_state::dataport_rxd)
{
m_serial_data = state;
m_pia4->cb1_w(state);
LOG_IC3(("Dataport RX %x\n",state));
}
@ -697,7 +698,9 @@ void mpu4_state::pia_ic4_portb_w(uint8_t data)
uint8_t mpu4_state::pia_ic4_portb_r()
{
if ( m_serial_data )
m_ic4_input_b = 0x00;
if (m_pia5->ca2_output())
{
m_ic4_input_b |= 0x80;
}
@ -735,17 +738,15 @@ uint8_t mpu4_state::pia_ic4_portb_r()
if ( m_signal_50hz ) m_ic4_input_b |= 0x04; /* 50 Hz */
else m_ic4_input_b &= ~0x04;
if (m_ic4_input_b & 0x02)
if ( m_overcurrent )
{
m_ic4_input_b &= ~0x02;
m_ic4_input_b |= 0x02;
}
else
if ( m_undercurrent )
{
m_ic4_input_b |= 0x02; //Pulse the overcurrent line with every read to show the CPU each lamp has lit
m_ic4_input_b |= 0x01;
}
#if 0
if ( lamp_undercurrent ) m_ic4_input_b |= 0x01;
#endif
LOG_IC3(("%s: IC4 PIA Read of Port B %x\n",machine().describe_context(),m_ic4_input_b));
return m_ic4_input_b;
@ -771,13 +772,16 @@ uint8_t mpu4_state::pia_ic5_porta_r()
{
if (m_lamp_extender == LARGE_CARD_A)
{
if (m_lamp_sense && m_ic23_active)
if (m_overcurrent_detect)
{
m_aux1_input |= 0x40;
}
else
{
m_aux1_input &= ~0x40; //Pulse the overcurrent line with every read to show the CPU each lamp has lit
if (m_lamp_sense && m_ic23_active)
{
m_aux1_input |= 0x40;
}
else
{
m_aux1_input &= ~0x40; //Pulse the overcurrent line with every read to show the CPU each lamp has lit
}
}
}
if (m_hopper == HOPPER_NONDUART_A)
@ -921,13 +925,6 @@ uint8_t mpu4_state::pia_ic5_portb_r()
}
WRITE_LINE_MEMBER(mpu4_state::pia_ic5_ca2_w)
{
LOG(("%s: IC5 PIA Write CA2 (Serial Tx) %2x\n",machine().describe_context(),state));
m_dataport->write_txd(state);
}
/* ---------------------------------------
AY Chip sound function selection -
---------------------------------------
@ -1901,7 +1898,7 @@ MACHINE_START_MEMBER(mpu4_state,mod2)
{
mpu4_config_common();
m_link7a_connected=0;
m_link7a_connected=false;
m_mod_number=2;
}
@ -1910,7 +1907,7 @@ MACHINE_START_MEMBER(mpu4_state,mpu4yam)
address_space &space = m_maincpu->space(AS_PROGRAM);
mpu4_config_common();
m_link7a_connected=0;
m_link7a_connected=false;
m_mod_number=4;
mpu4_install_mod4yam_space(space);
}
@ -1920,7 +1917,7 @@ MACHINE_START_MEMBER(mpu4_state,mpu4oki)
address_space &space = m_maincpu->space(AS_PROGRAM);
mpu4_config_common();
m_link7a_connected=0;
m_link7a_connected=false;
m_mod_number=4;
mpu4_install_mod4oki_space(space);
}
@ -2163,7 +2160,7 @@ void mpu4_state::use_m4_seven_reel()
void mpu4_state::use_m4_low_volt_alt()
{
//Some games can't use the 50Hz circuit to check voltage issues, handle it here
m_low_volt_detect_disable = 1;
m_low_volt_detect = false;
}
void mpu4_state::use_m4_small_extender()
@ -2242,7 +2239,7 @@ void mpu4_state::setup_rom_banks()
/* generate a 50 Hz signal (based on an RC time) */
TIMER_DEVICE_CALLBACK_MEMBER(mpu4_state::gen_50hz)
{
if (!m_low_volt_detect_disable)
if (m_low_volt_detect)
{
/* Although reported as a '50Hz' signal, the fact that both rising and
falling edges of the pulse are used means the timer actually gives a 100Hz
@ -2325,7 +2322,7 @@ void mpu4_state::mpu4_common(machine_config &config)
m_pia5->readpb_handler().set(FUNC(mpu4_state::pia_ic5_portb_r));
m_pia5->writepa_handler().set(FUNC(mpu4_state::pia_ic5_porta_w));
m_pia5->writepb_handler().set(FUNC(mpu4_state::pia_ic5_portb_w));
m_pia5->ca2_handler().set(FUNC(mpu4_state::pia_ic5_ca2_w));
m_pia5->ca2_handler().set(m_dataport, FUNC(bacta_datalogger_device::write_txd));
m_pia5->cb2_handler().set(FUNC(mpu4_state::pia_ic5_cb2_w));
m_pia5->irqa_handler().set(FUNC(mpu4_state::cpu0_irq));
m_pia5->irqb_handler().set(FUNC(mpu4_state::cpu0_irq));
@ -2421,6 +2418,13 @@ void mpu4_state::mod2(machine_config &config)
mpu4_reels<0, 6>(config);
}
void mpu4_state::mod2_no_bacta(machine_config &config)
{
mod2(config);
config.device_remove("dataport");
m_pia5->ca2_handler().set(m_pia4, FUNC(pia6821_device::cb1_w));
}
void mpu4_state::mod2_7reel(machine_config &config)
{
mpu4base(config);
@ -2530,6 +2534,13 @@ void mpu4_state::mod4yam(machine_config &config)
m_ym2413->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
void mpu4_state::mod4yam_no_bacta(machine_config &config)
{
mod4yam(config);
config.device_remove("dataport");
m_pia5->ca2_handler().set(m_pia4, FUNC(pia6821_device::cb1_w));
}
void mpu4_state::mod4yam_chr(machine_config &config)
{
mod4yam(config);
@ -2603,6 +2614,13 @@ void mpu4_state::mod4oki(machine_config &config)
m_msm6376->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
}
void mpu4_state::mod4oki_no_bacta(machine_config &config)
{
mod4oki(config);
config.device_remove("dataport");
m_pia5->ca2_handler().set(m_pia4, FUNC(pia6821_device::cb1_w));
}
void mpu4_state::mod4oki_7reel(machine_config &config)
{
mpu4base(config);

View File

@ -179,6 +179,7 @@ public:
void init_m4default_seven();
void mod2(machine_config &config);
void mod2_no_bacta(machine_config &config);
void mod2_7reel(machine_config &config);
void mod2_cheatchr(machine_config &config);
@ -416,12 +417,14 @@ public:
void mod4oki_alt_cheatchr_table(machine_config& config, const uint8_t* table);
void mod4oki(machine_config &config);
void mod4oki_no_bacta(machine_config &config);
void mod4oki_7reel(machine_config &config);
void mod4oki_cheatchr(machine_config &config);
void mod4oki_cheatchr_table(machine_config &config, const uint8_t* table);
void mod4oki_chr(machine_config &config);
void mod4yam(machine_config &config);
void mod4yam_no_bacta(machine_config &config);
void mod4yam_7reel(machine_config &config);
void mod4yam_cheatchr(machine_config &config);
void mod4yam_cheatchr_table(machine_config& config, const uint8_t* table);
@ -434,6 +437,7 @@ public:
void mpu4_common(machine_config &config);
void mpu4_common2(machine_config &config);
void mpu4base(machine_config &config);
void mpu4_bacta(machine_config &config);
protected:
@ -514,7 +518,6 @@ protected:
void pia_ic5_porta_w(uint8_t data);
void pia_ic5_portb_w(uint8_t data);
uint8_t pia_ic5_portb_r();
DECLARE_WRITE_LINE_MEMBER(pia_ic5_ca2_w);
DECLARE_WRITE_LINE_MEMBER(pia_ic5_cb2_w);
void pia_ic6_portb_w(uint8_t data);
void pia_ic6_porta_w(uint8_t data);
@ -578,7 +581,7 @@ protected:
// 0-63 are on PIA IC3 port A (always present)
// 64-127 are on PIA IC3 port B (always present)
// 128-132 136-140 144-148 152-156 160-164 168-172 176-180 184-188 are on small lamp extender
// 128-255 are on large lamp externders
// 128-255 are on large lamp extenders
output_finder<256> m_lamps;
// 0-63 are on PIA IC4 port A (always present)
@ -599,7 +602,6 @@ protected:
int m_mod_number = 0;
int m_mmtr_data = 0;
int m_ay8913_address = 0;
int m_serial_data = 0;
int m_signal_50hz = 0;
int m_ic4_input_b = 0;
int m_aux1_input = 0;
@ -612,10 +614,7 @@ protected:
int m_IC23GA = 0;
int m_reel_flag = 0;
int m_ic23_active = 0;
int m_led_lamp = 0;
int m_link7a_connected = 0;
int m_low_volt_detect_disable = 0;
bool m_ic23_active = false;
emu_timer *m_ic24_timer = nullptr;
int m_expansion_latch = 0;
int m_global_volume = 0;
@ -650,6 +649,17 @@ protected:
int m_t3h = 0;
uint8_t m_numbanks = 0;
bool m_link7a_connected = false;
bool m_overcurrent = false;
bool m_undercurrent = false;
bool m_overcurrent_detect = true;
bool m_undercurrent_detect = false;
bool m_low_volt_detect = true;
static constexpr uint8_t reel_mux_table[8]= {0,4,2,6,1,5,3,7};//include 7, although I don't think it's used, this is basically a wire swap
static constexpr uint8_t reel_mux_table7[8]= {3,1,5,6,4,2,0,7};
};

View File

@ -116,7 +116,7 @@ MACHINE_START_MEMBER(mpu4bwb_machines_state,mpu4bwb)
address_space &space = m_maincpu->space(AS_PROGRAM);
mpu4_config_common();
m_link7a_connected=0;
m_link7a_connected=false;
m_mod_number=4;
mpu4_install_mod4bwb_space(space);
}

View File

@ -35,7 +35,7 @@ MACHINE_START_MEMBER(mpu4crystal_machines_state,mpu4cry)
{
mpu4_config_common();
m_link7a_connected=0;
m_link7a_connected=false;
m_mod_number=4;
}

View File

@ -49,50 +49,30 @@ public:
void mpu4mod2_machines_state::init_connect4()
{
m_reels = 0; //reel-free game
m_led_lamp = 1;
m_overcurrent_detect = true;
setup_rom_banks();
}
INPUT_PORTS_START( connect4 )
PORT_START("ORANGE1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("00")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("01")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("02")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("03")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("04")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("05")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("06")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("07")
PORT_BIT(0xFF, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("ORANGE2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("08")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("09")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("11")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("12")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("13")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("14")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("15")
PORT_BIT(0xFF, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("BLACK1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("16")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("17")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("18")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("19")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("20")
PORT_BIT(0x1F, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Test Switch")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_SERVICE) PORT_NAME("Refill Key") PORT_CODE(KEYCODE_R) PORT_TOGGLE
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Switch?") PORT_TOGGLE
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_INTERLOCK) PORT_NAME("Cashbox (Back) Door") PORT_CODE(KEYCODE_Q) PORT_TOGGLE
PORT_START("BLACK2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Select")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("25")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_START2) PORT_NAME("Pass")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Play")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("28")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("29")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("30")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_START2) PORT_NAME("Pass / Collect")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_START1) PORT_NAME("Play / Continue")
PORT_BIT(0x70, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_NAME("Drop")
PORT_START("DIL1")
@ -148,14 +128,7 @@ INPUT_PORTS_START( connect4 )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
PORT_START("AUX1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("0")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("5")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("6")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("7")
PORT_BIT(0xFF, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("AUX2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM)

View File

@ -17,6 +17,7 @@ public:
}
void init_m4addr();
void init_m4test4();
void mod4yam_cheatchr_gambal(machine_config &config);
@ -74,6 +75,11 @@ void mpu4mod4yam_machines_state::init_m4addr()
//Front door code 0 Cash door code 0
}
void mpu4mod4yam_machines_state::init_m4test4()
{
init_m4default();
m_overcurrent_detect = true;
}
INPUT_PORTS_START( m4addr )
@ -1525,14 +1531,13 @@ ROM_START( m4voodoo )
ROM_LOAD( "ddo32", 0x0000, 0x010000, CRC(260dfef1) SHA1(2b4918e40808963a86d289cd251740a9b0bed70a) )
ROM_END
ROM_START( m4magdrg )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "dmd10.bin", 0x0000, 0x010000, CRC(9cc4f2f8) SHA1(46a90ffa18d35ad2b06542f91120c02bc34f0c40) )
ROM_END
GAME(198?, m4tst, 0, mod4yam, mpu4, mpu4mod4yam_machines_state, init_m4default, ROT0,"Barcrest","MPU4 Unit Test (Program 4)",MACHINE_MECHANICAL )
GAME(198?, m4tst, 0, mod4yam_no_bacta, mpu4, mpu4mod4yam_machines_state, init_m4test4, ROT0,"Barcrest","MPU4 Unit Test (Program 4)",MACHINE_MECHANICAL )
GAME(199?, m4joljokd, 0, mod4yam_cheatchr_pal<mpu4_characteriser_pal::celclb_characteriser_prot>, mpu4, mpu4mod4yam_machines_state, init_m4default, ROT0, "Barcrest","Jolly Joker (Barcrest) (Dutch) (MPU4) (DJJ 1.5)",GAME_FLAGS) // Geen Tubes

View File

@ -30,9 +30,14 @@ public:
}
void init_m4aao();
void init_m4test();
};
void mpu4unsorted_state::init_m4test()
{
init_m4default();
m_overcurrent_detect = true;
}
#include "m4aao.lh"
@ -1465,9 +1470,9 @@ ROM_END
/* Barcrest */
GAME( 198?, m4tst2, 0, mod2, mpu4, mpu4unsorted_state, init_m4default, ROT0, "Barcrest","MPU4 Unit Test (Program 2)",MACHINE_MECHANICAL )
GAME( 198?, m4clr, 0, mod2, mpu4, mpu4unsorted_state, init_m4default, ROT0, "Barcrest","MPU4 Meter Clear ROM",MACHINE_MECHANICAL )
GAME( 198?, m4rltst, 0, mod2, mpu4, mpu4unsorted_state, init_m4default, ROT0, "Barcrest","MPU4 Reel Test (3.0)",MACHINE_MECHANICAL )
GAME( 198?, m4tst2, 0, mod2_no_bacta, mpu4, mpu4unsorted_state, init_m4test, ROT0, "Barcrest","MPU4 Unit Test (Program 2)",MACHINE_MECHANICAL )
GAME( 198?, m4clr, 0, mod2_no_bacta, mpu4, mpu4unsorted_state, init_m4test, ROT0, "Barcrest","MPU4 Meter Clear ROM",MACHINE_MECHANICAL )
GAME( 198?, m4rltst, 0, mod2_no_bacta, mpu4, mpu4unsorted_state, init_m4test, ROT0, "Barcrest","MPU4 Reel Test (3.0)",MACHINE_MECHANICAL )
// barcrest, to split

View File

@ -1867,7 +1867,7 @@ void mpu4vid_state::machine_start()
m_mod_number=2;
/* setup communications */
m_link7a_connected = 1;
m_link7a_connected = true;
}
void mpu4vid_state::machine_reset()
@ -2118,7 +2118,6 @@ void mpu4vid_state::mpu4_vid(machine_config &config)
mpu4_common(config);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(VIDEO_MASTER_CLOCK, (63*8)+(17*8), 0, (63*8), (37*8)+17, 0, (37*8));
@ -8701,7 +8700,7 @@ ROM_END
/* Complete sets */
/* Standard sets are the most common setups, while Datapak releases use a BACTA datalogger (not emulated) to record more information about the game operation, for security etc.
/* Standard sets are the most common setups, while Datapak releases use a BACTA datalogger to record more information about the game operation, for security etc.
AMLD versions do not pay out, and instead just feature highscore tables. These were mainly intended for locations unwilling to pay for gaming licenses.
The AMLD Crystal Maze versions appear to be a mixture of the original game modules and Team Challenge's scoring system. This would suggest they were all made ~1994, despite
the copyright dates recorded.

View File

@ -3,47 +3,127 @@
license:CC0
-->
<mamelayout version="2">
<element name="digit" defstate="0">
<led7seg>
<color red="1.0" green="0.0" blue="0.0" />
</led7seg>
<element name="ledseg0">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 22.20542,9.1048101 28.73216,15.40339 90.121429,15.68542 98.067028,7.8827048 97.972444,6.3785695 91.634871,-0.01402362 H 30.245613 L 22.489191,7.8827048 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg1">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 100.27788,70.003783 V 70.003783 L 105.06448,16.31986 98.670479,10.214696 94.729561,13.241168 89.485916,18.262069 85.770371,70.989977 91.77302,76.645088 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg2">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 95.196435,139.14134 V 139.14134 L 99.575477,85.260092 93.725882,79.132488 90.12051,82.170085 85.323325,87.209441 81.258449,139.0652 88.377384,147.32974 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg3">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 8.3614993,151.77509 15.041155,158.70056 77.868647,159.01066 86.000403,150.43135 85.903597,148.77751 79.417554,141.74867 H 16.590061 L 8.651919,150.43135 Z" id="path1176" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg4">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 14.558811,138.94167 V 138.94167 L 19.193501,87.456057 13.002408,81.600896 9.1865559,84.503437 4.1093121,89.318734 0.18881344,137.65642 7.6209698,145.53443 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg5">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 20.773462,69.660587 V 69.660587 L 25.697055,15.534132 19.120048,9.3786417 15.066333,12.430062 9.6726043,17.492352 5.8507136,70.654911 12.02517,76.356638 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="ledseg6">
<image statemask="0x01">
<data>
<![CDATA[
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="60" viewBox="0 0 109.2832 165.8748">
<path fill="#ffffff" d="M 15.232441,80.263244 21.75253,86.594345 83.079166,86.877827 91.016666,79.034823 90.922173,77.522917 84.591072,71.097323 H 23.264435 L 15.515923,79.034823 Z" />
</svg>
]]>
</data>
</image>
</element>
<element name="play" defstate="0">
<text string="PLAY" state="1">
<text string="PLAYER 1ST" state="1">
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="CONTINUE" state="1">
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>
<element name="pass" defstate="0">
<text string="PASS" state="1">
<text string="MACHINE 1ST" state="1">
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
<bounds x="0" y="0.1" width="1" height="0.4" />
</text>
<text string="COLLECT" state="1">
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.5" width="1" height="0.4" />
</text>
</element>
<element name="select" defstate="0">
<rect>
<color red="1.0" green="1.0" blue="1.0" />
</rect>
<text string="SELECT" state="1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.1" width="0.8" height="0.6" />
</text>
</element>
<element name="drop" defstate="0">
<rect>
<color red="1.0" green="1.0" blue="1.0" />
</rect>
<text string="DROP" state="1">
<color red="0.0" green="0.0" blue="0.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.1" width="0.8" height="0.6" />
</text>
</element>
<element name="timeout" defstate="0">
<rect>
<color red="1.0" green="1.0" blue="1.0" />
</rect>
<text string="TIMEOUT" state="1">
<color red="0.0" green="0.0" blue="0.0" />
<color red="1.0" green="1.0" blue="1.0" />
<bounds x="0" y="0.1" width="1" height="0.8" />
</text>
</element>
@ -640,12 +720,65 @@ license:CC0
<bounds x="30" y="56" width="28" height="14"/>
</element>
<element name="digit8" ref="digit" state="0">
<element name="lamp106" ref="ledseg0" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="digit9" ref="digit" state="0">
<element name="lamp107" ref="ledseg1" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp108" ref="ledseg2" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp109" ref="ledseg3" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp104" ref="ledseg4" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp105" ref="ledseg5" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp110" ref="ledseg6" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="0" y="56" width="8" height="10"/>
</element>
<element name="lamp114" ref="ledseg0" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp115" ref="ledseg1" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp116" ref="ledseg2" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp117" ref="ledseg3" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp112" ref="ledseg4" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp113" ref="ledseg5" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp118" ref="ledseg6" state="0">
<color red="1.0" green="0.0" blue="0.0" />
<bounds x="9" y="56" width="8" height="10"/>
</element>
<element name="lamp119" ref="timeout" state="0">
<bounds x="30" y="56" width="28" height="14"/>
</element>
@ -656,61 +789,21 @@ license:CC0
<element name="lamp121" ref="pass" state="0">
<bounds x="40" y="140" width="28" height="14"/>
</element>
<element name="lamp24" ref="select" state="0">
<element name="lamp123" ref="select" state="0">
<bounds x="0" y="90" width="28" height="14"/>
</element>
<element name="lamp123" ref="drop" state="0">
<bounds x="20" y="90" width="28" height="14"/>
</element>
<element name="vfd15" ref="vfd0" state="0">
<bounds x="0" y="120" width="9" height="14"/>
</element>
<element name="vfd14" ref="vfd0" state="0">
<bounds x="9" y="120" width="9" height="14"/>
</element>
<element name="vfd13" ref="vfd0" state="0">
<bounds x="18" y="120" width="9" height="14"/>
</element>
<element name="vfd12" ref="vfd0" state="0">
<bounds x="27" y="120" width="9" height="14"/>
</element>
<element name="vfd11" ref="vfd0" state="0">
<bounds x="36" y="120" width="9" height="14"/>
</element>
<element name="vfd10" ref="vfd0" state="0">
<bounds x="45" y="120" width="9" height="14"/>
</element>
<element name="vfd9" ref="vfd0" state="0">
<bounds x="54" y="120" width="9" height="14"/>
</element>
<element name="vfd8" ref="vfd0" state="0">
<bounds x="63" y="120" width="9" height="14"/>
</element>
<element name="vfd7" ref="vfd0" state="0">
<bounds x="72" y="120" width="9" height="14"/>
</element>
<element name="vfd6" ref="vfd0" state="0">
<bounds x="81" y="120" width="9" height="14"/>
</element>
<element name="vfd5" ref="vfd0" state="0">
<bounds x="90" y="120" width="9" height="14"/>
</element>
<element name="vfd4" ref="vfd0" state="0">
<bounds x="99" y="120" width="9" height="14"/>
</element>
<element name="vfd3" ref="vfd0" state="0">
<bounds x="108" y="120" width="9" height="14"/>
</element>
<element name="vfd2" ref="vfd0" state="0">
<bounds x="117" y="120" width="9" height="14"/>
</element>
<element name="vfd1" ref="vfd0" state="0">
<bounds x="126" y="120" width="9" height="14"/>
</element>
<element name="vfd0" ref="vfd0" state="0">
<bounds x="135" y="120" width="9" height="14"/>
<element name="lamp120" ref="drop" state="0">
<bounds x="30" y="90" width="28" height="14"/>
</element>
<repeat count="16">
<param name="i" start="15" increment="-1"/>
<param name="x" start="0" increment="9"/>
<element name="vfd~i~" ref="vfd0">
<bounds x="~x~" y="120" width="9" height="14"/>
</element>
</repeat>
</view>
</mamelayout>