Previous 199869 Revisions Next

r26885 Thursday 2nd January, 2014 at 00:30:21 UTC by Couriersud
Pong now has complete emulation of discrete logic for runQ and SRST signals. Rewrote switch2 device to be based on resistances as well. [Couriersud]
[src/emu/netlist]netlist.mak nl_base.c
[src/emu/netlist/devices]net_lib.c net_lib.h nld_legacy.c nld_legacy.h nld_solver.c nld_switches.c* nld_switches.h*
[src/mame/drivers]pong.c

trunk/src/emu/netlist/devices/nld_solver.c
r26884r26885
6969ATTR_HOT inline void netlist_matrix_solver_t::update_inputs()
7070{
7171   for (dev_list_t::entry_t *p = m_inps.first(); p != NULL; p = m_inps.next(p))
72      p->object()->update_dev();
72   {
73        p->object()->update_dev();
74   }
7375}
7476
7577
trunk/src/emu/netlist/devices/net_lib.c
r26884r26885
255255   ENTRY(clock,                NETDEV_CLOCK)
256256   ENTRY(mainclock,            NETDEV_MAINCLOCK)
257257   ENTRY(solver,               NETDEV_SOLVER)
258   ENTRY(nicMultiSwitch,       NETDEV_SWITCH2)
258   ENTRY(switch2,              NETDEV_SWITCH2)
259259   ENTRY(nicRSFF,              NETDEV_RSFF)
260260   ENTRY(7400,                 TTL_7400_NAND)
261261   ENTRY(7402,                 TTL_7402_NOR)
trunk/src/emu/netlist/devices/net_lib.h
r26884r26885
7474
7575#include "nld_ne555.h"
7676
77#include "nld_switches.h"
78
7779#include "nld_log.h"
7880
7981#include "nld_solver.h"
trunk/src/emu/netlist/devices/nld_switches.c
r0r26885
1/*
2 * nld_legacy.c
3 *
4 */
5
6#include "nld_switches.h"
7#include "netlist/nl_setup.h"
8
9#define R_OFF   (1.0 / NETLIST_GMIN)
10#define R_ON    0.01
11
12NETLIB_START(switch2)
13{
14
15    register_sub(m_R[0], "R1");
16    register_sub(m_R[1], "R2");
17
18    register_param("POS", m_POS, 0);
19
20    m_R[0].set_R(R_ON);
21    m_R[1].set_R(R_OFF);
22
23    setup().connect(m_R[0].m_N, m_R[1].m_N);
24
25    register_subalias("i1", m_R[0].m_P);
26    register_subalias("i2", m_R[1].m_P);
27
28    register_subalias("Q", m_R[0].m_N);
29}
30
31NETLIB_UPDATE(switch2)
32{
33}
34
35NETLIB_UPDATE_PARAM(switch2)
36{
37    if (m_POS.Value() == 0)
38    {
39        m_R[0].set_R(R_ON);
40        m_R[1].set_R(R_OFF);
41    }
42    else
43    {
44        m_R[0].set_R(R_OFF);
45        m_R[1].set_R(R_ON);
46    }
47    m_R[0].update_dev();
48    m_R[1].update_dev();
49}
Property changes on: trunk/src/emu/netlist/devices/nld_switches.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/netlist/devices/nld_switches.h
r0r26885
1// license:GPL-2.0+
2// copyright-holders:Couriersud
3/*
4 * nld_switches.h
5 *
6 */
7
8#pragma once
9
10#ifndef NLD_SWITCHES_H_
11#define NLD_SWITCHES_H_
12
13#include "../nl_base.h"
14#include "nld_twoterm.h"
15
16// ----------------------------------------------------------------------------------------
17// Macros
18// ----------------------------------------------------------------------------------------
19
20#define NETDEV_SWITCH2(_name, _i1, _i2)                                             \
21      NET_REGISTER_DEV(switch2, _name)                                            \
22      NET_CONNECT(_name, i1, _i1)                                                 \
23      NET_CONNECT(_name, i2, _i2)
24
25// ----------------------------------------------------------------------------------------
26// Devices ...
27// ----------------------------------------------------------------------------------------
28
29NETLIB_DEVICE_WITH_PARAMS(switch2,
30    NETLIB_NAME(R_base) m_R[2];
31
32   netlist_param_int_t m_POS;
33);
34
35
36
37
38#endif /* NLD_SWITCHES_H_ */
Property changes on: trunk/src/emu/netlist/devices/nld_switches.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/netlist/devices/nld_legacy.c
r26884r26885
44 */
55
66#include "nld_legacy.h"
7#include "netlist/nl_setup.h"
78
8NETLIB_START(nicMultiSwitch)
9{
10   static const char *sIN[8] = { "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8" };
11   int i;
12
13   m_position = 0;
14   m_low.initial(0);
15
16   for (i=0; i<8; i++)
17   {
18      register_input(sIN[i], m_I[i]);
19      m_low.net().register_con(m_I[i]);
20      //m_I[i].set_net(m_low.m_net);
21   }
22   register_param("POS", m_POS, 0);
23   register_output("Q", m_Q);
24
25   save(NAME(m_position));
26
27}
28
29NETLIB_UPDATE(nicMultiSwitch)
30{
31   assert(m_position<8);
32   OUTANALOG(m_Q, INPANALOG(m_I[m_position]), NLTIME_FROM_NS(1));
33}
34
35NETLIB_UPDATE_PARAM(nicMultiSwitch)
36{
37   m_position = m_POS.Value();
38   //update();
39}
40
419NETLIB_START(nicRSFF)
4210{
4311   register_input("S", m_S);
trunk/src/emu/netlist/devices/nld_legacy.h
r26884r26885
1414#define NLD_LEGACY_H_
1515
1616#include "../nl_base.h"
17#include "nld_twoterm.h"
1718
1819// ----------------------------------------------------------------------------------------
1920// Macros
r26884r26885
2425      NET_CONNECT(_name, S, _S)                                                   \
2526      NET_CONNECT(_name, R, _R)
2627
27#define NETDEV_SWITCH2(_name, _i1, _i2)                                             \
28      NET_REGISTER_DEV(nicMultiSwitch, _name)                                     \
29      NET_CONNECT(_name, i1, _i1)                                                 \
30      NET_CONNECT(_name, i2, _i2)
31
3228// ----------------------------------------------------------------------------------------
3329// Devices ...
3430// ----------------------------------------------------------------------------------------
r26884r26885
4137   netlist_ttl_output_t m_QQ;
4238);
4339
44NETLIB_DEVICE_WITH_PARAMS(nicMultiSwitch,
45   netlist_analog_input_t m_I[8];
4640
47   netlist_analog_output_t m_Q;
48   netlist_analog_output_t m_low;
49
50   netlist_param_int_t m_POS;
51
52   int m_position;
53);
54
55
56
57
5841#endif /* NLD_LEGACY_H_ */
trunk/src/emu/netlist/nl_base.c
r26884r26885
341341
342342   setup().register_alias(alias, term.name());
343343
344   if (term.isType(netlist_terminal_t::INPUT))
344   if (term.isType(netlist_terminal_t::INPUT) || term.isType(netlist_terminal_t::TERMINAL))
345345      m_terminals.add(name);
346346}
347347
trunk/src/emu/netlist/netlist.mak
r26884r26885
3333   $(NETLISTOBJ)/devices/nld_74153.o \
3434   $(NETLISTOBJ)/devices/nld_9316.o \
3535   $(NETLISTOBJ)/devices/nld_ne555.o \
36   $(NETLISTOBJ)/devices/nld_switches.o \
3637   $(NETLISTOBJ)/devices/nld_legacy.o \
3738   $(NETLISTOBJ)/devices/net_lib.o \
3839   $(NETLISTOBJ)/devices/nld_log.o \
trunk/src/mame/drivers/pong.c
r26884r26885
111111   NETDEV_PARAM(xclk.FREQ, 7159000.0*2)
112112#endif
113113
114   NETDEV_LOGIC_INPUT(SRST)
115   NETDEV_ANALOG_INPUT(P2)
114   /* 3V Logic - Just a resistor - the value is not given in schematics */
116115
116   NETDEV_R(R3V, 50)   // Works ...
117   NET_C(R3V.1, V5)
118   NET_ALIAS(V3, R3V.2)
119
120   /* Coin, antenna and startup circuit */
121
122   NETDEV_ANALOG_CONST(STOPG, 0)
123    NET_ALIAS(SRSTQ, RYf.2)
124    NET_ALIAS(SRST, RYc.2)
125
126    /* SRSTQ has a diode to +3V to protect against overvoltage - omitted */
127
128    NETDEV_LOGIC_INPUT(antenna)
129
130    NET_ALIAS(runQ, Q1.C)
131
132    TTL_7404_INVERT(e4d, STOPG)
133
134    NETDEV_R(RYf, 50)   // output impedance
135    NETDEV_R(RYc, 50)   // output impedance
136
137    TTL_7404_INVERT(c9f, RYc.2)
138    TTL_7404_INVERT(c9c, RYf.2)
139    NET_C(c9f.Q, RYf.1)
140    NET_C(c9c.Q, RYc.1)
141
142    NETDEV_SWITCH2(coinsw,  RYc.2, RYf.2)
143
144    NET_C(coinsw.Q, GND)
145
146    /* Antenna circuit */
147    /* Has a diode to clamp negative voltages - omitted here */
148
149    NETDEV_QNPN(Q3, BC237B)
150    NET_C(antenna, Q3.B)
151    NET_C(GND, Q3.E)
152    NETDEV_R(RX5, 100)
153    NETDEV_C(CX1, CAP_U(0.1))
154
155    NET_C(RX5.1, CX1.1)
156    NET_C(RX5.1, Q3.C)
157    NET_C(RX5.2, GND)
158    NET_C(CX1.2, GND)
159    NETDEV_QNPN(Q1, BC237B)
160    NET_C(Q1.B, RX5.1)
161    NET_C(Q1.E, GND)
162
163    NETDEV_D(D3, 1N914)
164    NET_C(D3.A, Q1.C)
165    NET_C(D3.K, SRSTQ)
166
167    NETDEV_D(D2, 1N914)
168    NETDEV_R(RX4, 220)
169    NET_C(D2.K, e4d.Q)
170    NET_C(D2.A, RX4.1)
171    NET_C(RX4.2, Q3.C)
172
173    NETDEV_R(RX1, 100)
174    NETDEV_R(RX2, 100)
175    NETDEV_R(RX3, 330)
176    NETDEV_C(CX2, CAP_U(0.1))
177
178    NET_C(RX3.2, D3.A)
179    NET_C(RX3.1, RX1.2)
180    NET_C(RX1.1, V3)
181
182    NET_C(RX1.1, CX2.1)
183    NET_C(RX1.2, CX2.2)
184
185    NETDEV_QPNP(Q2, BC556B)
186    NET_C(Q2.E, V3)
187    NET_C(Q2.B, RX1.2)
188    NET_C(Q2.C, RX2.2)
189
190    NET_C(RX2.1, D2.A)
191
192    /* hit logic */
193
117194   TTL_7404_INVERT(hitQ, hit)
118195   TTL_7400_NAND(hit, hit1Q, hit2Q)
119196
r26884r26885
130207   TTL_7400_NAND(ic_e1a, ic_d1e.Q, attractQ)
131208   NET_ALIAS(Missed, ic_e1a.Q)
132209
133   // runQ is basically the output of a RS flipflop
134   // This is realized with discrete components in the real thing
135   NETDEV_RSFF(runQ_ff, SRST, StopG)
136   NET_ALIAS(runQ, runQ_ff.QQ)
137
138210   TTL_7400_NAND(rstspeed, SRSTQ, MissQ)
139211   TTL_7400_NAND(StopG, StopG1Q, StopG2Q)
140212   NET_ALIAS(L, ic_h3b.Q)
r26884r26885
143215   TTL_7400_NAND(hit1Q, pad1, ic_g1b.Q)
144216   TTL_7400_NAND(hit2Q, pad2, ic_g1b.Q)
145217
146   TTL_7404_INVERT(SRSTQ, SRST)
147
148218   TTL_7400_NAND(ic_g3c, 128H, ic_h3a.QQ)
149219   TTL_7427_NOR(ic_g2c, ic_g3c.Q, 256H, vpad1Q)
150220   NET_ALIAS(pad1, ic_g2c.Q)
r26884r26885
668738    PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) PORT_PLAYER(2) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot1")
669739
670740   PORT_START("IN0") /* fake as well */
671   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )     NETLIST_LOGIC_PORT_CHANGED("maincpu", "srst")
741   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )     NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw")
742
672743   PORT_DIPNAME( 0x06, 0x00, "Game Won" )          PORT_DIPLOCATION("SW1A:1,SW1B:1") PORT_CHANGED_MEMBER(DEVICE_SELF, pong_state, input_changed, IC_SWITCH)
673744   PORT_DIPSETTING(    0x00, "11" )
674745   PORT_DIPSETTING(    0x06, "15" )
675746
747    PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE )  PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna")
748
676749   PORT_START("VR1")
677750   PORT_ADJUSTER( 50, "VR1 - 50k, Paddle 1 adjustment" )   NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr0")
678751   PORT_START("VR2")
r26884r26885
692765    MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "ic_a9_POT.DIAL")
693766    MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01)
694767    MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01)
695    MCFG_NETLIST_LOGIC_INPUT("maincpu", "srst", "SRST.OUT", 0, 0x01)
768    MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "coinsw.POS", 0, 0x01)
769    MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.OUT", 0, 0x01)
696770
697771   /* video hardware */
698772
r26884r26885
723797
724798ROM_START( pong ) /* dummy to satisfy game entry*/
725799   ROM_REGION( 0x10000, "maincpu", 0 ) /* enough for netlist */
726   ROM_LOAD( "pong.netlist", 0x000000, 0x003f24, CRC(cc99883b) SHA1(87ea6ec8772db7bf4047695d4c3513fa1a52b6b8) )
800    ROM_LOAD( "pong.netlist", 0x000000, 0x0043d9, CRC(64edd5a0) SHA1(9e661f2fba44f46015fdccffa7766dd4e61cdc7d) )
727801ROM_END
728802
729803ROM_START( pongf ) /* dummy to satisfy game entry*/

Previous 199869 Revisions Next


© 1997-2024 The MAME Team