From dce5fbf03e75292dc5e3512012a56d6791cb4979 Mon Sep 17 00:00:00 2001 From: Couriersud Date: Mon, 5 May 2014 20:02:26 +0000 Subject: [PATCH] Netlist: - Pong Doubles now working Thanks a lot to Adam Bousley for dual licensing DICE netlists. Hooked up player inputs - Minor performance tweaks - Separated game netlists from driver. Dice is making extensive use of macros which may conflict if these are in one source file. - Added some rescap.h macros to netlist New games added or promoted from NOT_WORKING status --------------------------------------------------- Pong Doubles [DICE Team, Couriersud] --- .gitattributes | 3 +- src/emu/netlist/analog/nld_twoterm.h | 19 + src/emu/netlist/devices/net_lib.h | 5 +- src/emu/netlist/devices/nld_74107.c | 10 +- src/emu/netlist/devices/nld_7474.c | 24 +- src/emu/netlist/nl_setup.h | 2 +- src/mame/drivers/nl_pong.c | 570 +++++++++++++++ .../tdice.c => src/mame/drivers/nl_pongd.c | 238 +++--- src/mame/drivers/pong.c | 684 +----------------- src/mame/mame.lst | 1 + src/mame/mame.mak | 4 +- 11 files changed, 745 insertions(+), 815 deletions(-) create mode 100644 src/mame/drivers/nl_pong.c rename nl_examples/tdice.c => src/mame/drivers/nl_pongd.c (98%) diff --git a/.gitattributes b/.gitattributes index cad3ea17ae7..594134e0a64 100644 --- a/.gitattributes +++ b/.gitattributes @@ -372,7 +372,6 @@ nl_examples/msx_mixer_stage.c svneol=native#text/plain nl_examples/ne555_astable.c svneol=native#text/plain nl_examples/opamp.c svneol=native#text/plain nl_examples/sn74ls629_osc.c svneol=native#text/plain -nl_examples/tdice.c svneol=native#text/plain nl_examples/test.c svneol=native#text/plain nl_examples/todo.c svneol=native#text/plain nl_examples/vccs.c svneol=native#text/plain @@ -4932,6 +4931,8 @@ src/mame/drivers/ninjakd2.c svneol=native#text/plain src/mame/drivers/ninjaw.c svneol=native#text/plain src/mame/drivers/nitedrvr.c svneol=native#text/plain src/mame/drivers/niyanpai.c svneol=native#text/plain +src/mame/drivers/nl_pong.c svneol=native#text/plain +src/mame/drivers/nl_pongd.c svneol=native#text/plain src/mame/drivers/nmg5.c svneol=native#text/plain src/mame/drivers/nmk16.c svneol=native#text/plain src/mame/drivers/norautp.c svneol=native#text/plain diff --git a/src/emu/netlist/analog/nld_twoterm.h b/src/emu/netlist/analog/nld_twoterm.h index 1c50d081c76..80b8593065f 100644 --- a/src/emu/netlist/analog/nld_twoterm.h +++ b/src/emu/netlist/analog/nld_twoterm.h @@ -57,6 +57,25 @@ NET_REGISTER_DEV(D, _name) \ NETDEV_PARAMI(_name, model, _model) +// ---------------------------------------------------------------------------------------- +// Generic macros +// ---------------------------------------------------------------------------------------- + + +#ifdef RES_R +#warning "Do not include rescap.h in a netlist environment" +#endif + +#define RES_R(res) ((double)(res)) +#define RES_K(res) ((double)(res) * 1e3) +#define RES_M(res) ((double)(res) * 1e6) +#define CAP_U(cap) ((double)(cap) * 1e-6) +#define CAP_N(cap) ((double)(cap) * 1e-9) +#define CAP_P(cap) ((double)(cap) * 1e-12) +#define IND_U(ind) ((double)(ind) * 1e-6) +#define IND_N(ind) ((double)(ind) * 1e-9) +#define IND_P(ind) ((double)(ind) * 1e-12) + // ---------------------------------------------------------------------------------------- // Implementation // ---------------------------------------------------------------------------------------- diff --git a/src/emu/netlist/devices/net_lib.h b/src/emu/netlist/devices/net_lib.h index e73d9ee849b..acf729788dd 100644 --- a/src/emu/netlist/devices/net_lib.h +++ b/src/emu/netlist/devices/net_lib.h @@ -87,8 +87,7 @@ #include "nld_legacy.h" -NETLIST_EXTERN(diode_models); -NETLIST_EXTERN(bjt_models); - +NETLIST_EXTERNAL(diode_models); +NETLIST_EXTERNAL(bjt_models); #endif diff --git a/src/emu/netlist/devices/nld_74107.c b/src/emu/netlist/devices/nld_74107.c index b679b2125d7..9fe9292cced 100644 --- a/src/emu/netlist/devices/nld_74107.c +++ b/src/emu/netlist/devices/nld_74107.c @@ -47,17 +47,17 @@ NETLIB_RESET(74107A) ATTR_HOT inline void NETLIB_NAME(74107Asub)::newstate(const netlist_sig_t state) { - const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) }; + const netlist_time delay[2] = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(40) }; - OUTLOGIC(m_Q, state, delay[state ^ 1]); - OUTLOGIC(m_QQ, state ^ 1, delay[state]); + OUTLOGIC(m_Q, state, delay[state]); + OUTLOGIC(m_QQ, state ^ 1, delay[state ^ 1]); } NETLIB_UPDATE(74107Asub) { const netlist_sig_t t = m_Q.net().Q(); - newstate((!t & m_Q1) | (t & m_Q2) | m_F); - if (UNEXPECTED(m_Q1 ^ 1)) + newstate(((t ^ 1) & m_Q1) | (t & m_Q2) | m_F); + if (m_Q1 ^ 1) m_clk.inactivate(); } diff --git a/src/emu/netlist/devices/nld_7474.c b/src/emu/netlist/devices/nld_7474.c index 22de202858f..03892d23875 100644 --- a/src/emu/netlist/devices/nld_7474.c +++ b/src/emu/netlist/devices/nld_7474.c @@ -24,13 +24,13 @@ NETLIB_UPDATE(7474sub) NETLIB_UPDATE(7474) { - if (!INPLOGIC(m_PREQ) && !INPLOGIC(m_CLRQ)) - { - sub.newstate(1, 1); - sub.m_CLK.inactivate(); - m_D.inactivate(); - } - if (!INPLOGIC(m_PREQ)) + if (INPLOGIC(m_PREQ) && INPLOGIC(m_CLRQ)) + { + m_D.activate(); + sub.m_nextD = INPLOGIC(m_D); + sub.m_CLK.activate_lh(); + } + else if (!INPLOGIC(m_PREQ)) { sub.newstate(1, 0); sub.m_CLK.inactivate(); @@ -43,11 +43,11 @@ NETLIB_UPDATE(7474) m_D.inactivate(); } else - { - m_D.activate(); - sub.m_nextD = INPLOGIC(m_D); - sub.m_CLK.activate_lh(); - } + { + sub.newstate(1, 1); + sub.m_CLK.inactivate(); + m_D.inactivate(); + } } NETLIB_START(7474) diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h index 0c2546afff2..7367d3b70e9 100644 --- a/src/emu/netlist/nl_setup.h +++ b/src/emu/netlist/nl_setup.h @@ -49,7 +49,7 @@ #define NETLIST_NAME(_name) netlist ## _ ## _name -#define NETLIST_EXTERN(_name) \ +#define NETLIST_EXTERNAL(_name) \ ATTR_COLD void NETLIST_NAME(_name)(netlist_setup_t &setup) #define NETLIST_START(_name) \ diff --git a/src/mame/drivers/nl_pong.c b/src/mame/drivers/nl_pong.c new file mode 100644 index 00000000000..e542ca736e5 --- /dev/null +++ b/src/mame/drivers/nl_pong.c @@ -0,0 +1,570 @@ + +/*************************************************************************** + + Netlist (pong) included from pong.c + +***************************************************************************/ + +#include "netlist/devices/net_lib.h" + +NETLIST_START(pong_fast) + SOLVER(Solver, 48000) + PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient + + ANALOG_INPUT(V5, 5) + + TTL_INPUT(high, 1) + TTL_INPUT(low, 0) + +#if 1 +#if 0 + /* this is the clock circuit in schematics. */ + MAINCLOCK(xclk, 7159000.0*2) + TTL_74107(ic_f6a, xclk, high, high, high) + ALIAS(clk, ic_f6a.Q) +#else + /* abstracting this, performance increases by 60% + * No surprise, the clock is extremely expensive */ + MAINCLOCK(clk, 7159000.0) +#endif +#else + // benchmarking ... + NETDEV_TTL_CONST(clk, 0) + MAINCLOCK(xclk) + PARAM(xclk.FREQ, 7159000.0*2) +#endif + + /* 3V Logic - Just a resistor - the value is not given in schematics */ + + RES(R3V, 50) // Works ... + NET_C(R3V.1, V5) + ALIAS(V3, R3V.2) + + /* Coin, antenna and startup circuit */ + + ANALOG_INPUT(STOPG, 0) + + ALIAS(SRSTQ, c9f.Q) + ALIAS(SRST, c9c.Q) + + /* SRSTQ has a diode to +3V to protect against overvoltage - omitted */ + + TTL_INPUT(antenna, 0) + + ALIAS(runQ, Q1.C) + + TTL_7404_INVERT(e4d, STOPG) + + TTL_7404_INVERT(c9f, c9c.Q) + TTL_7404_INVERT(c9c, c9f.Q) + + SWITCH2(coinsw) + NET_C(c9c.Q, coinsw.1) + NET_C(c9f.Q, coinsw.2) + + NET_C(coinsw.Q, GND) + + /* Antenna circuit */ + /* Has a diode to clamp negative voltages - omitted here */ + + QBJT_SW(Q3, "BC237B") + NET_C(antenna, Q3.B) + NET_C(GND, Q3.E) + RES(RX5, 100) + CAP(CX1, CAP_U(0.1)) + + NET_C(RX5.1, CX1.1) + NET_C(RX5.1, Q3.C) + NET_C(RX5.2, GND) + NET_C(CX1.2, GND) + QBJT_SW(Q1, "BC237B") + NET_C(Q1.B, RX5.1) + NET_C(Q1.E, GND) + + DIODE(D3, "1N914") + NET_C(D3.A, Q1.C) + NET_C(D3.K, SRSTQ) + + DIODE(D2, "1N914") + RES(RX4, 220) + NET_C(D2.K, e4d.Q) + NET_C(D2.A, RX4.1) + NET_C(RX4.2, Q3.C) + + RES(RX1, 100) + RES(RX2, 100) + RES(RX3, 330) + CAP(CX2, CAP_U(0.1)) + + NET_C(RX3.2, D3.A) + NET_C(RX3.1, RX1.2) + NET_C(RX1.1, V3) + + NET_C(RX1.1, CX2.1) + NET_C(RX1.2, CX2.2) + + QBJT_SW(Q2, "BC556B") + NET_C(Q2.E, V3) + NET_C(Q2.B, RX1.2) + NET_C(Q2.C, RX2.2) + + NET_C(RX2.1, D2.A) + + /* hit logic */ + + TTL_7404_INVERT(hitQ, hit) + TTL_7400_NAND(hit, hit1Q, hit2Q) + + TTL_7402_NOR(attractQ, StopG, runQ) + TTL_7404_INVERT(attract, attractQ) + + TTL_7420_NAND(ic_h6a, hvidQ, hvidQ, hvidQ, hvidQ) + ALIAS(hvid, ic_h6a.Q) + + TTL_7400_NAND(ic_e6c, hvid, hblank) + ALIAS(MissQ, ic_e6c.Q) + + TTL_7404_INVERT(ic_d1e, MissQ) + TTL_7400_NAND(ic_e1a, ic_d1e.Q, attractQ) + ALIAS(Missed, ic_e1a.Q) + + TTL_7400_NAND(rstspeed, SRSTQ, MissQ) + TTL_7400_NAND(StopG, StopG1Q, StopG2Q) + ALIAS(L, ic_h3b.Q) + ALIAS(R, ic_h3b.QQ) + + TTL_7400_NAND(hit1Q, pad1, ic_g1b.Q) + TTL_7400_NAND(hit2Q, pad2, ic_g1b.Q) + + TTL_7400_NAND(ic_g3c, 128H, ic_h3a.QQ) + TTL_7427_NOR(ic_g2c, ic_g3c.Q, 256H, vpad1Q) + ALIAS(pad1, ic_g2c.Q) + TTL_7427_NOR(ic_g2a, ic_g3c.Q, 256HQ, vpad2Q) + ALIAS(pad2, ic_g2a.Q) + + // ---------------------------------------------------------------------------------------- + // horizontal counter + // ---------------------------------------------------------------------------------------- + TTL_7493(ic_f8, clk, ic_f8.QA, ic_e7b.QQ, ic_e7b.QQ) // f8, f9, f6b + TTL_7493(ic_f9, ic_f8.QD, ic_f9.QA, ic_e7b.QQ, ic_e7b.QQ) // f8, f9, f6b + TTL_74107(ic_f6b, ic_f9.QD, high, high, ic_e7b.Q) + TTL_7430_NAND(ic_f7, ic_f8.QB, ic_f8.QC, ic_f9.QC, ic_f9.QD, ic_f6b.Q, high, high, high) + TTL_7474(ic_e7b, clk, ic_f7, high, high) + + ALIAS(hreset, ic_e7b.QQ) + ALIAS(hresetQ, ic_e7b.Q) + ALIAS( 4H, ic_f8.QC) + ALIAS( 8H, ic_f8.QD) + ALIAS( 16H, ic_f9.QA) + ALIAS( 32H, ic_f9.QB) + ALIAS( 64H, ic_f9.QC) + ALIAS(128H, ic_f9.QD) + ALIAS(256H, ic_f6b.Q) + ALIAS(256HQ, ic_f6b.QQ) + + // ---------------------------------------------------------------------------------------- + // vertical counter + // ---------------------------------------------------------------------------------------- + TTL_7493(ic_e8, hreset, ic_e8.QA, ic_e7a.QQ, ic_e7a.QQ) // e8, e9, d9b + TTL_7493(ic_e9, ic_e8.QD,ic_e9.QA, ic_e7a.QQ, ic_e7a.QQ) // e8, e9, d9b + TTL_74107(ic_d9b, ic_e9.QD, high, high, ic_e7a.Q) + TTL_7474(ic_e7a, hreset, e7a_data, high, high) + TTL_7410_NAND(e7a_data, ic_e8.QA, ic_e8.QC, ic_d9b.Q) + + ALIAS(vreset, ic_e7a.QQ) + ALIAS( 4V, ic_e8.QC) + ALIAS( 8V, ic_e8.QD) + ALIAS( 16V, ic_e9.QA) + ALIAS( 32V, ic_e9.QB) + ALIAS( 64V, ic_e9.QC) + ALIAS(128V, ic_e9.QD) + ALIAS(256V, ic_d9b.Q) + ALIAS(256VQ, ic_d9b.QQ) + + + // ---------------------------------------------------------------------------------------- + // hblank flip flop + // ---------------------------------------------------------------------------------------- + + TTL_7400_NAND(ic_g5b, 16H, 64H) + + // the time critical one + TTL_7400_NAND(ic_h5c, ic_h5b.Q, hresetQ) + TTL_7400_NAND(ic_h5b, ic_h5c.Q, ic_g5b.Q) + + ALIAS(hblank, ic_h5c.Q) + ALIAS(hblankQ, ic_h5b.Q) + TTL_7400_NAND(hsyncQ, hblank, 32H) + + // ---------------------------------------------------------------------------------------- + // vblank flip flop + // ---------------------------------------------------------------------------------------- + TTL_7402_NOR(ic_f5c, ic_f5d.Q, vreset) + TTL_7402_NOR(ic_f5d, ic_f5c.Q, 16V) + + ALIAS(vblank, ic_f5d.Q) + ALIAS(vblankQ, ic_f5c.Q) + + TTL_7400_NAND(ic_h5a, 8V, 8V) + TTL_7410_NAND(ic_g5a, vblank, 4V, ic_h5a.Q) + ALIAS(vsyncQ, ic_g5a.Q) + + // ---------------------------------------------------------------------------------------- + // move logic + // ---------------------------------------------------------------------------------------- + + TTL_7400_NAND(ic_e1d, hit_sound, ic_e1c.Q) + TTL_7400_NAND(ic_e1c, ic_f1.QC, ic_f1.QD) + TTL_7493(ic_f1, ic_e1d.Q, ic_f1.QA, rstspeed, rstspeed) + + TTL_7402_NOR(ic_g1d, ic_f1.QC, ic_f1.QD) + TTL_7400_NAND(ic_h1a, ic_g1d.Q, ic_g1d.Q) + TTL_7400_NAND(ic_h1d, ic_e1c.Q, ic_h1a.Q) + + TTL_7400_NAND(ic_h1c, ic_h1d.Q, vreset) + TTL_7400_NAND(ic_h1b, ic_h1a.Q, vreset) + TTL_7402_NOR(ic_g1c, 256HQ, vreset) + + TTL_74107(ic_h2a, ic_g1c.Q, ic_h2b.Q, low, ic_h1b.Q) + TTL_74107(ic_h2b, ic_g1c.Q, high, move, ic_h1c.Q) + + TTL_7400_NAND(ic_h4a, ic_h2b.Q, ic_h2a.Q) + ALIAS(move, ic_h4a.Q) + + TTL_7400_NAND(ic_c1d, SC, attract) + TTL_7404_INVERT(ic_d1a, ic_c1d.Q) + TTL_7474(ic_h3b, ic_d1a.Q, ic_h3b.QQ, hit1Q, hit2Q) + + TTL_7400_NAND(ic_h4d, ic_h3b.Q, move) + TTL_7400_NAND(ic_h4b, ic_h3b.QQ, move) + TTL_7400_NAND(ic_h4c, ic_h4d.Q, ic_h4b.Q) + ALIAS(Aa, ic_h4c.Q) + ALIAS(Ba, ic_h4b.Q) + + // ---------------------------------------------------------------------------------------- + // hvid circuit + // ---------------------------------------------------------------------------------------- + + TTL_7400_NAND(hball_resetQ, Serve, attractQ) + + TTL_9316(ic_g7, clk, high, hblankQ, hball_resetQ, ic_g5c.Q, Aa, Ba, low, high) + TTL_9316(ic_h7, clk, ic_g7.RC, high, hball_resetQ, ic_g5c.Q, low, low, low, high) + TTL_74107(ic_g6b, ic_h7.RC, high, high, hball_resetQ) + TTL_7410_NAND(ic_g5c, ic_g6b.Q, ic_h7.RC, ic_g7.RC) + TTL_7420_NAND(ic_h6b, ic_g6b.Q, ic_h7.RC, ic_g7.QC, ic_g7.QD) + ALIAS(hvidQ, ic_h6b.Q) + + // ---------------------------------------------------------------------------------------- + // vvid circuit + // ---------------------------------------------------------------------------------------- + + TTL_9316(ic_b3, hsyncQ, high, vblankQ, high, ic_b2b.Q, a6, b6, c6, d6) + TTL_9316(ic_a3, hsyncQ, ic_b3.RC, high, high, ic_b2b.Q, low, low, low, low) + TTL_7400_NAND(ic_b2b, ic_a3.RC, ic_b3.RC) + TTL_7410_NAND(ic_e2b, ic_a3.RC, ic_b3.QC, ic_b3.QD) + ALIAS(vvidQ, ic_e2b.Q) + TTL_7404_INVERT(vvid, vvidQ) // D2D + ALIAS(vpos256, ic_a3.RC) + ALIAS(vpos32, ic_a3.QB) + ALIAS(vpos16, ic_a3.QA) + + // ---------------------------------------------------------------------------------------- + // vball ctrl circuit + // ---------------------------------------------------------------------------------------- + + TTL_7450_ANDORINVERT(ic_a6a, b1, 256HQ, b2, 256H) + TTL_7450_ANDORINVERT(ic_a6b, c1, 256HQ, c2, 256H) + TTL_7450_ANDORINVERT(ic_b6b, d1, 256HQ, d2, 256H) + + TTL_7474(ic_a5b, hit, ic_a6a, attractQ, high) + TTL_7474(ic_a5a, hit, ic_a6b, attractQ, high) + TTL_7474(ic_b5a, hit, ic_b6b, attractQ, high) + TTL_74107(ic_h2x, vblank, vvid, vvid, hitQ) // two marked at position h2a ==> this h2x + + TTL_7486_XOR(ic_a4c, ic_a5b.Q, ic_h2x.Q) + TTL_7486_XOR(ic_a4b, ic_a5a.Q, ic_h2x.Q) + + TTL_7450_ANDORINVERT(ic_b6a, ic_b5a.Q, ic_h2x.Q, ic_b5a.QQ, ic_h2x.QQ) + + TTL_7404_INVERT(ic_c4a, ic_b6a) + + TTL_7483(ic_b4, ic_a4c, ic_a4b, ic_b6a, low, ic_c4a, high, high, low, low) + ALIAS(a6, ic_b4.S1) + ALIAS(b6, ic_b4.S2) + ALIAS(c6, ic_b4.S3) + ALIAS(d6, ic_b4.S4) + + // ---------------------------------------------------------------------------------------- + // serve monoflop + // ---------------------------------------------------------------------------------------- + + TTL_7404_INVERT(f4_trig, rstspeed) + + RES(ic_f4_serve_R, RES_K(330)) + CAP(ic_f4_serve_C, CAP_U(4.7)) + NE555(ic_f4_serve) + + NET_C(ic_f4_serve.VCC, V5) + NET_C(ic_f4_serve.GND, GND) + NET_C(ic_f4_serve.RESET, V5) + NET_C(ic_f4_serve_R.1, V5) + NET_C(ic_f4_serve_R.2, ic_f4_serve.THRESH) + NET_C(ic_f4_serve_R.2, ic_f4_serve.DISCH) + NET_C(f4_trig, ic_f4_serve.TRIG) + NET_C(ic_f4_serve_R.2, ic_f4_serve_C.1) + NET_C(GND, ic_f4_serve_C.2) + + TTL_7427_NOR(ic_e5a, ic_f4_serve.OUT, StopG, runQ) + TTL_7474(ic_b5b_serve, pad1, ic_e5a, ic_e5a, high) + + ALIAS(Serve, ic_b5b_serve.QQ) + ALIAS(ServeQ, ic_b5b_serve.Q) + + // ---------------------------------------------------------------------------------------- + // score logic + // ---------------------------------------------------------------------------------------- + + TTL_7474(ic_h3a, 4H, 128H, high, attractQ) + + // ---------------------------------------------------------------------------------------- + // sound logic + // ---------------------------------------------------------------------------------------- + TTL_7474(ic_c2a, vpos256, high, hitQ, high) + TTL_74107(ic_f3_topbot, vblank, vvid, vvidQ, ServeQ) + + // ---------------------------------------------------------------------------------------- + // monoflop with NE555 determines duration of score sound + // ---------------------------------------------------------------------------------------- + + RES(ic_g4_R, RES_K(220)) + CAP(ic_g4_C, CAP_U(1)) + NE555(ic_g4_sc) + ALIAS(SC, ic_g4_sc.OUT) + + NET_C(ic_g4_sc.VCC, V5) + NET_C(ic_g4_sc.GND, GND) + NET_C(ic_g4_sc.RESET, V5) + NET_C(ic_g4_R.1, V5) + NET_C(ic_g4_R.2, ic_g4_sc.THRESH) + NET_C(ic_g4_R.2, ic_g4_sc.DISCH) + NET_C(MissQ, ic_g4_sc.TRIG) + NET_C(ic_g4_R.2, ic_g4_C.1) + NET_C(GND, ic_g4_C.2) + + ALIAS(hit_sound_en, ic_c2a.QQ) + TTL_7400_NAND(hit_sound, hit_sound_en, vpos16) + TTL_7400_NAND(score_sound, SC, vpos32) + TTL_7400_NAND(topbothitsound, ic_f3_topbot.Q, vpos32) + + TTL_7410_NAND(ic_c4b, topbothitsound, hit_sound, score_sound) + TTL_7400_NAND(ic_c1b, ic_c4b.Q, attractQ) + ALIAS(sound, ic_c1b.Q) + + + // ---------------------------------------------------------------------------------------- + // paddle1 logic 1 + // ---------------------------------------------------------------------------------------- + + POT(ic_b9_POT, RES_K(1)) // This is a guess!! + PARAM(ic_b9_POT.DIALLOG, 1) // Log Dial ... + RES(ic_b9_RPRE, 470) + + NET_C(ic_b9_POT.1, V5) + NET_C(ic_b9_POT.3, GND) + NET_C(ic_b9_POT.2, ic_b9_RPRE.1) + NET_C(ic_b9_RPRE.2, ic_b9.CONT) + + RES(ic_b9_R, RES_K(81)) // Adjustment pot + CAP(ic_b9_C, CAP_U(.1)) + DIODE(ic_b9_D, "1N914") + NE555(ic_b9) + + NET_C(ic_b9.VCC, V5) + NET_C(ic_b9.GND, GND) + NET_C(ic_b9.RESET, V5) + NET_C(ic_b9_R.1, V5) + NET_C(ic_b9_R.2, ic_b9.THRESH) + NET_C(ic_b9_R.2, ic_b9_D.A) + NET_C(ic_b9_D.K, ic_b9.DISCH) + NET_C(256VQ, ic_b9.TRIG) + NET_C(ic_b9_R.2, ic_b9_C.1) + NET_C(GND, ic_b9_C.2) + + TTL_7404_INVERT(ic_c9b, ic_b9.OUT) + TTL_7400_NAND(ic_b7b, ic_a7b.Q, hsyncQ) + TTL_7493(ic_b8, ic_b7b.Q, ic_b8.QA, ic_b9.OUT, ic_b9.OUT) + TTL_7400_NAND(ic_b7a, ic_c9b.Q, ic_a7b.Q) + TTL_7420_NAND(ic_a7b, ic_b8.QA, ic_b8.QB, ic_b8.QC, ic_b8.QD) + ALIAS(vpad1Q, ic_b7a.Q) + + ALIAS(b1, ic_b8.QB) + ALIAS(c1, ic_b8.QC) + ALIAS(d1, ic_b8.QD) + + // ---------------------------------------------------------------------------------------- + // paddle1 logic 2 + // ---------------------------------------------------------------------------------------- + + POT(ic_a9_POT, RES_K(1)) // This is a guess!! + PARAM(ic_a9_POT.DIALLOG, 1) // Log Dial ... + RES(ic_a9_RPRE, 470) + + NET_C(ic_a9_POT.1, V5) + NET_C(ic_a9_POT.3, GND) + NET_C(ic_a9_POT.2, ic_a9_RPRE.1) + NET_C(ic_a9_RPRE.2, ic_a9.CONT) + + RES(ic_a9_R, RES_K(81)) // Adjustment pot + CAP(ic_a9_C, CAP_U(.1)) + DIODE(ic_a9_D, "1N914") + NE555(ic_a9) + + NET_C(ic_a9.VCC, V5) + NET_C(ic_a9.GND, GND) + NET_C(ic_a9.RESET, V5) + NET_C(ic_a9_R.1, V5) + NET_C(ic_a9_R.2, ic_a9.THRESH) + NET_C(ic_a9_R.2, ic_a9_D.A) + NET_C(ic_a9_D.K, ic_a9.DISCH) + NET_C(256VQ, ic_a9.TRIG) + NET_C(ic_a9_R.2, ic_a9_C.1) + NET_C(GND, ic_a9_C.2) + + TTL_7404_INVERT(ic_c9a, ic_a9.OUT) + TTL_7400_NAND(ic_b7c, ic_a7a.Q, hsyncQ) + TTL_7493(ic_a8, ic_b7c.Q, ic_a8.QA, ic_a9.OUT, ic_a9.OUT) + TTL_7400_NAND(ic_b7d, ic_c9a.Q, ic_a7a.Q) + TTL_7420_NAND(ic_a7a, ic_a8.QA, ic_a8.QB, ic_a8.QC, ic_a8.QD) + ALIAS(vpad2Q, ic_b7d.Q) + + ALIAS(b2, ic_a8.QB) + ALIAS(c2, ic_a8.QC) + ALIAS(d2, ic_a8.QD) + + // ---------------------------------------------------------------------------------------- + // C5-EN Logic + // ---------------------------------------------------------------------------------------- + + TTL_7404_INVERT(ic_e3a, 128H) + TTL_7427_NOR( ic_e3b, 256H, 64H, ic_e3a.Q) + TTL_7410_NAND(ic_e2c, 256H, 64H, ic_e3a.Q) + TTL_7404_INVERT(ic_e3c, ic_e2c.Q) + TTL_7402_NOR(ic_d2c, ic_e3c.Q, ic_e3b.Q) + TTL_7404_INVERT(ic_g1a, 32V) + TTL_7425_NOR(ic_f2a, ic_g1a.Q, 64V, 128V, ic_d2c.Q) + ALIAS(c5_en, ic_f2a.Q) + + // ---------------------------------------------------------------------------------------- + // Score logic ... + // ---------------------------------------------------------------------------------------- + + TTL_7402_NOR(ic_f5b, L, Missed) + TTL_7490(ic_c7, ic_f5b, ic_c7.QA, SRST, SRST, low, low) + TTL_74107(ic_c8a, ic_c7.QD, high, high, SRSTQ) + SWITCH2(sw1a) + PARAM(sw1a.POS, 0) + + NET_C(sw1a.1, V5) + NET_C(sw1a.2, ic_c7.QC) + + TTL_7410_NAND(ic_d8a, ic_c7.QA, sw1a.Q, ic_c8a.Q) // would be nand2 for 11 instead of 15 points, need a switch dev! + + ALIAS(StopG1Q, ic_d8a.Q) + ALIAS(score1_1, ic_c7.QA) + ALIAS(score1_2, ic_c7.QB) + ALIAS(score1_4, ic_c7.QC) + ALIAS(score1_8, ic_c7.QD) + ALIAS(score1_10, ic_c8a.Q) + ALIAS(score1_10Q, ic_c8a.QQ) + + TTL_7402_NOR(ic_f5a, R, Missed) + TTL_7490(ic_d7, ic_f5a, ic_d7.QA, SRST, SRST, low, low) + TTL_74107(ic_c8b, ic_d7.QD, high, high, SRSTQ) + SWITCH2(sw1b) + PARAM(sw1b.POS, 0) + + NET_C(sw1b.1, V5) + NET_C(sw1b.2, ic_d7.QC) + + + TTL_7410_NAND(ic_d8b, ic_d7.QA, sw1b.Q, ic_c8b.Q) // would be nand2 for 11 instead of 15 points, need a switch dev! + + ALIAS(StopG2Q, ic_d8b.Q) + ALIAS(score2_1, ic_d7.QA) + ALIAS(score2_2, ic_d7.QB) + ALIAS(score2_4, ic_d7.QC) + ALIAS(score2_8, ic_d7.QD) + ALIAS(score2_10, ic_c8b.Q) + ALIAS(score2_10Q, ic_c8b.QQ) + + // ---------------------------------------------------------------------------------------- + // Score display + // ---------------------------------------------------------------------------------------- + + TTL_74153(ic_d6a, score1_10Q, score1_4, score2_10Q, score2_4, 32H, 64H, low) + TTL_74153(ic_d6b, score1_10Q, score1_8, score2_10Q, score2_8, 32H, 64H, low) + + TTL_74153(ic_c6a, high, score1_1, high, score2_1, 32H, 64H, low) + TTL_74153(ic_c6b, score1_10Q, score1_2, score2_10Q, score2_2, 32H, 64H, low) + + TTL_7448(ic_c5, ic_c6a.AY, ic_c6b.AY, ic_d6a.AY, ic_d6b.AY, high, c5_en, high) + + TTL_7404_INVERT(ic_e4b, 16H) + TTL_7427_NOR(ic_e5c, ic_e4b.Q, 8H, 4H) + ALIAS(scoreFE, ic_e5c.Q) + + TTL_7400_NAND(ic_c3d, 8H, 4H) + //TTL_7400_NAND(ic_c3d, 4H, 8H) + TTL_7402_NOR(ic_d2b, ic_e4b.Q, ic_c3d.Q) + ALIAS(scoreBC, ic_d2b.Q) + + TTL_7427_NOR(ic_e5b, ic_e4b.Q, 8V, 4V) + ALIAS(scoreA, ic_e5b.Q) + + TTL_7410_NAND(ic_e2a, 16H, 8V, 4V) + TTL_7404_INVERT(ic_e4a, ic_e2a.Q) + ALIAS(scoreGD, ic_e4a.Q) + + TTL_7404_INVERT(ic_e4c, 16V) + + TTL_7410_NAND(ic_d4a, ic_e4c.Q, ic_c5.f, scoreFE) + TTL_7410_NAND(ic_d5c, 16V, ic_c5.e, scoreFE) + TTL_7410_NAND(ic_c4c, ic_e4c.Q, ic_c5.b, scoreBC) + TTL_7410_NAND(ic_d5a, 16V, ic_c5.c, scoreBC) + TTL_7410_NAND(ic_d4c, ic_e4c.Q, ic_c5.a, scoreA) + TTL_7410_NAND(ic_d4b, ic_e4c.Q, ic_c5.g, scoreGD) + TTL_7410_NAND(ic_d5b, 16V, ic_c5.d, scoreGD) + + TTL_7430_NAND(ic_d3, ic_d4a, ic_d5c, ic_c4c, ic_d5a, ic_d4c, ic_d4b, ic_d5b, high) + ALIAS(score, ic_d3.Q) //FIXME + + // net + TTL_74107(ic_f3b, clk, 256H, 256HQ, high) + TTL_7400_NAND(ic_g3b, ic_f3b.QQ, 256H) + TTL_7427_NOR(ic_g2b, ic_g3b.Q, vblank, 4V) + ALIAS(net, ic_g2b.Q) + + // ---------------------------------------------------------------------------------------- + // video + // ---------------------------------------------------------------------------------------- + + TTL_7402_NOR(ic_g1b, hvidQ, vvidQ) + TTL_7425_NOR(ic_f2b, ic_g1b.Q, pad1, pad2, net) + TTL_7404_INVERT(ic_e4e, ic_f2b.Q) + ALIAS(video, ic_e4e.Q) + + TTL_7486_XOR(ic_a4d, hsyncQ, vsyncQ) + TTL_7404_INVERT(ic_e4f, ic_a4d.Q) + + RES(RV1, RES_K(1)) + RES(RV2, RES_K(1.2)) + RES(RV3, RES_K(22)) + NET_C(video, RV1.1) + NET_C(score, RV2.1) + NET_C(ic_e4f.Q, RV3.1) + NET_C(RV1.2, RV2.2) + NET_C(RV2.2, RV3.2) + + ALIAS(videomix, RV3.2) + +NETLIST_END() diff --git a/nl_examples/tdice.c b/src/mame/drivers/nl_pongd.c similarity index 98% rename from nl_examples/tdice.c rename to src/mame/drivers/nl_pongd.c index 16736d1e68e..0fb04a9301e 100644 --- a/nl_examples/tdice.c +++ b/src/mame/drivers/nl_pongd.c @@ -101,7 +101,7 @@ CIRCUIT_LAYOUT( pongdoubles ) ANALOG_INPUT(V5, 5) #define VCC "V5", Q #define GND "GND", Q - + CHIP("F9", 7493) CHIP("F10", 7493) CHIP("F7", 74107) @@ -157,7 +157,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("A7", 7493) CHIP("B8", 7400) CHIP("A8", 7420) - + //CHIP("A10", 555_Mono, &a10_555_desc) CHIP_555_Mono(A10, &a10_555_desc) @@ -175,7 +175,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("A9", 7493) CHIP("H4", 7474) - + CHIP("B3", 7400) CHIP("D2", 7404) @@ -184,7 +184,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("G7", 74107) CHIP("H7", 7420) CHIP("E2", 7400) - + CHIP("B4", 9316) CHIP("A4", 9316) CHIP("B5", 7483) @@ -194,7 +194,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("E7", 7400) //CHIP("F5", 555_Mono, &f5_555_desc) CHIP_555_Mono(F5, &f5_555_desc) - + //CHIP("G5", 555_Mono, &g5_555_desc) CHIP_555_Mono(G5, &g5_555_desc) CHIP("C3", 7474) @@ -203,12 +203,12 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("F2", 7493) CHIP("H2", 7400) CHIP("H3", 74107) - + CHIP("B7", 7450) CHIP("A6", 7474) CHIP("A5", 7486) //CHIP("D10", 74107) - + CHIP("C8", 7490) CHIP("D8", 7490) CHIP("C9", 74107) @@ -227,7 +227,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("J1", 7474) CHIP("F1", 7427) - + CHIP("J10", 7400) CHIP("H10", 7474) CHIP("G10", 7474) @@ -270,10 +270,10 @@ CIRCUIT_LAYOUT( pongdoubles ) CHIP("PAD2", PADDLE2_VERTICAL_INPUT, &pad2_desc) PADDLE_CONNECTION("PAD2", "B10") - + CHIP("PAD3", PADDLE3_VERTICAL_INPUT, &pad3_desc) PADDLE_CONNECTION("PAD3", "B9B") - + CHIP("PAD4", PADDLE4_VERTICAL_INPUT, &pad4_desc) PADDLE_CONNECTION("PAD4", "B9A") @@ -453,7 +453,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("F6", 13, "G6", 1) CONNECTION(V4, "G6", 2) CONNECTION("H6", 3, "G6", 13) - + #define VBLANK "F6", 13 #define VBLANK_n "F6", 10 @@ -463,7 +463,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(H256_n, "F4", 11) CONNECTION(CLK, "F4", 9) CONNECTION(VCC, "F4", 10) - + CONNECTION("F4", 6, "G4", 5) CONNECTION(H256, "G4", 4) @@ -504,7 +504,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(H128, "E4", 1) CONNECTION(H128, "E4", 2) CONNECTION(H128, "E4", 13) - + CONNECTION("E4", 12, "E4", 5) CONNECTION(H64, "E4", 4) CONNECTION(H256, "E4", 3) @@ -512,22 +512,22 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("E4", 12, "E3", 9) CONNECTION(H64, "E3", 10) CONNECTION(H256, "E3", 11) - + CONNECTION("E3", 8, "E4", 9) CONNECTION("E3", 8, "E4", 10) CONNECTION("E3", 8, "E4", 11) - + CONNECTION("E4", 6, "D3", 8) CONNECTION("E4", 8, "D3", 9) - + CONNECTION(V32, "G2", 2) CONNECTION(V32, "G2", 3) - + CONNECTION("G2", 1, "F3", 1) CONNECTION(V64, "F3", 2) CONNECTION(V128, "F3", 4) CONNECTION("D3", 10, "F3", 5) - + CONNECTION("C7", 7, "C6", 7) CONNECTION("C7", 9, "C6", 1) CONNECTION("D7", 7, "C6", 2) @@ -537,31 +537,31 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(VCC, "C6", 5) - // Score display circuit + // Score display circuit CONNECTION(H16, "E5", 3) - + CONNECTION(H4, "C4", 12) CONNECTION(H8, "C4", 13) - + CONNECTION("E5", 4, "E6", 9) CONNECTION(H4, "E6", 10) CONNECTION(H8, "E6", 11) - + CONNECTION("C4", 11, "D3", 5) CONNECTION("E5", 4, "D3", 6) - + CONNECTION(V8, "E6", 3) CONNECTION(V4, "E6", 4) CONNECTION("E5", 4, "E6", 5) - + CONNECTION(V4, "E3", 1) CONNECTION(V8, "E3", 2) CONNECTION(H16, "E3", 13) - + CONNECTION("E5", 1, "E3", 12) - + CONNECTION(V16, "E5", 5) - + CONNECTION("E5", 6, "D5", 1) CONNECTION("C6", 15, "D5", 2) CONNECTION("E6", 8, "D5", 13) @@ -573,23 +573,23 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("D3", 4, "C5", 9) CONNECTION("E5", 6, "C5", 10) CONNECTION("C6", 12, "C5", 11) - + CONNECTION("D3", 4, "D6", 1) CONNECTION("C6", 11, "D6", 2) CONNECTION(V16, "D6", 13) - + CONNECTION("C6", 13, "D5", 9) CONNECTION("E5", 6, "D5", 10) CONNECTION("E6", 6, "D5", 11) - + CONNECTION("C6", 14, "D5", 3) CONNECTION("E5", 2, "D5", 4) CONNECTION("E5", 6, "D5", 5) - + CONNECTION("E5", 2, "D6", 3) CONNECTION(V16, "D6", 4) CONNECTION("C6", 10, "D6", 5) - + CONNECTION("D5", 12, "D4", 12) CONNECTION("D6", 8, "D4", 5) CONNECTION("C5", 8, "D4", 4) @@ -598,11 +598,11 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("D5", 8, "D4", 11) CONNECTION("D5", 6, "D4", 6) CONNECTION("D6", 6, "D4", 3) - + // Coin / Start Logic CONNECTION("COIN", 1, "C10", 5) - + // Capacitor C33 used to drive a ~0.1ms low pulse // onto A3 pin 2 at the falling edge of COIN. CONNECTION("COIN", 1, "C33", 1) @@ -612,7 +612,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("C33", 3, "A3", 2) CONNECTION("A3", 3, "D2", 11) - + CONNECTION(VCC, "B2", 4) CONNECTION("D2", 10, "B2", 3) CONNECTION("C10", 6, "B2", 2) @@ -652,12 +652,12 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("H10", 9, "J10", 4) CONNECTION("H10", 6, "J10", 5) - + CONNECTION("H6", 11, "G10", 10) CONNECTION(VCC, "G10", 12) CONNECTION("B3", 3, "G10", 11) CONNECTION("J10", 6, "G10", 13) // Schematic shows pin 10 - + CONNECTION("J10", 6, "E5", 9) // Schematic says E6? #define ATTRACT_n "D2", 4 @@ -667,28 +667,28 @@ CIRCUIT_LAYOUT( pongdoubles ) #define SRST_n "J10", 6 - // Game Control Logic + // Game Control Logic CONNECTION("H7", 6, "E7", 9) CONNECTION("H6", 8, "E7", 10) - + CONNECTION("E7", 8, "D2", 13) - + CONNECTION("D2", 12, "E2", 1) CONNECTION(ATTRACT_n, "E2", 2) - + CONNECTION(SRST_n, "E7", 4) CONNECTION("E7", 8, "E7", 5) - + CONNECTION("E7", 6, "E7", 1) CONNECTION("E7", 6, "E7", 2) - + CONNECTION("E7", 3, "F5", 2) CONNECTION(VCC, "F5", 4) - + CONNECTION(ATTRACT, "E6", 1) CONNECTION("B3", 3, "E6", 2) CONNECTION("F5", 3, "E6", 13) - + CONNECTION("E6", 12, "B6", 12) CONNECTION("E6", 12, "B6", 13) CONNECTION(VCC, "B6", 10) @@ -701,7 +701,7 @@ CIRCUIT_LAYOUT( pongdoubles ) // Horizontal Ball Counter CONNECTION(ATTRACT_n, "E2", 4) CONNECTION("B6", 8, "E2", 5) - + CONNECTION("H5", 8, "G8", 3) CONNECTION("H5", 6, "G8", 4) CONNECTION(GND, "G8", 5) @@ -711,7 +711,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(VCC, "G8", 7) CONNECTION("H6", 6, "G8", 10) CONNECTION("G6", 8, "G8", 9) - + CONNECTION(GND, "H8", 3) CONNECTION(GND, "H8", 4) CONNECTION(GND, "H8", 5) @@ -721,19 +721,19 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("G8", 15, "H8", 7) CONNECTION(VCC, "H8", 10) CONNECTION("G6", 8, "H8", 9) - + CONNECTION(VCC, "G7", 8) CONNECTION(VCC, "G7", 11) CONNECTION("H8", 15, "G7", 9) CONNECTION("E2", 6, "G7", 10) - + CONNECTION("G8", 12, "H7", 9) CONNECTION("G8", 11, "H7", 10) CONNECTION("H8", 15, "H7", 12) CONNECTION("G7", 5, "H7", 13) #define HVID_n "H7", 8 - + CONNECTION("H8", 15, "G6", 9) CONNECTION("G8", 15, "G6", 10) CONNECTION("G7", 5, "G6", 11) @@ -742,7 +742,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(HVID_n, "H7", 2) CONNECTION(HVID_n, "H7", 4) CONNECTION(HVID_n, "H7", 5) - + #define HVID "H7", 6 @@ -756,7 +756,7 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(VCC, "B4", 7) CONNECTION("F6", 10, "B4", 10) CONNECTION("B3", 6, "B4", 9) - + CONNECTION(GND, "A4", 3) CONNECTION(GND, "A4", 4) CONNECTION(GND, "A4", 5) @@ -766,14 +766,14 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("B4", 15, "A4", 7) CONNECTION(VCC, "A4", 10) CONNECTION("B3", 6, "A4", 9) - + CONNECTION("B4", 15, "B3", 5) CONNECTION("A4", 15, "B3", 4) - + CONNECTION("B4", 12, "E3", 3) CONNECTION("B4", 11, "E3", 4) CONNECTION("A4", 15, "E3", 5) - + CONNECTION("E3", 6, "D3", 11) CONNECTION("E3", 6, "D3", 12) @@ -784,19 +784,19 @@ CIRCUIT_LAYOUT( pongdoubles ) // Hit Logic CONNECTION(HVID_n, "G2", 5) CONNECTION(VVID_n, "G2", 6) - + CONNECTION("G1", 10, "G4", 1) CONNECTION("G2", 4, "G4", 2) CONNECTION("G1", 12, "G4", 13) CONNECTION("G2", 4, "G4", 12) - + CONNECTION("G4", 3, "B3", 9) CONNECTION("G4", 11, "B3", 10) - + CONNECTION("B3", 8, "B3", 12) CONNECTION("B3", 8, "B3", 13) - + #define HIT "B3", 8 #define HIT_n "B3", 11 @@ -804,33 +804,33 @@ CIRCUIT_LAYOUT( pongdoubles ) // Horizontal Ball Control CONNECTION("E2", 8, "E2", 12) CONNECTION("C3", 6, "E2", 13) - + CONNECTION("E7", 6, "F2", 2) CONNECTION("E7", 6, "F2", 3) CONNECTION("E2", 11, "F2", 14) CONNECTION("F2", 12, "F2", 1) - + CONNECTION("F2", 8, "G2", 11) CONNECTION("F2", 11, "G2", 12) - + CONNECTION("F2", 8, "E2", 9) CONNECTION("F2", 11, "E2", 10) - + CONNECTION("G2", 13, "H2", 1) CONNECTION("G2", 13, "H2", 2) - + CONNECTION("H2", 3, "H2", 12) CONNECTION("E2", 8, "H2", 13) - + CONNECTION("H2", 11, "H2", 9) CONNECTION("E8", 6, "H2", 10) - + CONNECTION("H2", 3, "H2", 4) CONNECTION("E8", 6, "H2", 5) CONNECTION(H256_n, "G2", 8) CONNECTION("E8", 6, "G2", 9) - + CONNECTION(VCC, "H3", 8) CONNECTION("G2", 10, "H3", 9) CONNECTION("H5", 3, "H3", 11) @@ -840,13 +840,13 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("G2", 10, "H3", 12) CONNECTION(GND, "H3", 4) CONNECTION("H2", 6, "H3", 13) - + CONNECTION("H3", 5, "H5", 1) CONNECTION("H3", 3, "H5", 2) CONNECTION("G5", 3, "C2", 12) CONNECTION(ATTRACT, "C2", 13) - + CONNECTION("C2", 11, "D2", 1) CONNECTION("H4", 8, "H4", 12) @@ -856,10 +856,10 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("H5", 3, "H5", 12) CONNECTION("H4", 9, "H5", 13) - + CONNECTION("H5", 3, "H5", 4) CONNECTION("H4", 8, "H5", 5) - + CONNECTION("H5", 11, "H5", 10) CONNECTION("H5", 6, "H5", 9) @@ -893,44 +893,44 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION(H256_n, "B7", 2) CONNECTION("A9", 11, "B7", 4) CONNECTION(H256, "B7", 5) - + CONNECTION(ATTRACT, "D2", 5) - + CONNECTION("B1", 7, "A6", 12) CONNECTION(HIT, "A6", 11) CONNECTION("D2", 6, "A6", 13) CONNECTION(VCC, "A6", 10) - + CONNECTION("A1", 7, "A6", 2) CONNECTION(HIT, "A6", 3) CONNECTION("D2", 6, "A6", 1) CONNECTION(VCC, "A6", 4) - + CONNECTION("A1", 9, "B6", 2) CONNECTION(HIT, "B6", 3) CONNECTION("D2", 6, "B6", 1) CONNECTION(VCC, "B6", 4) - + CONNECTION(VVID, "D10", 1) CONNECTION("F6", 13, "D10", 12) CONNECTION(VVID, "D10", 4) CONNECTION("B3", 11, "D10", 13) - + CONNECTION("A6", 8, "A5", 9) CONNECTION("D10", 3, "A5", 10) CONNECTION("D10", 3, "A5", 4) CONNECTION("A6", 6, "A5", 5) - + CONNECTION("D10", 3, "B7", 1) CONNECTION("B6", 6, "B7", 13) CONNECTION("B6", 5, "B7", 10) // Pins 5&6 swapped compared to Pong CONNECTION("D10", 2, "B7", 9) - + CONNECTION("B7", 8, "C5", 1) CONNECTION("B7", 8, "C5", 2) CONNECTION("B7", 8, "C5", 13) - + CONNECTION("A5", 8, "B5", 10) CONNECTION("A5", 6, "B5", 8) CONNECTION("B7", 8, "B5", 3) @@ -946,94 +946,94 @@ CIRCUIT_LAYOUT( pongdoubles ) // Paddle 1 Vertical CONNECTION(V256_n, "B10", 2) CONNECTION(VCC, "B10", 4) - + CONNECTION("B10", 3, "C10", 3) - + CONNECTION(HSYNC_n, "B8", 4) CONNECTION("A8", 8, "B8", 5) - + CONNECTION("B10", 3, "A7", 2) CONNECTION("B10", 3, "A7", 3) CONNECTION("B8", 6, "A7", 14) CONNECTION("A7", 12, "A7", 1) - + CONNECTION("A7", 12, "A8", 10) CONNECTION("A7", 9, "A8", 9) CONNECTION("A7", 8, "A8", 12) CONNECTION("A7", 11, "A8", 13) - + CONNECTION("C10", 4, "B8", 1) CONNECTION("A8", 8, "B8", 2) // Paddle 1N Vertical CONNECTION(V256_n, "B9A", 2) CONNECTION(VCC, "B9A", 4) - + CONNECTION("B9A", 3, "G1", 1) - + CONNECTION(HSYNC_n, "E1", 1) CONNECTION("A2", 8, "E1", 2) - + CONNECTION("B9A", 3, "D1", 2) CONNECTION("B9A", 3, "D1", 3) CONNECTION("E1", 3, "D1", 14) CONNECTION("D1", 12, "D1", 1) - + CONNECTION("D1", 12, "A2", 10) CONNECTION("D1", 9, "A2", 9) CONNECTION("D1", 8, "A2", 12) CONNECTION("D1", 11, "A2", 13) - + CONNECTION("G1", 2, "E1", 12) CONNECTION("A2", 8, "E1", 13) - - + + // Paddle 2 Vertical CONNECTION(V256_n, "A10", 2) CONNECTION(VCC, "A10", 4) - + CONNECTION("A10", 3, "C10", 1) - + CONNECTION("A8", 6, "B8", 9) CONNECTION(HSYNC_n, "B8", 10) - + CONNECTION("A10", 3, "A9", 2) CONNECTION("A10", 3, "A9", 3) CONNECTION("B8", 8, "A9", 14) CONNECTION("A9", 12, "A9", 1) - + CONNECTION("A9", 12, "A8", 2) CONNECTION("A9", 9, "A8", 1) CONNECTION("A9", 8, "A8", 4) CONNECTION("A9", 11, "A8", 5) - + CONNECTION("C10", 2, "B8", 13) CONNECTION("A8", 6, "B8", 12) // Paddle 2N Vertical CONNECTION(V256_n, "B9B", 2) CONNECTION(VCC, "B9B", 4) - + CONNECTION("B9B", 3, "G1", 3) - + CONNECTION(HSYNC_n, "E1", 4) CONNECTION("A2", 6, "E1", 5) - + CONNECTION("B9B", 3, "C1", 2) CONNECTION("B9B", 3, "C1", 3) CONNECTION("E1", 6, "C1", 14) CONNECTION("C1", 12, "C1", 1) - + CONNECTION("C1", 12, "A2", 5) CONNECTION("C1", 9, "A2", 4) CONNECTION("C1", 8, "A2", 2) CONNECTION("C1", 11, "A2", 1) - + CONNECTION("G1", 4, "E1", 9) CONNECTION("A2", 6, "E1", 10) - - + + // Paddle N Horizontal CONNECTION(H64, "G1", 5) @@ -1068,14 +1068,14 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("D2", 4, "H4", 4) CONNECTION(H4, "H4", 3) CONNECTION(H128, "H4", 2) - + CONNECTION(H128, "G4", 10) CONNECTION("H4", 6, "G4", 9) - + CONNECTION("G4", 8, "G3", 9) CONNECTION(H256, "G3", 10) CONNECTION("B8", 3, "G3", 11) - + CONNECTION("B8", 11, "G3", 1) CONNECTION(H256_n, "G3", 2) CONNECTION("G4", 8, "G3", 13) @@ -1093,30 +1093,30 @@ CIRCUIT_LAYOUT( pongdoubles ) // Sound CONNECTION("E7", 8, "G5", 2) CONNECTION(VCC, "G5", 4) - + CONNECTION("G5", 3, "C4", 10) CONNECTION(V32, "C4", 9) - + CONNECTION(VCC, "C3", 2) CONNECTION(VCC, "C3", 4) CONNECTION(HIT_n, "C3", 1) CONNECTION("A4", 15, "C3", 3) - + CONNECTION("C3", 6, "C4", 1) CONNECTION("A4", 14, "C4", 2) - + CONNECTION(VVID, "F4", 1) CONNECTION("F6", 13, "F4", 12) CONNECTION(VVID_n, "F4", 4) CONNECTION("B6", 9, "F4", 13) - + CONNECTION("F4", 3, "C4", 5) CONNECTION("A4", 13, "C4", 4) - + CONNECTION("C4", 6, "C5", 3) CONNECTION("C4", 3, "C5", 4) CONNECTION("C4", 8, "C5", 5) - + @@ -1126,26 +1126,26 @@ CIRCUIT_LAYOUT( pongdoubles ) CONNECTION("H4", 8, "F6", 2) CONNECTION("E2", 3, "F6", 3) - + CONNECTION("F6", 4, "C8", 14) CONNECTION("C8", 12, "C8", 1) CONNECTION(SRST, "C8", 2) CONNECTION(SRST, "C8", 3) CONNECTION(GND, "C8", 6) CONNECTION(GND, "C8", 7) - + CONNECTION("F6", 1, "D8", 14) CONNECTION("D8", 12, "D8", 1) CONNECTION(SRST, "D8", 2) CONNECTION(SRST, "D8", 3) CONNECTION(GND, "D8", 6) CONNECTION(GND, "D8", 7) - + CONNECTION("C8", 11, "C9", 12) CONNECTION(VCC, "C9", 1) CONNECTION(VCC, "C9", 4) CONNECTION(SRST_n, "C9", 13) - + CONNECTION("D8", 11, "C9", 9) CONNECTION(VCC, "C9", 8) CONNECTION(VCC, "C9", 11) @@ -1168,7 +1168,7 @@ CIRCUIT_LAYOUT( pongdoubles ) //CONNECTION("DIPSW1", 6, "D9", 4) CONNECTION("DIPSW2", Q, "D9", 4) CONNECTION("C9", 5, "D9", 5) - + CONNECTION("D9", 12, "B3", 1) CONNECTION("D9", 6, "B3", 2) diff --git a/src/mame/drivers/pong.c b/src/mame/drivers/pong.c index 520b3aefee2..ec94b3fda5a 100644 --- a/src/mame/drivers/pong.c +++ b/src/mame/drivers/pong.c @@ -6,23 +6,18 @@ driver by Couriersud Notes: -TODO: +TODO: please see netlist include files ***************************************************************************/ - #include "emu.h" -#include "machine/rescap.h" #include "machine/netlist.h" #include "netlist/devices/net_lib.h" #include "sound/dac.h" #include "video/fixfreq.h" #include "astring.h" -//#define TEST_SOUND -#define PONGD (0) - /* * H count width to 512 * Reset at 1C6 = 454 @@ -56,8 +51,6 @@ TODO: #define VBSTART (V_TOTAL) #define VBEND (16) -#define HRES_MULT (1) - fixedfreq_interface fixedfreq_mode_pongd = { MASTER_CLOCK, H_TOTAL-67,H_TOTAL-52,H_TOTAL-8,H_TOTAL, @@ -92,576 +85,18 @@ enum input_changed_enum IC_VR2 }; -#if PONGD -#include "../../nl_examples/tdice.c" +#if 0 +#include "nl_pongd.inc" #undef SRST #undef VCC #undef GND + +#include "nl_pong.inc" #endif - -static NETLIST_START(pong_schematics) - SOLVER(Solver, 48000) - PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient - - ANALOG_INPUT(V5, 5) - - TTL_INPUT(high, 1) - TTL_INPUT(low, 0) - -#if 1 -#if 0 - /* this is the clock circuit in schematics. */ - MAINCLOCK(xclk, 7159000.0*2) - TTL_74107(ic_f6a, xclk, high, high, high) - ALIAS(clk, ic_f6a.Q) -#else - /* abstracting this, performance increases by 60% - * No surprise, the clock is extremely expensive */ - MAINCLOCK(clk, 7159000.0) -#endif -#else - // benchmarking ... - NETDEV_TTL_CONST(clk, 0) - MAINCLOCK(xclk) - PARAM(xclk.FREQ, 7159000.0*2) -#endif - - /* 3V Logic - Just a resistor - the value is not given in schematics */ - - RES(R3V, 50) // Works ... - NET_C(R3V.1, V5) - ALIAS(V3, R3V.2) - - /* Coin, antenna and startup circuit */ - - ANALOG_INPUT(STOPG, 0) - - ALIAS(SRSTQ, c9f.Q) - ALIAS(SRST, c9c.Q) - - /* SRSTQ has a diode to +3V to protect against overvoltage - omitted */ - - TTL_INPUT(antenna, 0) - - ALIAS(runQ, Q1.C) - - TTL_7404_INVERT(e4d, STOPG) - - TTL_7404_INVERT(c9f, c9c.Q) - TTL_7404_INVERT(c9c, c9f.Q) - - SWITCH2(coinsw) - NET_C(c9c.Q, coinsw.1) - NET_C(c9f.Q, coinsw.2) - - NET_C(coinsw.Q, GND) - - /* Antenna circuit */ - /* Has a diode to clamp negative voltages - omitted here */ - - QBJT_SW(Q3, "BC237B") - NET_C(antenna, Q3.B) - NET_C(GND, Q3.E) - RES(RX5, 100) - CAP(CX1, CAP_U(0.1)) - - NET_C(RX5.1, CX1.1) - NET_C(RX5.1, Q3.C) - NET_C(RX5.2, GND) - NET_C(CX1.2, GND) - QBJT_SW(Q1, "BC237B") - NET_C(Q1.B, RX5.1) - NET_C(Q1.E, GND) - - DIODE(D3, "1N914") - NET_C(D3.A, Q1.C) - NET_C(D3.K, SRSTQ) - - DIODE(D2, "1N914") - RES(RX4, 220) - NET_C(D2.K, e4d.Q) - NET_C(D2.A, RX4.1) - NET_C(RX4.2, Q3.C) - - RES(RX1, 100) - RES(RX2, 100) - RES(RX3, 330) - CAP(CX2, CAP_U(0.1)) - - NET_C(RX3.2, D3.A) - NET_C(RX3.1, RX1.2) - NET_C(RX1.1, V3) - - NET_C(RX1.1, CX2.1) - NET_C(RX1.2, CX2.2) - - QBJT_SW(Q2, "BC556B") - NET_C(Q2.E, V3) - NET_C(Q2.B, RX1.2) - NET_C(Q2.C, RX2.2) - - NET_C(RX2.1, D2.A) - - /* hit logic */ - - TTL_7404_INVERT(hitQ, hit) - TTL_7400_NAND(hit, hit1Q, hit2Q) - - TTL_7402_NOR(attractQ, StopG, runQ) - TTL_7404_INVERT(attract, attractQ) - - TTL_7420_NAND(ic_h6a, hvidQ, hvidQ, hvidQ, hvidQ) - ALIAS(hvid, ic_h6a.Q) - - TTL_7400_NAND(ic_e6c, hvid, hblank) - ALIAS(MissQ, ic_e6c.Q) - - TTL_7404_INVERT(ic_d1e, MissQ) - TTL_7400_NAND(ic_e1a, ic_d1e.Q, attractQ) - ALIAS(Missed, ic_e1a.Q) - - TTL_7400_NAND(rstspeed, SRSTQ, MissQ) - TTL_7400_NAND(StopG, StopG1Q, StopG2Q) - ALIAS(L, ic_h3b.Q) - ALIAS(R, ic_h3b.QQ) - - TTL_7400_NAND(hit1Q, pad1, ic_g1b.Q) - TTL_7400_NAND(hit2Q, pad2, ic_g1b.Q) - - TTL_7400_NAND(ic_g3c, 128H, ic_h3a.QQ) - TTL_7427_NOR(ic_g2c, ic_g3c.Q, 256H, vpad1Q) - ALIAS(pad1, ic_g2c.Q) - TTL_7427_NOR(ic_g2a, ic_g3c.Q, 256HQ, vpad2Q) - ALIAS(pad2, ic_g2a.Q) - - // ---------------------------------------------------------------------------------------- - // horizontal counter - // ---------------------------------------------------------------------------------------- - TTL_7493(ic_f8, clk, ic_f8.QA, ic_e7b.QQ, ic_e7b.QQ) // f8, f9, f6b - TTL_7493(ic_f9, ic_f8.QD, ic_f9.QA, ic_e7b.QQ, ic_e7b.QQ) // f8, f9, f6b - TTL_74107(ic_f6b, ic_f9.QD, high, high, ic_e7b.Q) - TTL_7430_NAND(ic_f7, ic_f8.QB, ic_f8.QC, ic_f9.QC, ic_f9.QD, ic_f6b.Q, high, high, high) - TTL_7474(ic_e7b, clk, ic_f7, high, high) - - ALIAS(hreset, ic_e7b.QQ) - ALIAS(hresetQ, ic_e7b.Q) - ALIAS( 4H, ic_f8.QC) - ALIAS( 8H, ic_f8.QD) - ALIAS( 16H, ic_f9.QA) - ALIAS( 32H, ic_f9.QB) - ALIAS( 64H, ic_f9.QC) - ALIAS(128H, ic_f9.QD) - ALIAS(256H, ic_f6b.Q) - ALIAS(256HQ, ic_f6b.QQ) - - // ---------------------------------------------------------------------------------------- - // vertical counter - // ---------------------------------------------------------------------------------------- - TTL_7493(ic_e8, hreset, ic_e8.QA, ic_e7a.QQ, ic_e7a.QQ) // e8, e9, d9b - TTL_7493(ic_e9, ic_e8.QD,ic_e9.QA, ic_e7a.QQ, ic_e7a.QQ) // e8, e9, d9b - TTL_74107(ic_d9b, ic_e9.QD, high, high, ic_e7a.Q) - TTL_7474(ic_e7a, hreset, e7a_data, high, high) - TTL_7410_NAND(e7a_data, ic_e8.QA, ic_e8.QC, ic_d9b.Q) - - ALIAS(vreset, ic_e7a.QQ) - ALIAS( 4V, ic_e8.QC) - ALIAS( 8V, ic_e8.QD) - ALIAS( 16V, ic_e9.QA) - ALIAS( 32V, ic_e9.QB) - ALIAS( 64V, ic_e9.QC) - ALIAS(128V, ic_e9.QD) - ALIAS(256V, ic_d9b.Q) - ALIAS(256VQ, ic_d9b.QQ) - - - // ---------------------------------------------------------------------------------------- - // hblank flip flop - // ---------------------------------------------------------------------------------------- - - TTL_7400_NAND(ic_g5b, 16H, 64H) - - // the time critical one - TTL_7400_NAND(ic_h5c, ic_h5b.Q, hresetQ) - TTL_7400_NAND(ic_h5b, ic_h5c.Q, ic_g5b.Q) - - ALIAS(hblank, ic_h5c.Q) - ALIAS(hblankQ, ic_h5b.Q) - TTL_7400_NAND(hsyncQ, hblank, 32H) - - // ---------------------------------------------------------------------------------------- - // vblank flip flop - // ---------------------------------------------------------------------------------------- - TTL_7402_NOR(ic_f5c, ic_f5d.Q, vreset) - TTL_7402_NOR(ic_f5d, ic_f5c.Q, 16V) - - ALIAS(vblank, ic_f5d.Q) - ALIAS(vblankQ, ic_f5c.Q) - - TTL_7400_NAND(ic_h5a, 8V, 8V) - TTL_7410_NAND(ic_g5a, vblank, 4V, ic_h5a.Q) - ALIAS(vsyncQ, ic_g5a.Q) - - // ---------------------------------------------------------------------------------------- - // move logic - // ---------------------------------------------------------------------------------------- - - TTL_7400_NAND(ic_e1d, hit_sound, ic_e1c.Q) - TTL_7400_NAND(ic_e1c, ic_f1.QC, ic_f1.QD) - TTL_7493(ic_f1, ic_e1d.Q, ic_f1.QA, rstspeed, rstspeed) - - TTL_7402_NOR(ic_g1d, ic_f1.QC, ic_f1.QD) - TTL_7400_NAND(ic_h1a, ic_g1d.Q, ic_g1d.Q) - TTL_7400_NAND(ic_h1d, ic_e1c.Q, ic_h1a.Q) - - TTL_7400_NAND(ic_h1c, ic_h1d.Q, vreset) - TTL_7400_NAND(ic_h1b, ic_h1a.Q, vreset) - TTL_7402_NOR(ic_g1c, 256HQ, vreset) - - TTL_74107(ic_h2a, ic_g1c.Q, ic_h2b.Q, low, ic_h1b.Q) - TTL_74107(ic_h2b, ic_g1c.Q, high, move, ic_h1c.Q) - - TTL_7400_NAND(ic_h4a, ic_h2b.Q, ic_h2a.Q) - ALIAS(move, ic_h4a.Q) - - TTL_7400_NAND(ic_c1d, SC, attract) - TTL_7404_INVERT(ic_d1a, ic_c1d.Q) - TTL_7474(ic_h3b, ic_d1a.Q, ic_h3b.QQ, hit1Q, hit2Q) - - TTL_7400_NAND(ic_h4d, ic_h3b.Q, move) - TTL_7400_NAND(ic_h4b, ic_h3b.QQ, move) - TTL_7400_NAND(ic_h4c, ic_h4d.Q, ic_h4b.Q) - ALIAS(Aa, ic_h4c.Q) - ALIAS(Ba, ic_h4b.Q) - - // ---------------------------------------------------------------------------------------- - // hvid circuit - // ---------------------------------------------------------------------------------------- - - TTL_7400_NAND(hball_resetQ, Serve, attractQ) - - TTL_9316(ic_g7, clk, high, hblankQ, hball_resetQ, ic_g5c.Q, Aa, Ba, low, high) - TTL_9316(ic_h7, clk, ic_g7.RC, high, hball_resetQ, ic_g5c.Q, low, low, low, high) - TTL_74107(ic_g6b, ic_h7.RC, high, high, hball_resetQ) - TTL_7410_NAND(ic_g5c, ic_g6b.Q, ic_h7.RC, ic_g7.RC) - TTL_7420_NAND(ic_h6b, ic_g6b.Q, ic_h7.RC, ic_g7.QC, ic_g7.QD) - ALIAS(hvidQ, ic_h6b.Q) - - // ---------------------------------------------------------------------------------------- - // vvid circuit - // ---------------------------------------------------------------------------------------- - - TTL_9316(ic_b3, hsyncQ, high, vblankQ, high, ic_b2b.Q, a6, b6, c6, d6) - TTL_9316(ic_a3, hsyncQ, ic_b3.RC, high, high, ic_b2b.Q, low, low, low, low) - TTL_7400_NAND(ic_b2b, ic_a3.RC, ic_b3.RC) - TTL_7410_NAND(ic_e2b, ic_a3.RC, ic_b3.QC, ic_b3.QD) - ALIAS(vvidQ, ic_e2b.Q) - TTL_7404_INVERT(vvid, vvidQ) // D2D - ALIAS(vpos256, ic_a3.RC) - ALIAS(vpos32, ic_a3.QB) - ALIAS(vpos16, ic_a3.QA) - - // ---------------------------------------------------------------------------------------- - // vball ctrl circuit - // ---------------------------------------------------------------------------------------- - - TTL_7450_ANDORINVERT(ic_a6a, b1, 256HQ, b2, 256H) - TTL_7450_ANDORINVERT(ic_a6b, c1, 256HQ, c2, 256H) - TTL_7450_ANDORINVERT(ic_b6b, d1, 256HQ, d2, 256H) - - TTL_7474(ic_a5b, hit, ic_a6a, attractQ, high) - TTL_7474(ic_a5a, hit, ic_a6b, attractQ, high) - TTL_7474(ic_b5a, hit, ic_b6b, attractQ, high) - TTL_74107(ic_h2x, vblank, vvid, vvid, hitQ) // two marked at position h2a ==> this h2x - - TTL_7486_XOR(ic_a4c, ic_a5b.Q, ic_h2x.Q) - TTL_7486_XOR(ic_a4b, ic_a5a.Q, ic_h2x.Q) - - TTL_7450_ANDORINVERT(ic_b6a, ic_b5a.Q, ic_h2x.Q, ic_b5a.QQ, ic_h2x.QQ) - - TTL_7404_INVERT(ic_c4a, ic_b6a) - - TTL_7483(ic_b4, ic_a4c, ic_a4b, ic_b6a, low, ic_c4a, high, high, low, low) - ALIAS(a6, ic_b4.S1) - ALIAS(b6, ic_b4.S2) - ALIAS(c6, ic_b4.S3) - ALIAS(d6, ic_b4.S4) - - // ---------------------------------------------------------------------------------------- - // serve monoflop - // ---------------------------------------------------------------------------------------- - - TTL_7404_INVERT(f4_trig, rstspeed) - - RES(ic_f4_serve_R, RES_K(330)) - CAP(ic_f4_serve_C, CAP_U(4.7)) - NE555(ic_f4_serve) - - NET_C(ic_f4_serve.VCC, V5) - NET_C(ic_f4_serve.GND, GND) - NET_C(ic_f4_serve.RESET, V5) - NET_C(ic_f4_serve_R.1, V5) - NET_C(ic_f4_serve_R.2, ic_f4_serve.THRESH) - NET_C(ic_f4_serve_R.2, ic_f4_serve.DISCH) - NET_C(f4_trig, ic_f4_serve.TRIG) - NET_C(ic_f4_serve_R.2, ic_f4_serve_C.1) - NET_C(GND, ic_f4_serve_C.2) - - TTL_7427_NOR(ic_e5a, ic_f4_serve.OUT, StopG, runQ) - TTL_7474(ic_b5b_serve, pad1, ic_e5a, ic_e5a, high) - - ALIAS(Serve, ic_b5b_serve.QQ) - ALIAS(ServeQ, ic_b5b_serve.Q) - - // ---------------------------------------------------------------------------------------- - // score logic - // ---------------------------------------------------------------------------------------- - - TTL_7474(ic_h3a, 4H, 128H, high, attractQ) - - // ---------------------------------------------------------------------------------------- - // sound logic - // ---------------------------------------------------------------------------------------- - TTL_7474(ic_c2a, vpos256, high, hitQ, high) - TTL_74107(ic_f3_topbot, vblank, vvid, vvidQ, ServeQ) - - // ---------------------------------------------------------------------------------------- - // monoflop with NE555 determines duration of score sound - // ---------------------------------------------------------------------------------------- - - RES(ic_g4_R, RES_K(220)) - CAP(ic_g4_C, CAP_U(1)) - NE555(ic_g4_sc) - ALIAS(SC, ic_g4_sc.OUT) - - NET_C(ic_g4_sc.VCC, V5) - NET_C(ic_g4_sc.GND, GND) - NET_C(ic_g4_sc.RESET, V5) - NET_C(ic_g4_R.1, V5) - NET_C(ic_g4_R.2, ic_g4_sc.THRESH) - NET_C(ic_g4_R.2, ic_g4_sc.DISCH) - NET_C(MissQ, ic_g4_sc.TRIG) - NET_C(ic_g4_R.2, ic_g4_C.1) - NET_C(GND, ic_g4_C.2) - - ALIAS(hit_sound_en, ic_c2a.QQ) - TTL_7400_NAND(hit_sound, hit_sound_en, vpos16) - TTL_7400_NAND(score_sound, SC, vpos32) - TTL_7400_NAND(topbothitsound, ic_f3_topbot.Q, vpos32) - - TTL_7410_NAND(ic_c4b, topbothitsound, hit_sound, score_sound) - TTL_7400_NAND(ic_c1b, ic_c4b.Q, attractQ) - ALIAS(sound, ic_c1b.Q) - - - // ---------------------------------------------------------------------------------------- - // paddle1 logic 1 - // ---------------------------------------------------------------------------------------- - - POT(ic_b9_POT, RES_K(1)) // This is a guess!! - PARAM(ic_b9_POT.DIALLOG, 1) // Log Dial ... - RES(ic_b9_RPRE, 470) - - NET_C(ic_b9_POT.1, V5) - NET_C(ic_b9_POT.3, GND) - NET_C(ic_b9_POT.2, ic_b9_RPRE.1) - NET_C(ic_b9_RPRE.2, ic_b9.CONT) - - RES(ic_b9_R, RES_K(81)) // Adjustment pot - CAP(ic_b9_C, CAP_U(.1)) - DIODE(ic_b9_D, "1N914") - NE555(ic_b9) - - NET_C(ic_b9.VCC, V5) - NET_C(ic_b9.GND, GND) - NET_C(ic_b9.RESET, V5) - NET_C(ic_b9_R.1, V5) - NET_C(ic_b9_R.2, ic_b9.THRESH) - NET_C(ic_b9_R.2, ic_b9_D.A) - NET_C(ic_b9_D.K, ic_b9.DISCH) - NET_C(256VQ, ic_b9.TRIG) - NET_C(ic_b9_R.2, ic_b9_C.1) - NET_C(GND, ic_b9_C.2) - - TTL_7404_INVERT(ic_c9b, ic_b9.OUT) - TTL_7400_NAND(ic_b7b, ic_a7b.Q, hsyncQ) - TTL_7493(ic_b8, ic_b7b.Q, ic_b8.QA, ic_b9.OUT, ic_b9.OUT) - TTL_7400_NAND(ic_b7a, ic_c9b.Q, ic_a7b.Q) - TTL_7420_NAND(ic_a7b, ic_b8.QA, ic_b8.QB, ic_b8.QC, ic_b8.QD) - ALIAS(vpad1Q, ic_b7a.Q) - - ALIAS(b1, ic_b8.QB) - ALIAS(c1, ic_b8.QC) - ALIAS(d1, ic_b8.QD) - - // ---------------------------------------------------------------------------------------- - // paddle1 logic 2 - // ---------------------------------------------------------------------------------------- - - POT(ic_a9_POT, RES_K(1)) // This is a guess!! - PARAM(ic_a9_POT.DIALLOG, 1) // Log Dial ... - RES(ic_a9_RPRE, 470) - - NET_C(ic_a9_POT.1, V5) - NET_C(ic_a9_POT.3, GND) - NET_C(ic_a9_POT.2, ic_a9_RPRE.1) - NET_C(ic_a9_RPRE.2, ic_a9.CONT) - - RES(ic_a9_R, RES_K(81)) // Adjustment pot - CAP(ic_a9_C, CAP_U(.1)) - DIODE(ic_a9_D, "1N914") - NE555(ic_a9) - - NET_C(ic_a9.VCC, V5) - NET_C(ic_a9.GND, GND) - NET_C(ic_a9.RESET, V5) - NET_C(ic_a9_R.1, V5) - NET_C(ic_a9_R.2, ic_a9.THRESH) - NET_C(ic_a9_R.2, ic_a9_D.A) - NET_C(ic_a9_D.K, ic_a9.DISCH) - NET_C(256VQ, ic_a9.TRIG) - NET_C(ic_a9_R.2, ic_a9_C.1) - NET_C(GND, ic_a9_C.2) - - TTL_7404_INVERT(ic_c9a, ic_a9.OUT) - TTL_7400_NAND(ic_b7c, ic_a7a.Q, hsyncQ) - TTL_7493(ic_a8, ic_b7c.Q, ic_a8.QA, ic_a9.OUT, ic_a9.OUT) - TTL_7400_NAND(ic_b7d, ic_c9a.Q, ic_a7a.Q) - TTL_7420_NAND(ic_a7a, ic_a8.QA, ic_a8.QB, ic_a8.QC, ic_a8.QD) - ALIAS(vpad2Q, ic_b7d.Q) - - ALIAS(b2, ic_a8.QB) - ALIAS(c2, ic_a8.QC) - ALIAS(d2, ic_a8.QD) - - // ---------------------------------------------------------------------------------------- - // C5-EN Logic - // ---------------------------------------------------------------------------------------- - - TTL_7404_INVERT(ic_e3a, 128H) - TTL_7427_NOR( ic_e3b, 256H, 64H, ic_e3a.Q) - TTL_7410_NAND(ic_e2c, 256H, 64H, ic_e3a.Q) - TTL_7404_INVERT(ic_e3c, ic_e2c.Q) - TTL_7402_NOR(ic_d2c, ic_e3c.Q, ic_e3b.Q) - TTL_7404_INVERT(ic_g1a, 32V) - TTL_7425_NOR(ic_f2a, ic_g1a.Q, 64V, 128V, ic_d2c.Q) - ALIAS(c5_en, ic_f2a.Q) - - // ---------------------------------------------------------------------------------------- - // Score logic ... - // ---------------------------------------------------------------------------------------- - - TTL_7402_NOR(ic_f5b, L, Missed) - TTL_7490(ic_c7, ic_f5b, ic_c7.QA, SRST, SRST, low, low) - TTL_74107(ic_c8a, ic_c7.QD, high, high, SRSTQ) - SWITCH2(sw1a) - PARAM(sw1a.POS, 0) - - NET_C(sw1a.1, V5) - NET_C(sw1a.2, ic_c7.QC) - - TTL_7410_NAND(ic_d8a, ic_c7.QA, sw1a.Q, ic_c8a.Q) // would be nand2 for 11 instead of 15 points, need a switch dev! - - ALIAS(StopG1Q, ic_d8a.Q) - ALIAS(score1_1, ic_c7.QA) - ALIAS(score1_2, ic_c7.QB) - ALIAS(score1_4, ic_c7.QC) - ALIAS(score1_8, ic_c7.QD) - ALIAS(score1_10, ic_c8a.Q) - ALIAS(score1_10Q, ic_c8a.QQ) - - TTL_7402_NOR(ic_f5a, R, Missed) - TTL_7490(ic_d7, ic_f5a, ic_d7.QA, SRST, SRST, low, low) - TTL_74107(ic_c8b, ic_d7.QD, high, high, SRSTQ) - SWITCH2(sw1b) - PARAM(sw1b.POS, 0) - - NET_C(sw1b.1, V5) - NET_C(sw1b.2, ic_d7.QC) - - - TTL_7410_NAND(ic_d8b, ic_d7.QA, sw1b.Q, ic_c8b.Q) // would be nand2 for 11 instead of 15 points, need a switch dev! - - ALIAS(StopG2Q, ic_d8b.Q) - ALIAS(score2_1, ic_d7.QA) - ALIAS(score2_2, ic_d7.QB) - ALIAS(score2_4, ic_d7.QC) - ALIAS(score2_8, ic_d7.QD) - ALIAS(score2_10, ic_c8b.Q) - ALIAS(score2_10Q, ic_c8b.QQ) - - // ---------------------------------------------------------------------------------------- - // Score display - // ---------------------------------------------------------------------------------------- - - TTL_74153(ic_d6a, score1_10Q, score1_4, score2_10Q, score2_4, 32H, 64H, low) - TTL_74153(ic_d6b, score1_10Q, score1_8, score2_10Q, score2_8, 32H, 64H, low) - - TTL_74153(ic_c6a, high, score1_1, high, score2_1, 32H, 64H, low) - TTL_74153(ic_c6b, score1_10Q, score1_2, score2_10Q, score2_2, 32H, 64H, low) - - TTL_7448(ic_c5, ic_c6a.AY, ic_c6b.AY, ic_d6a.AY, ic_d6b.AY, high, c5_en, high) - - TTL_7404_INVERT(ic_e4b, 16H) - TTL_7427_NOR(ic_e5c, ic_e4b.Q, 8H, 4H) - ALIAS(scoreFE, ic_e5c.Q) - - TTL_7400_NAND(ic_c3d, 8H, 4H) - //TTL_7400_NAND(ic_c3d, 4H, 8H) - TTL_7402_NOR(ic_d2b, ic_e4b.Q, ic_c3d.Q) - ALIAS(scoreBC, ic_d2b.Q) - - TTL_7427_NOR(ic_e5b, ic_e4b.Q, 8V, 4V) - ALIAS(scoreA, ic_e5b.Q) - - TTL_7410_NAND(ic_e2a, 16H, 8V, 4V) - TTL_7404_INVERT(ic_e4a, ic_e2a.Q) - ALIAS(scoreGD, ic_e4a.Q) - - TTL_7404_INVERT(ic_e4c, 16V) - - TTL_7410_NAND(ic_d4a, ic_e4c.Q, ic_c5.f, scoreFE) - TTL_7410_NAND(ic_d5c, 16V, ic_c5.e, scoreFE) - TTL_7410_NAND(ic_c4c, ic_e4c.Q, ic_c5.b, scoreBC) - TTL_7410_NAND(ic_d5a, 16V, ic_c5.c, scoreBC) - TTL_7410_NAND(ic_d4c, ic_e4c.Q, ic_c5.a, scoreA) - TTL_7410_NAND(ic_d4b, ic_e4c.Q, ic_c5.g, scoreGD) - TTL_7410_NAND(ic_d5b, 16V, ic_c5.d, scoreGD) - - TTL_7430_NAND(ic_d3, ic_d4a, ic_d5c, ic_c4c, ic_d5a, ic_d4c, ic_d4b, ic_d5b, high) - ALIAS(score, ic_d3.Q) //FIXME - - // net - TTL_74107(ic_f3b, clk, 256H, 256HQ, high) - TTL_7400_NAND(ic_g3b, ic_f3b.QQ, 256H) - TTL_7427_NOR(ic_g2b, ic_g3b.Q, vblank, 4V) - ALIAS(net, ic_g2b.Q) - - // ---------------------------------------------------------------------------------------- - // video - // ---------------------------------------------------------------------------------------- - - TTL_7402_NOR(ic_g1b, hvidQ, vvidQ) - TTL_7425_NOR(ic_f2b, ic_g1b.Q, pad1, pad2, net) - TTL_7404_INVERT(ic_e4e, ic_f2b.Q) - ALIAS(video, ic_e4e.Q) - - TTL_7486_XOR(ic_a4d, hsyncQ, vsyncQ) - TTL_7404_INVERT(ic_e4f, ic_a4d.Q) - - RES(RV1, RES_K(1)) - RES(RV2, RES_K(1.2)) - RES(RV3, RES_K(22)) - NET_C(video, RV1.1) - NET_C(score, RV2.1) - NET_C(ic_e4f.Q, RV3.1) - NET_C(RV1.2, RV2.2) - NET_C(RV2.2, RV3.2) - - ALIAS(videomix, RV3.2) - -NETLIST_END() +NETLIST_EXTERNAL(pongdoubles); +NETLIST_EXTERNAL(pong_fast); class pong_state : public driver_device { @@ -711,73 +146,10 @@ private: static NETLIST_START(pong) - //NETLIST_INCLUDE(pong_schematics) NETLIST_MEMREGION("maincpu") - //NETDEV_ANALOG_CALLBACK(sound_cb, sound, pong_state, sound_cb, "") - //NETDEV_ANALOG_CALLBACK(video_cb, videomix, fixedfreq_device, update_vid, "fixfreq") NETLIST_END() -static NETLIST_START(pong_fast) - - INCLUDE(pong_schematics) - - //NETDEV_ANALOG_CALLBACK(sound_cb, sound, pong_state, sound_cb, "") - //NETDEV_ANALOG_CALLBACK(video_cb, videomix, fixedfreq_device, update_vid, "fixfreq") - -NETLIST_END() - -#if PONGD - -static NETLIST_START(pongd) - - INCLUDE(pongdoubles) - - //NETDEV_ANALOG_CALLBACK(sound_cb, AUDIO, pong_state, sound_cb, "") - //NETDEV_ANALOG_CALLBACK(video_cb, videomix, fixedfreq_device, update_vid, "fixfreq") - -NETLIST_END() -#endif - -#ifdef TEST_SOUND -static NETLIST_START(test) - - /* - * Astable multivibrator using two 7400 gates (or inverters) - * - */ - - /* Standard stuff */ - - SOLVER(Solver) - PARAM(Solver.FREQ, 48000) - - //NETDEV_SOUND_IN(SND_IN) - //PARAM(SND_IN.CHAN0, "tin.IN") - - ANALOG_INPUT(tin, 0) - - // astable NAND Multivibrator - RES(R1, 1000) - CAP(C1, 1e-6) - TTL_7400_NAND(n1,R1.1,R1.1) - TTL_7400_NAND(n2,R1.2,R1.2) - NET_C(n1.Q, R1.2) - NET_C(n2.Q, C1.1) - NET_C(C1.2, R1.1) - LOG(log1, n2.Q) - -#if 0 - NETDEV_SOUND_OUT(CH0, 0) - NET_C(CH0.IN, n2.Q) - - NETDEV_SOUND_OUT(CH1, 1) - NET_C(CH1.IN, tin.Q) -#endif - -NETLIST_END() -#endif - void pong_state::machine_start() { } @@ -828,7 +200,6 @@ static INPUT_PORTS_START( pong ) INPUT_PORTS_END -#if PONGD static INPUT_PORTS_START( pongd ) 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") @@ -860,8 +231,6 @@ static INPUT_PORTS_START( pongd ) #endif INPUT_PORTS_END -#endif - static MACHINE_CONFIG_START( pong, pong_state ) /* basic machine hardware */ @@ -884,34 +253,12 @@ static MACHINE_CONFIG_START( pong, pong_state ) /* video hardware */ - //MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_ntsc720) - //MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pongX2) MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pong) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("dac", DAC, 48000) -#ifdef TEST_SOUND - MCFG_SOUND_ROUTE_EX(0, "snd_test", 1.0, 0) -#else MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -#endif - -#ifdef TEST_SOUND - MCFG_SOUND_ADD("snd_test", NETLIST_SOUND, 48000) - MCFG_NETLIST_SETUP(test) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - - MCFG_NETLIST_STREAM_INPUT("snd_test", 0, "tin.IN") - MCFG_NETLIST_ANALOG_MULT_OFFSET(0.001, 0.0) - - //MCFG_NETLIST_STREAM_OUTPUT("snd_test", 0, "tin.Q", 100) - MCFG_NETLIST_STREAM_OUTPUT("snd_test", 0, "n2.Q") - MCFG_NETLIST_ANALOG_MULT_OFFSET(1000.0, 0.0) - MCFG_NETLIST_STREAM_OUTPUT("snd_test", 1, "tin.Q") - MCFG_NETLIST_ANALOG_MULT_OFFSET(1000.0, 0.0) - -#endif MACHINE_CONFIG_END @@ -923,12 +270,11 @@ static MACHINE_CONFIG_DERIVED( pongf, pong ) MACHINE_CONFIG_END -#if PONGD static MACHINE_CONFIG_START( pongd, pong_state ) /* basic machine hardware */ MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) - MCFG_NETLIST_SETUP(pongd) + MCFG_NETLIST_SETUP(pongdoubles) #if 0 MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R") @@ -953,8 +299,6 @@ static MACHINE_CONFIG_START( pongd, pong_state ) /* video hardware */ - //MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_ntsc720) - //MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pongX2) MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pongd) /* sound hardware */ @@ -964,8 +308,6 @@ static MACHINE_CONFIG_START( pongd, pong_state ) MACHINE_CONFIG_END -#endif - /*************************************************************************** Game driver(s) @@ -981,14 +323,10 @@ ROM_START( pongf ) /* dummy to satisfy game entry*/ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END -#if PONGD ROM_START( pongd ) /* dummy to satisfy game entry*/ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) ROM_END -#endif -GAME( 1972, pong, 0, pong, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) external", GAME_SUPPORTS_SAVE) -GAME( 1972, pongf, 0, pongf, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E)", GAME_SUPPORTS_SAVE ) -#if PONGD -GAME( 1974, pongd, 0, pongd, pongd, driver_device, 0, ROT0, "Atari", "Pong Doubles", GAME_SUPPORTS_SAVE ) -#endif +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 ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f1294f0dc15..d222bf80f02 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12502,6 +12502,7 @@ manohman // 199?, Merkur. // TTL logic games pong // (c) 1972 Atari +pongd // (c) 1975 Atari pongf // (c) 1972 Atari - no subcycles antiairc // (c) 1975 Atari crshnscr // (c) 1975 Atari diff --git a/src/mame/mame.mak b/src/mame/mame.mak index 96b8e0a4d9c..fcaf99a919a 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -14,7 +14,7 @@ ifeq ($(TARGET),mame) # $(SRC)/emu, as well as all the OSD objects and anything in the $(OBJ) tree depend: maketree $(MAKEDEP_TARGET) @echo Rebuilding depend_emu.mak... - $(MAKEDEP) -I. $(INCPATH) -X$(SRC)/emu -X$(SRC)/osd/... -X$(OBJ)/... $(SRC)/emu > depend_emu.mak + $(MAKEDEP) -I. $(INCPATH) -I$(SRC)/emu -X$(SRC)/osd/... -X$(OBJ)/... $(SRC)/emu > depend_emu.mak @echo Rebuilding depend_$(TARGET).mak... $(MAKEDEP) -I. $(INCPATH) -X$(SRC)/emu -X$(SRC)/osd/... -X$(OBJ)/... $(SRC)/$(TARGET) > depend_$(TARGET).mak endif @@ -851,6 +851,8 @@ $(MAMEOBJ)/atari.a: \ $(DRIVERS)/offtwall.o $(VIDEO)/offtwall.o \ $(DRIVERS)/orbit.o $(AUDIO)/orbit.o $(VIDEO)/orbit.o \ $(DRIVERS)/pong.o \ + $(DRIVERS)/nl_pong.o \ + $(DRIVERS)/nl_pongd.o \ $(DRIVERS)/poolshrk.o $(AUDIO)/poolshrk.o $(VIDEO)/poolshrk.o \ $(DRIVERS)/quantum.o \ $(DRIVERS)/quizshow.o \