From e482d3f40ec378551a1dacb42b51e718f97c40d3 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sun, 26 Apr 2015 23:58:46 +0200 Subject: [PATCH] (MAME)New game added ----------------- Breakout [Couriersud, DICE Team] --- src/emu/machine/netlist.c | 3 +- src/emu/netlist/analog/nld_switches.c | 45 +++++ src/emu/netlist/analog/nld_switches.h | 10 +- src/emu/netlist/devices/net_lib.c | 1 + src/emu/netlist/devices/nld_74175.c | 9 +- src/emu/netlist/devices/nld_7432.c | 12 +- src/emu/netlist/devices/nld_7432.h | 12 +- src/emu/netlist/devices/nld_truthtable.h | 19 +- src/emu/netlist/nl_base.c | 2 + src/emu/netlist/nl_dice_compat.h | 2 +- src/emu/netlist/nl_setup.c | 3 - src/mame/drivers/atarittl.c | 5 - src/mame/drivers/nl_breakout.c | 245 +++++++++++++++++------ src/mame/drivers/pong.c | 182 ++++++++++++----- src/mame/mame.lst | 4 +- 15 files changed, 402 insertions(+), 152 deletions(-) diff --git a/src/emu/machine/netlist.c b/src/emu/machine/netlist.c index 643665caef6..daf08a61598 100644 --- a/src/emu/machine/netlist.c +++ b/src/emu/machine/netlist.c @@ -370,7 +370,8 @@ void netlist_mame_device_t::device_clock_changed() //printf("device_clock_changed\n"); m_div = netlist_time::from_hz(clock()).as_raw(); //m_rem = 0; - NL_VERBOSE_OUT(("Setting clock %" I64FMT "d and divisor %d\n", clockfreq, m_div)); + //NL_VERBOSE_OUT(("Setting clock %" I64FMT "d and divisor %d\n", clock(), m_div)); + NL_VERBOSE_OUT(("Setting clock %d and divisor %d\n", clock(), m_div)); //printf("Setting clock %d and divisor %d\n", clock(), m_div); } diff --git a/src/emu/netlist/analog/nld_switches.c b/src/emu/netlist/analog/nld_switches.c index 8e3a6d490fe..45d45f6ad83 100644 --- a/src/emu/netlist/analog/nld_switches.c +++ b/src/emu/netlist/analog/nld_switches.c @@ -9,6 +9,51 @@ #define R_OFF (1.0 / netlist().gmin()) #define R_ON 0.01 +// ---------------------------------------------------------------------------------------- +// SWITCH +// ---------------------------------------------------------------------------------------- + +NETLIB_START(switch1) +{ + register_sub(m_R, "R"); + + register_param("POS", m_POS, 0); + + register_subalias("1", m_R.m_P); + register_subalias("2", m_R.m_N); +} + +NETLIB_RESET(switch1) +{ + m_R.do_reset(); + + m_R.set_R(R_OFF); +} + +NETLIB_UPDATE(switch1) +{ + if (m_POS.Value() == 0) + { + m_R.set_R(R_OFF); + } + else + { + m_R.set_R(R_ON); + } + + m_R.update_dev(); +} + +NETLIB_UPDATE_PARAM(switch1) +{ + update(); +} + +// ---------------------------------------------------------------------------------------- +// SWITCH2 +// ---------------------------------------------------------------------------------------- + + NETLIB_START(switch2) { register_sub(m_R[0], "R1"); diff --git a/src/emu/netlist/analog/nld_switches.h b/src/emu/netlist/analog/nld_switches.h index 5d8cf535379..0465eea44ce 100644 --- a/src/emu/netlist/analog/nld_switches.h +++ b/src/emu/netlist/analog/nld_switches.h @@ -17,6 +17,9 @@ // Macros // ---------------------------------------------------------------------------------------- +#define SWITCH(_name) \ + NET_REGISTER_DEV(switch1, _name) + #define SWITCH2(_name) \ NET_REGISTER_DEV(switch2, _name) @@ -24,6 +27,12 @@ // Devices ... // ---------------------------------------------------------------------------------------- +NETLIB_DEVICE_WITH_PARAMS(switch1, + NETLIB_NAME(R_base) m_R; + + netlist_param_int_t m_POS; +); + NETLIB_DEVICE_WITH_PARAMS(switch2, NETLIB_NAME(R_base) m_R[2]; @@ -32,5 +41,4 @@ NETLIB_DEVICE_WITH_PARAMS(switch2, - #endif /* NLD_SWITCHES_H_ */ diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c index a40be7be574..72c53b2f8df 100644 --- a/src/emu/netlist/devices/net_lib.c +++ b/src/emu/netlist/devices/net_lib.c @@ -89,6 +89,7 @@ void nl_initialize_factory(netlist_factory_t &factory) ENTRY(mainclock, MAINCLOCK, "FREQ") ENTRY(solver, SOLVER, "FREQ") ENTRY(gnd, GND, "-") + ENTRY(switch1, SWITCH, "-") ENTRY(switch2, SWITCH2, "-") ENTRY(nicRSFF, NETDEV_RSFF, "+S,R") ENTRY(nicDelay, NETDEV_DELAY, "-") diff --git a/src/emu/netlist/devices/nld_74175.c b/src/emu/netlist/devices/nld_74175.c index e7c8bc9379c..b84f4d458ee 100644 --- a/src/emu/netlist/devices/nld_74175.c +++ b/src/emu/netlist/devices/nld_74175.c @@ -5,7 +5,8 @@ #include "nld_74175.h" -static const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) }; +static const netlist_time delay[2] = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) }; +static const netlist_time delay_clear[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) }; NETLIB_UPDATE(74175) { @@ -13,8 +14,8 @@ NETLIB_UPDATE(74175) { for (int i=0; i<4; i++) { - OUTLOGIC(m_Q[i], 0, delay[0]); - OUTLOGIC(m_QQ[i], 1, delay[1]); + OUTLOGIC(m_Q[i], 0, delay_clear[0]); + OUTLOGIC(m_QQ[i], 1, delay_clear[1]); } } else if (!m_last && INPLOGIC(m_CLK)) @@ -23,7 +24,7 @@ NETLIB_UPDATE(74175) { UINT8 d = INPLOGIC(m_D[i]); OUTLOGIC(m_Q[i], d, delay[d]); - OUTLOGIC(m_QQ[i], !d, delay[!d]); + OUTLOGIC(m_QQ[i], d ^ 1, delay[d ^ 1]); } } m_last = INPLOGIC(m_CLK); diff --git a/src/emu/netlist/devices/nld_7432.c b/src/emu/netlist/devices/nld_7432.c index 49bf60171ef..95c6326991c 100644 --- a/src/emu/netlist/devices/nld_7432.c +++ b/src/emu/netlist/devices/nld_7432.c @@ -12,13 +12,13 @@ NETLIB_START(7432_dip) register_sub(m_3, "3"); register_sub(m_4, "4"); - register_subalias("1", m_1.m_Q[0]); - register_subalias("2", m_1.m_i[0]); - register_subalias("3", m_1.m_i[1]); + register_subalias("3", m_1.m_Q[0]); + register_subalias("1", m_1.m_i[0]); + register_subalias("2", m_1.m_i[1]); - register_subalias("4", m_2.m_Q[0]); - register_subalias("5", m_2.m_i[0]); - register_subalias("6", m_2.m_i[1]); + register_subalias("6", m_2.m_Q[0]); + register_subalias("4", m_2.m_i[0]); + register_subalias("5", m_2.m_i[1]); register_subalias("9", m_3.m_i[0]); register_subalias("10", m_3.m_i[1]); diff --git a/src/emu/netlist/devices/nld_7432.h b/src/emu/netlist/devices/nld_7432.h index f66f12e35cc..97992807857 100644 --- a/src/emu/netlist/devices/nld_7432.h +++ b/src/emu/netlist/devices/nld_7432.h @@ -6,12 +6,12 @@ * DM7432: Quad 2-Input OR Gates * * +--------------+ - * Y1 |1 ++ 14| VCC - * A1 |2 13| B4 - * B1 |3 12| A4 - * Y2 |4 7432 11| Y4 - * A2 |5 10| B3 - * B2 |6 9| A3 + * A1 |1 ++ 14| VCC + * B1 |2 13| B4 + * Y1 |3 12| A4 + * A2 |4 7432 11| Y4 + * B2 |5 10| B3 + * Y2 |6 9| A3 * GND |7 8| Y3 * +--------------+ * ___ diff --git a/src/emu/netlist/devices/nld_truthtable.h b/src/emu/netlist/devices/nld_truthtable.h index d1546c56a1c..2ae1cf0f867 100644 --- a/src/emu/netlist/devices/nld_truthtable.h +++ b/src/emu/netlist/devices/nld_truthtable.h @@ -72,7 +72,7 @@ public: ATTR_COLD void help(int cur, nl_util::pstring_list list, UINT64 state, UINT64 ignore, UINT16 val, UINT8 timing_index[m_NO]) { - pstring elem = list[cur]; + pstring elem = list[cur].trim(); int start = 0; int end = 0; int ign = 0; @@ -93,6 +93,8 @@ public: end = 1; ign = 1; } + else + nl_assert_always(false, "unknown input value (not 0, 1, or X)"); for (int i = start; i <= end; i++) { const UINT64 nstate = state | (i << cur); @@ -133,21 +135,24 @@ public: { nl_util::pstring_list io = nl_util::split(ttline,"|"); // checks - nl_assert(io.count() == 3); + nl_assert_always(io.count() == 3, "io.count mismatch"); nl_util::pstring_list inout = nl_util::split(io[0], ","); - nl_assert(inout.count() == m_num_bits); + nl_assert_always(inout.count() == m_num_bits, "number of bits not matching"); nl_util::pstring_list out = nl_util::split(io[1], ","); - nl_assert(out.count() == m_NO); + nl_assert_always(out.count() == m_NO, "output count not matching"); nl_util::pstring_list times = nl_util::split(io[2], ","); - nl_assert(times.count() == m_NO); + nl_assert_always(times.count() == m_NO, "timing count not matching"); UINT16 val = 0; UINT8 tindex[m_NO]; for (int j=0; jm_timing_nt[k] != netlist_time::zero && m_ttp->m_timing_nt[k] != t) k++; diff --git a/src/emu/netlist/nl_base.c b/src/emu/netlist/nl_base.c index b24c7fb3653..ca66ff57025 100644 --- a/src/emu/netlist/nl_base.c +++ b/src/emu/netlist/nl_base.c @@ -182,6 +182,8 @@ ATTR_COLD void netlist_base_t::start() { /* find the main clock and solver ... */ + NL_VERBOSE_OUT(("Searching for mainclock and solver ...\n")); + m_mainclock = get_single_device("mainclock"); m_solver = get_single_device("solver"); m_gnd = get_single_device("gnd"); diff --git a/src/emu/netlist/nl_dice_compat.h b/src/emu/netlist/nl_dice_compat.h index 9ce20d121ef..a27c12817ed 100644 --- a/src/emu/netlist/nl_dice_compat.h +++ b/src/emu/netlist/nl_dice_compat.h @@ -95,7 +95,6 @@ public: #define CHIP_555_Astable(_name, _pdesc) \ CHIP(# _name, NE555) \ - NET_C(_name.6, _name.2) \ RES(_name ## _R1, (_pdesc)->r1) \ RES(_name ## _R2, (_pdesc)->r2) \ CAP(_name ## _C, (_pdesc)->c) \ @@ -103,6 +102,7 @@ public: NET_C(_name.7, _name ## _R2.1) \ NET_C(_name.6, _name ## _R2.2) \ NET_C(_name.6, _name ## _C.1) \ + NET_C(_name.2, _name ## _C.1) \ NET_C(_name ## _R1.2, V5) \ NET_CSTR(# _name "_C.2", "GND") \ NET_C(_name.8, V5) \ diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c index 1c7dec4bb27..5e43ed44e5a 100644 --- a/src/emu/netlist/nl_setup.c +++ b/src/emu/netlist/nl_setup.c @@ -711,9 +711,6 @@ void netlist_setup_t::start_devices() } } - - NL_VERBOSE_OUT(("Searching for mainclock and solver ...\n")); - netlist().start(); } diff --git a/src/mame/drivers/atarittl.c b/src/mame/drivers/atarittl.c index c1c8ab9f31a..ec2c3c6f790 100644 --- a/src/mame/drivers/atarittl.c +++ b/src/mame/drivers/atarittl.c @@ -359,10 +359,6 @@ ROM_END /* // 100% TTL - NO ROMS -ROM_START( breakout ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) -ROM_END - ROM_START( goal4 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END @@ -431,7 +427,6 @@ GAME(1974, tank, 0, atarikee, 0, driver_device, 0, ROT0, "Ata //GAME(1974, quack, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Qwak!/Quack [TTL]", GAME_IS_SKELETON) // 100% TLL -//GAME(1976, breakout, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Breakout [TTL]",GAME_IS_SKELETON) //GAME(1974, coupedem, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Coupe De Monde [TTL]",GAME_IS_SKELETON) //GAME(1975, goal4, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Goal 4/World Cup/Coupe De Monde [TTL]",GAME_IS_SKELETON) //GAME(1973, gotchaat, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Gotcha [TTL]",GAME_IS_SKELETON) //? diff --git a/src/mame/drivers/nl_breakout.c b/src/mame/drivers/nl_breakout.c index bd4968a0134..0444b64f154 100644 --- a/src/mame/drivers/nl_breakout.c +++ b/src/mame/drivers/nl_breakout.c @@ -143,14 +143,26 @@ CIRCUIT_LAYOUT( breakout ) CHIP("S3", DIPSWITCH, &dipswitch3_desc) CHIP("S4", DIPSWITCH, &dipswitch4_desc) #endif + + // DIPSWITCH - Free game + SWITCH(S1_1) + SWITCH(S1_2) + SWITCH(S1_3) + SWITCH(S1_4) + + SWITCH(S2) // Cocktail + SWITCH(S3) // 2 Plays / 25c + SWITCH2(S4) // Three Balls / 5 Balls + SOLVER(Solver, 48000) - PARAM(Solver.ACCURACY, 1e-7) // works and is sufficient + PARAM(Solver.ACCURACY, 1e-8) // less accuracy and diode will not work //CHIP("CLOCK", CLOCK_14_318_MHZ) MAINCLOCK(Y1, 14318000.0) ANALOG_INPUT(V5, 5) -#define VCC "V5", Q -#define GND "GND", Q + ALIAS(VCC, V5) +//#define VCC "V5", Q +#define GNDD "GND", Q //CHIP("Y1", CLOCK_14_318_MHZ) //Y1 @@ -290,9 +302,11 @@ CIRCUIT_LAYOUT( breakout ) CHIP_INPUT_ACTIVE_LOW(COIN1) //CHIP("COIN2", COIN_INPUT) + CHIP_INPUT_ACTIVE_LOW(COIN2) //CHIP("START", START_INPUT) - CHIP_INPUT_ACTIVE_HIGH(START) + CHIP_INPUT_ACTIVE_LOW(START1) + CHIP_INPUT_ACTIVE_HIGH(START2) //CHIP("SERVE", BUTTONS1_INPUT) CHIP_INPUT_ACTIVE_LOW(SERVE) // Active low? @@ -516,22 +530,22 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(P, "F6", 1) CONNECTION(P, "F6", 10) CONNECTION(P, "F6", 9) - CONNECTION(GND, "F6", 14) + CONNECTION(GNDD, "F6", 14) CONNECTION("F7", 13, "J9", 2) CONNECTION(VSYNC, "J9", 1) CONNECTION("A7", 9, "J9", 13) CONNECTION("J9", 12, "F6", 4) CONNECTION("J9", 12, "A7", 11) - CONNECTION(GND, "A7", 12) + CONNECTION(GNDD, "A7", 12) CONNECTION(ATTRACT_n, "A7", 13) CONNECTION("J9", 12, "A8", 11) - CONNECTION(GND, "A8", 12) + CONNECTION(GNDD, "A8", 12) CONNECTION(ATTRACT_n, "A8", 13) CONNECTION(VB_HIT_n, "A7", 5) - CONNECTION(GND, "A7", 4) + CONNECTION(GNDD, "A7", 4) CONNECTION(ATTRACT_n, "A7", 3) CONNECTION(BP_HIT_n, "A8", 5) - CONNECTION(GND, "A8", 4) + CONNECTION(GNDD, "A8", 4) CONNECTION(ATTRACT_n, "A8", 3) CONNECTION("A8", 6, "B9", 13) CONNECTION(P_HIT_SOUND, "B9", 12) @@ -540,6 +554,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("A7", 6, "B9", 4) CONNECTION(VB_HIT_SOUND, "B9", 5) +#if 0 CONNECTION(GND, "S1", 1) CONNECTION(P, "S1", 2) CONNECTION(GND, "S1", 4) @@ -548,25 +563,53 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(P, "S1", 11) CONNECTION(GND, "S1", 9) CONNECTION(P, "S1", 10) +#endif + NET_C(S1_1.1, GND) + NET_C(S1_2.1, GND) + NET_C(S1_3.1, GND) + NET_C(S1_4.1, GND) + + RES(R7, RES_K(2.7)) + RES(R8, RES_K(2.7)) + RES(R9, RES_K(2.7)) + RES(R10, RES_K(2.7)) + + NET_C(R7.1, V5) + NET_C(R8.1, V5) + NET_C(R9.1, V5) + NET_C(R10.1, V5) + + NET_C(S1_1.2, R7.2) + NET_C(S1_2.2, R8.2) + NET_C(S1_3.2, R9.2) + NET_C(S1_4.2, R10.2) //Free Game Selector CONNECTION(I1, "K7", 2) - CONNECTION("S1", 15, "K7", 1) + //CONNECTION("S1", 15, "K7", 1) + CONNECTION("S1_1", 2, "K7", 1) CONNECTION(J1, "K7", 12) - CONNECTION("S1", 14, "K7", 13) + //CONNECTION("S1", 14, "K7", 13) + CONNECTION("S1_2", 2, "K7", 13) CONNECTION(K1, "K7", 5) - CONNECTION("S1", 6, "K7", 4) + //CONNECTION("S1", 6, "K7", 4) + CONNECTION("S1_3", 2, "K7", 4) CONNECTION(L1, "K7", 9) - CONNECTION("S1", 7, "K7", 10) + //CONNECTION("S1", 7, "K7", 10) + CONNECTION("S1_4", 2, "K7", 10) CONNECTION(I2, "L7", 2) - CONNECTION("S1", 15, "L7", 1) + //CONNECTION("S1", 15, "L7", 1) + CONNECTION("S1_1", 2, "L7", 1) CONNECTION(J2, "L7", 12) - CONNECTION("S1", 14, "L7", 13) + //CONNECTION("S1", 14, "L7", 13) + CONNECTION("S1_2", 2, "L7", 13) CONNECTION(K2, "L7", 5) - CONNECTION("S1", 6, "L7", 4) + //CONNECTION("S1", 6, "L7", 4) + CONNECTION("S1_3", 2, "L7", 4) CONNECTION(L2, "L7", 9) - CONNECTION("S1", 7, "L7", 10) + //CONNECTION("S1", 7, "L7", 10) + CONNECTION("S1_4", 2, "L7", 10) CONNECTION("K7", 3, "J7", 13) @@ -599,12 +642,12 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(P, "K9", 8) CONNECTION("J8", 9, "K9", 9) - CONNECTION(GND, "K9", 11) + CONNECTION(GNDD, "K9", 11) CONNECTION(HSYNC_n, "K9", 10) CONNECTION(P, "K9", 1) CONNECTION("J8", 4, "K9", 12) - CONNECTION(GND, "K9", 4) + CONNECTION(GNDD, "K9", 4) CONNECTION(HSYNC_n, "K9", 13) CONNECTION("K9", 6, "L9", 12) @@ -617,25 +660,25 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(V4_d, "N7", 2) CONNECTION("N8", 6, "N7", 1) // - CONNECTION(GND, "M2", 13) + CONNECTION(GNDD, "M2", 13) CONNECTION(V1_d, "M2", 10) CONNECTION(V2_d, "M2", 8) CONNECTION(V4_d, "M2", 3) CONNECTION(V8_d, "M2", 1) - CONNECTION(GND, "M2", 11) + CONNECTION(GNDD, "M2", 11) CONNECTION(P2_CONDITIONAL, "M2", 7) - CONNECTION(GND, "M2", 4) - CONNECTION(GND, "M2", 16) + CONNECTION(GNDD, "M2", 4) + CONNECTION(GNDD, "M2", 16) CONNECTION("M2", 14, "N2", 13) CONNECTION(V16_d, "N2", 10) CONNECTION(V32_d, "N2", 8) CONNECTION(V64_d, "N2", 3) CONNECTION(V128_d, "N2", 1) - CONNECTION(GND, "N2", 11) + CONNECTION(GNDD, "N2", 11) CONNECTION(P2_CONDITIONAL, "N2", 7) - CONNECTION(GND, "N2", 4) - CONNECTION(GND, "N2", 16) + CONNECTION(GNDD, "N2", 4) + CONNECTION(GNDD, "N2", 16) CONNECTION("M2", 6, "M3", 2) CONNECTION(P2_CONDITIONAL, "M3", 1) @@ -697,9 +740,9 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(P, "L1", 1) CONNECTION(P, "L1", 3) - CONNECTION(GND, "L1", 4) + CONNECTION(GNDD, "L1", 4) CONNECTION(P, "L1", 5) - CONNECTION(GND, "L1", 6) + CONNECTION(GNDD, "L1", 6) CONNECTION(VERT_TRIG_n, "L1", 9) CONNECTION(P, "L1", 10) CONNECTION(DICECLOCK, "L1", 2) @@ -725,10 +768,10 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(VSYNC_n, "H1", 9) CONNECTION(P, "M1", 1) - CONNECTION(GND, "M1", 3) - CONNECTION(GND, "M1", 4) + CONNECTION(GNDD, "M1", 3) + CONNECTION(GNDD, "M1", 4) CONNECTION(P, "M1", 5) - CONNECTION(GND, "M1", 6) + CONNECTION(GNDD, "M1", 6) CONNECTION(VERT_TRIG_n, "M1", 9) CONNECTION(DICECLOCK, "M1", 2) CONNECTION("L1", 15, "M1", 7) @@ -778,7 +821,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(C1, "L5", 5) CONNECTION(G1, "L5", 6) CONNECTION(K1, "L5", 7) - CONNECTION(GND, "L5", 9) + CONNECTION(GNDD, "L5", 9) CONNECTION(H32_n, "L5", 10) CONNECTION(V16, "L5", 11) CONNECTION(V64, "L5", 12) @@ -787,11 +830,11 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(D2, "K5", 1) CONNECTION(H02, "K5", 2) CONNECTION(L2, "K5", 3) - CONNECTION(GND, "K5", 4) + CONNECTION(GNDD, "K5", 4) CONNECTION(D1, "K5", 5) CONNECTION(H01, "K5", 6) CONNECTION(L1, "K5", 7) - CONNECTION(GND, "K5", 9) + CONNECTION(GNDD, "K5", 9) CONNECTION(H32_n, "K5", 10) CONNECTION(V16, "K5", 11) CONNECTION(V64, "K5", 12) @@ -806,13 +849,13 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(H32, "J5", 5) CONNECTION("J5", 13, "H5", 1) - CONNECTION(GND, "H5", 2) - CONNECTION(GND, "H5", 3) + CONNECTION(GNDD, "H5", 2) + CONNECTION(GNDD, "H5", 3) CONNECTION("J5", 14, "H5", 4) - CONNECTION(GND, "H5", 5) - CONNECTION(GND, "H5", 6) + CONNECTION(GNDD, "H5", 5) + CONNECTION(GNDD, "H5", 6) CONNECTION("J5", 10, "H5", 7) - CONNECTION(GND, "H5", 9) + CONNECTION(GNDD, "H5", 9) CONNECTION(V4, "K4", 12) CONNECTION(V8, "K4", 13) @@ -828,12 +871,12 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("J5", 12 , "J4", 1) CONNECTION("J5", 11, "J4", 2) - CONNECTION(GND, "J4", 3) - CONNECTION(GND, "J4", 4) + CONNECTION(GNDD, "J4", 3) + CONNECTION(GNDD, "J4", 4) CONNECTION("J5", 15, "J4", 5) CONNECTION("J5", 9, "J4", 6) - CONNECTION(GND, "J4", 7) - CONNECTION(GND, "J4", 9) + CONNECTION(GNDD, "J4", 7) + CONNECTION(GNDD, "J4", 9) CONNECTION("L4", 6, "J4", 10) CONNECTION(H8, "J4", 11) CONNECTION(V4, "J4", 12) @@ -872,10 +915,16 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("M8", 6, "H4", 5) CONNECTION("F2", 8, "H4", 4) +#if 0 CONNECTION(PAD_EN_n, "PAD_EN_BUF", 1) CONNECTION("PAD_EN_BUF", 2, "C9", 4) CONNECTION("PAD_EN_BUF", 2, "C9", 2) +#else + CONNECTION(PAD_EN_n, "C9", 4) + CONNECTION(PAD_EN_n, "C9", 2) +#endif + CONNECTION(BTB_HIT_n, "C5", 3) CONNECTION(P, "F5", 10) CONNECTION(P, "F5", 12) @@ -929,15 +978,23 @@ CIRCUIT_LAYOUT( breakout ) //SCORE CONNECTION(SCI_n, "D3", 4) - CONNECTION(GND, "D3", 2) - CONNECTION(GND, "D3", 3) - CONNECTION(GND, "D3", 1) + CONNECTION(GNDD, "D3", 2) + CONNECTION(GNDD, "D3", 3) + CONNECTION(GNDD, "D3", 1) //PLAYER2_CONDITIONAL CONNECTION(PLAYER_2, "H7", 10) - CONNECTION(GND, "S2", 1) +#if 0 + CONNECTION(GNDD, "S2", 1) CONNECTION(P, "S2", 2) CONNECTION("S2", 3, "H7", 9) +#else + NET_C(S2.2, GND) + NET_C(S2.1, H7.9) + RES(R18, RES_K(1)) + NET_C(R18.2, V5) + NET_C(R18.1, S2.1) +#endif //A-L 1 and 2 CONNECTION(SET_BRICKS_n, "B3", 2) @@ -1008,7 +1065,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(START_GAME, "N9", 14) CONNECTION(H8_n, "N9", 1) CONNECTION(H16_n, "N9", 10) - CONNECTION(GND, "N9", 9) + CONNECTION(GNDD, "N9", 9) CONNECTION("N9", 13, "N7", 13) CONNECTION(SCLOCK, "N7", 12) @@ -1028,7 +1085,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(CX0, "C7", 3) CONNECTION(CX1, "C7", 4) CONNECTION(X2, "C7", 5) - CONNECTION(GND, "C7", 6) + CONNECTION(GNDD, "C7", 6) CONNECTION("D8", 8, "C7", 9) CONNECTION("C7", 15, "C8", 7) CONNECTION("C7", 11, "C8", 10) @@ -1050,7 +1107,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(Y0, "B7", 3) CONNECTION(Y1, "B7", 4) CONNECTION(Y2, "B7", 5) - CONNECTION(GND, "B7", 6) + CONNECTION(GNDD, "B7", 6) CONNECTION("D8", 8, "B7", 9) CONNECTION(DICECLOCK, "B7", 2) CONNECTION("B7", 15, "B8", 7) @@ -1081,12 +1138,14 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(P, "F1", 1) CONNECTION(P, "F1", 7) CONNECTION(P, "F1", 10) - CONNECTION(GND, "F1", 3) + CONNECTION(GNDD, "F1", 3) CONNECTION(P, "F1", 4) - CONNECTION(GND, "F1", 5) - CONNECTION(GND, "F1", 6) + CONNECTION(GNDD, "F1", 5) + CONNECTION(GNDD, "F1", 6) CONNECTION("E1", 6, "F1", 9) - CONNECTION("Y1", 1, "F1", 2) + + //CONNECTION("Y1", 1, "F1", 2) + NET_C(Y1.Q, F1.2) // RH and LH Sides CONNECTION(V128, "N4", 1) @@ -1139,16 +1198,25 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("H8", 9, "J9", 9) CONNECTION(V16_d, "J8", 14) CONNECTION("J8", 13, "J9", 10) + +#if 0 CONNECTION(P, "S3", 1) CONNECTION(V4_d, "S3", 2) CONNECTION("S3", 3, "J9", 11) +#else + CONNECTION(V4_d, "S3", 1) + CONNECTION("S3", 2, "J9", 11) + RES(R15, RES_K(1)) + NET_C(R15.1, V5) + NET_C(R15.2, S3.2) +#endif CONNECTION("J9", 8, "L9", 5) CONNECTION("J9", 6, "L9", 4) //COIN2 circuit - //CONNECTION("COIN2", 1, "F9", 1) - CONNECTION(GND, "F9", 1) //TODO: coin2 not implemented + CONNECTION("COIN2", 1, "F9", 1) + //CONNECTION(GNDD, "F9", 1) //TODO: coin2 not implemented CONNECTION(CSW2, "F9", 3) CONNECTION(CSW2, "H9", 10) @@ -1175,7 +1243,8 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("E9", 8, "H1", 2) //Start2 Input - CONNECTION("START", 2, "E9", 11) + //CONNECTION("START", 2, "E9", 11) + CONNECTION("START2", 1, "E9", 11) CONNECTION("E9", 10, "E8", 12) CONNECTION(P, "E8", 10) CONNECTION(V64I, "E8", 11) @@ -1188,7 +1257,8 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("E7", 13, "E8", 13) //Start1 Input - CONNECTION("START", 1, "E9", 3) + //CONNECTION("START", 1, "E9", 3) + CONNECTION("START1", 1, "E9", 3) CONNECTION("E9", 4, "E8", 2) CONNECTION(P, "E8", 4) CONNECTION(V64_d, "E8", 3) @@ -1419,9 +1489,9 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(START_GAME1_n, "F4", 13) CONNECTION("F4", 6, "F3", 5) - CONNECTION(GND, "F3", 4) + CONNECTION(GNDD, "F3", 4) CONNECTION("F4", 8, "F3", 11) - CONNECTION(GND, "F3", 12) + CONNECTION(GNDD, "F3", 12) CONNECTION(P, "F3", 3) CONNECTION(P, "F3", 13) @@ -1484,9 +1554,10 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(START_GAME1_n, "B4", 1) CONNECTION(BALL_A, "A4", 2) - CONNECTION(BALL_B, "S4", 1) - CONNECTION(BALL_C, "S4", 2) - CONNECTION("S4", 3, "A4", 1) + CONNECTION(BALL_B, "S4", 1) // Three balls + CONNECTION(BALL_C, "S4", 2) // Five balls + //CONNECTION("S4", 3, "A4", 1) + NET_C(S4.Q, A4.1) CONNECTION("A4", 3, "C37", 1) CONNECTION(SERVE_WAIT_n, "A4", 5) @@ -1505,6 +1576,7 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION(PSYNC, "B9", 1) CONNECTION(VSYNC_n, "B9", 2) +#if 0 //CONNECTION("VIDEO", 1, "E2", 11) CONNECTION("VIDEO", 2, PLAYFIELD) CONNECTION("VIDEO", 3, BSYNC) @@ -1514,14 +1586,61 @@ CIRCUIT_LAYOUT( breakout ) CONNECTION("VIDEO", Video::HBLANK_PIN, HSYNC) CONNECTION("VIDEO", Video::VBLANK_PIN, "E3", 10) +#else + RES(R41, RES_K(3.9)) + //RES(R42, RES_K(3.9)) + RES(R42, RES_K(3.9)) + RES(R43, RES_K(3.9)) + RES(R51, RES_K(3.9)) + RES(R52, RES_K(3.9)) + DIODE(CR6, "1N914") + NET_C(CR6.A, R41.1, R42.1, R43.1, R51.1, R52.1) + CONNECTION("R51", 2, PLAYFIELD) + CONNECTION("R43", 2, BSYNC) + CONNECTION("R52", 2, SCORE) + NET_C(R41.2, B9.3) + NET_C(R42.2, V5) + NET_C(E2.11, CR6.K) + + ALIAS(videomix, R41.1) + +#endif + +#if 0 // Audio Summing CONNECTION("AUDIO", 1, "B9", 11) CONNECTION("AUDIO", 2, "B9", 8) CONNECTION("AUDIO", 3, FREE_GAME_TONE) CONNECTION("AUDIO", 4, "B9", 6) +#else + RES(R36, RES_K(47)) + RES(R37, RES_K(47)) + RES(R38, RES_K(47)) + RES(R39, RES_K(47)) + CONNECTION("R36", 2, "B9", 11) + CONNECTION("R38", 2, "B9", 8) + CONNECTION("R39", 2, FREE_GAME_TONE) + CONNECTION("R37", 2, "B9", 6) + NET_C(R36.1, R37.1, R38.1, R39.1) + ALIAS(sound, R36.1) +#endif + + /* Not connected pins */ + + NET_C(ttlhigh, B4.3, B4.4, B4.5, B4.6) + NET_C(ttlhigh, N6.3, N6.4, N6.5, N6.6) + NET_C(ttlhigh, M6.3, M6.4, M6.5, M6.6) + NET_C(ttlhigh, L6.3, L6.4, L6.5, L6.6) + + NET_C(ttlhigh, H6.3, H6.4, H6.5, H6.6) + NET_C(ttlhigh, K6.3, K6.4, K6.5, K6.6) + NET_C(ttlhigh, J6.3, J6.4, J6.5, J6.6) + + NET_C(ttlhigh, E1.9, E1.11) + NET_C(ttlhigh, E2.1, E2.2) #ifdef DEBUG // RAM access diff --git a/src/mame/drivers/pong.c b/src/mame/drivers/pong.c index 76c12c26ccb..124f24411ed 100644 --- a/src/mame/drivers/pong.c +++ b/src/mame/drivers/pong.c @@ -50,16 +50,6 @@ TODO: please see netlist include files #define VBSTART (V_TOTAL) #define VBEND (16) -#if 0 -fixedfreq_interface fixedfreq_mode_pongX2 = { - MASTER_CLOCK * 2, - (H_TOTAL-67) * 2, (H_TOTAL-40) * 2, (H_TOTAL-8) * 2, (H_TOTAL) * 2, - V_TOTAL-22,V_TOTAL-19,V_TOTAL-16,V_TOTAL, - 1, /* non-interlaced */ - 0.31 -}; -#endif - enum input_changed_enum { IC_PADDLE1, @@ -70,30 +60,19 @@ enum input_changed_enum IC_VR2 }; -#if 0 -#include "nl_pongd.inc" - -#undef SRST -#undef VCC -#undef GND - -#include "nl_pong.inc" -#endif - NETLIST_EXTERNAL(pongdoubles); NETLIST_EXTERNAL(pong_fast); +NETLIST_EXTERNAL(breakout); -class pong_state : public driver_device +class ttl_mono_state : public driver_device { public: - pong_state(const machine_config &mconfig, device_type type, const char *tag) + ttl_mono_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_video(*this, "fixfreq"), - m_dac(*this, "dac"), /* just to have a sound device */ - m_sw1a(*this, "maincpu:sw1a"), - m_sw1b(*this, "maincpu:sw1b") + m_dac(*this, "dac") /* just to have a sound device */ { } @@ -102,14 +81,6 @@ public: required_device m_video; required_device m_dac; /* just to have a sound device */ - // sub devices - required_device m_sw1a; - required_device m_sw1b; - - //UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - - DECLARE_INPUT_CHANGED_MEMBER(input_changed); - NETDEV_ANALOG_CALLBACK_MEMBER(sound_cb) { //printf("snd %f\n", newval); @@ -120,10 +91,56 @@ public: protected: // driver_device overrides - virtual void machine_start(); - virtual void machine_reset(); + virtual void machine_start() { }; + virtual void machine_reset() { }; - virtual void video_start(); + virtual void video_start() { }; + +private: + +}; + +class pong_state : public ttl_mono_state +{ +public: + pong_state(const machine_config &mconfig, device_type type, const char *tag) + : ttl_mono_state(mconfig, type, tag), + m_sw1a(*this, "maincpu:sw1a"), + m_sw1b(*this, "maincpu:sw1b") + { + } + + // sub devices + required_device m_sw1a; + required_device m_sw1b; + + DECLARE_INPUT_CHANGED_MEMBER(input_changed); + +protected: + + // driver_device overrides + virtual void machine_start() { }; + virtual void machine_reset() { }; + virtual void video_start() { }; + +private: + +}; + +class breakout_state : public ttl_mono_state +{ +public: + breakout_state(const machine_config &mconfig, device_type type, const char *tag) + : ttl_mono_state(mconfig, type, tag) + { + } + +protected: + + // driver_device overrides + virtual void machine_start() { }; + virtual void machine_reset() { }; + virtual void video_start() { }; private: @@ -135,20 +152,6 @@ static NETLIST_START(pong) NETLIST_END() -void pong_state::machine_start() -{ -} - -void pong_state::machine_reset() -{ -} - - -void pong_state::video_start() -{ -} - - INPUT_CHANGED_MEMBER(pong_state::input_changed) { int numpad = (FPTR) (param); @@ -216,6 +219,34 @@ static INPUT_PORTS_START( pongd ) #endif INPUT_PORTS_END +static INPUT_PORTS_START( breakout ) +#if 0 + PORT_START( "PADDLE0" ) /* fake input port for player 1 paddle */ + PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot0") + + PORT_START( "PADDLE1" ) /* fake input port for player 2 paddle */ + PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) PORT_PLAYER(2) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot1") +#endif + PORT_START("IN0") /* fake as well */ + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw1") + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw2") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw1") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw2") + +#if 0 + PORT_DIPNAME( 0x06, 0x00, "Game Won" ) PORT_DIPLOCATION("SW1A:1,SW1B:1") PORT_CHANGED_MEMBER(DEVICE_SELF, pong_state, input_changed, IC_SWITCH) + PORT_DIPSETTING( 0x00, "11" ) + PORT_DIPSETTING( 0x06, "15" ) + + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna") + + PORT_START("VR1") + PORT_ADJUSTER( 50, "VR1 - 50k, Paddle 1 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr0") + PORT_START("VR2") + PORT_ADJUSTER( 50, "VR2 - 50k, Paddle 2 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr1") +#endif +INPUT_PORTS_END + static MACHINE_CONFIG_START( pong, pong_state ) /* basic machine hardware */ @@ -251,6 +282,46 @@ static MACHINE_CONFIG_START( pong, pong_state ) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( breakout, breakout_state ) + + /* basic machine hardware */ + MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) + MCFG_NETLIST_SETUP(breakout) +#if 0 + MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R") + MCFG_NETLIST_ANALOG_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) ) + MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr1", "ic_a9_R.R") + MCFG_NETLIST_ANALOG_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) ) + MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "ic_b9_POT.DIAL") + MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "ic_a9_POT.DIAL") + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01) +#endif + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1_SW.POS", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw2", "COIN2_SW.POS", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw1", "START1_SW.POS", 0, 0x01) + MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw2", "START2_SW.POS", 0, 0x01) +#if 0 + MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01) +#endif + MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "snd0", "sound", breakout_state, sound_cb, "") + MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_vid, "fixfreq") + + /* video hardware */ + MCFG_FIXFREQ_ADD("fixfreq", "screen") + MCFG_FIXFREQ_MONITOR_CLOCK(MASTER_CLOCK) + MCFG_FIXFREQ_HORZ_PARAMS(H_TOTAL-67,H_TOTAL-40,H_TOTAL-8,H_TOTAL) + MCFG_FIXFREQ_VERT_PARAMS(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL) + MCFG_FIXFREQ_FIELDCOUNT(1) + MCFG_FIXFREQ_SYNC_THRESHOLD(1.0) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("dac", DAC, 48000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + +MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( pongf, pong ) /* basic machine hardware */ @@ -312,6 +383,10 @@ ROM_START( pong ) /* dummy to satisfy game entry*/ ROM_LOAD( "pong.netlist", 0x000000, 0x00457f, CRC(72d5e4fe) SHA1(7bb15828223c34915c5e2869dd7917532a4bb7b4) ) ROM_END +ROM_START( breakout ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) +ROM_END + ROM_START( pongf ) /* dummy to satisfy game entry*/ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END @@ -320,6 +395,7 @@ ROM_START( pongd ) /* dummy to satisfy game entry*/ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END -GAME( 1972, pong, 0, pong, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) external [TTL]", GAME_SUPPORTS_SAVE) -GAME( 1972, pongf, 0, pongf, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) [TTL]", GAME_SUPPORTS_SAVE ) -GAME( 1974, pongd, 0, pongd, pongd, driver_device, 0, ROT0, "Atari", "Pong Doubles [TTL]", GAME_SUPPORTS_SAVE ) +GAME( 1972, pong, 0, pong, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) external [TTL]", GAME_SUPPORTS_SAVE) +GAME( 1972, pongf, 0, pongf, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) [TTL]", GAME_SUPPORTS_SAVE ) +GAME( 1974, pongd, 0, pongd, pongd, driver_device, 0, ROT0, "Atari", "Pong Doubles [TTL]", GAME_SUPPORTS_SAVE ) +GAME( 1976, breakout, 0, breakout, breakout, driver_device, 0, ROT90, "Atari", "Breakout [TTL]", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index d18afcd4529..aa64570558f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12926,8 +12926,8 @@ tank // (c) 1974 Atari // Atari 100% TTL pong // (c) 1972 Atari pongd // (c) 1975 Atari -pongf // (c) 1972 Atari - no subcycles -//breakout +pongf // (c) 1972 Atari +breakout // (c) 1976 Atari //coupedem //goal4 //gotchaat