From ed27efc34cfaaf161193c66afb302cd247bc4b7d Mon Sep 17 00:00:00 2001 From: James Wallace Date: Thu, 30 Jun 2022 22:43:47 +0100 Subject: 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. --- src/mame/barcrest/mpu4.cpp | 114 ++++++++++-------- src/mame/barcrest/mpu4.h | 24 ++-- src/mame/barcrest/mpu4bwb.cpp | 2 +- src/mame/barcrest/mpu4crystal.cpp | 2 +- src/mame/barcrest/mpu4mod2sw.cpp | 47 ++------ src/mame/barcrest/mpu4mod4yam.cpp | 9 +- src/mame/barcrest/mpu4unsorted.cpp | 13 +- src/mame/barcrest/mpu4vid.cpp | 5 +- src/mame/layout/connect4.lay | 241 +++++++++++++++++++++++++------------ 9 files changed, 280 insertions(+), 177 deletions(-) diff --git a/src/mame/barcrest/mpu4.cpp b/src/mame/barcrest/mpu4.cpp index 3a5c6846f15..7abb643c2fd 100644 --- a/src/mame/barcrest/mpu4.cpp +++ b/src/mame/barcrest/mpu4.cpp @@ -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,31 +547,23 @@ void mpu4_state::pia_ic3_portb_w(uint8_t data) { if (m_lamp_strobe2 != m_input_strobe) { - for (i = 0; i < 8; i++) + if (m_overcurrent_detect) { - m_lamps[(8*m_input_strobe)+i+64] = BIT(data, i); + m_overcurrent = true; + } + + if (m_undercurrent_detect) + { + m_undercurrent = true; } - 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_lamps[(8*m_input_strobe)+i+64] = BIT(data, i); } - - m_digits[8] = pled_segs[0]; - m_digits[9] = pled_segs[1]; + m_lamp_strobe2 = m_input_strobe; } + } } @@ -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) - { - m_aux1_input |= 0x40; - } - else + if (m_overcurrent_detect) { - 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); diff --git a/src/mame/barcrest/mpu4.h b/src/mame/barcrest/mpu4.h index 945345bd558..ffdd9b31ec6 100644 --- a/src/mame/barcrest/mpu4.h +++ b/src/mame/barcrest/mpu4.h @@ -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}; }; diff --git a/src/mame/barcrest/mpu4bwb.cpp b/src/mame/barcrest/mpu4bwb.cpp index 2b1a0289f25..c16c5931476 100644 --- a/src/mame/barcrest/mpu4bwb.cpp +++ b/src/mame/barcrest/mpu4bwb.cpp @@ -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); } diff --git a/src/mame/barcrest/mpu4crystal.cpp b/src/mame/barcrest/mpu4crystal.cpp index a5f03688497..f6cc52b3389 100644 --- a/src/mame/barcrest/mpu4crystal.cpp +++ b/src/mame/barcrest/mpu4crystal.cpp @@ -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; } diff --git a/src/mame/barcrest/mpu4mod2sw.cpp b/src/mame/barcrest/mpu4mod2sw.cpp index b87bb5e73b7..e45b470f423 100644 --- a/src/mame/barcrest/mpu4mod2sw.cpp +++ b/src/mame/barcrest/mpu4mod2sw.cpp @@ -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) diff --git a/src/mame/barcrest/mpu4mod4yam.cpp b/src/mame/barcrest/mpu4mod4yam.cpp index ca3c4eea799..e36b25537b9 100644 --- a/src/mame/barcrest/mpu4mod4yam.cpp +++ b/src/mame/barcrest/mpu4mod4yam.cpp @@ -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, mpu4mod4yam_machines_state, init_m4default, ROT0, "Barcrest","Jolly Joker (Barcrest) (Dutch) (MPU4) (DJJ 1.5)",GAME_FLAGS) // Geen Tubes diff --git a/src/mame/barcrest/mpu4unsorted.cpp b/src/mame/barcrest/mpu4unsorted.cpp index d92c3b8e95d..1615480814c 100644 --- a/src/mame/barcrest/mpu4unsorted.cpp +++ b/src/mame/barcrest/mpu4unsorted.cpp @@ -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 diff --git a/src/mame/barcrest/mpu4vid.cpp b/src/mame/barcrest/mpu4vid.cpp index 342a5777eb6..857c8cbcf6d 100644 --- a/src/mame/barcrest/mpu4vid.cpp +++ b/src/mame/barcrest/mpu4vid.cpp @@ -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. diff --git a/src/mame/layout/connect4.lay b/src/mame/layout/connect4.lay index 4125254e1a1..404a84c1010 100644 --- a/src/mame/layout/connect4.lay +++ b/src/mame/layout/connect4.lay @@ -3,47 +3,127 @@ license:CC0 --> - - - - + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + + + + + + + + ]]> + + + + - + - + + + + + - + - + + + + + - - - - - + + - - - - - + + - - - - + @@ -640,77 +720,90 @@ license:CC0 - - - - - - - - - - - - - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + - - + + - - + + - - + + + + + + + + + + -- cgit v1.2.3