Previous 199869 Revisions Next

r26750 Wednesday 25th December, 2013 at 13:54:42 UTC by Couriersud
Removed legacy code in netlist and separated out 74153 and 74107(A). [Couriersud]
[src/emu/machine]netlist.h
[src/emu/netlist]netlist.mak nl_base.c nl_base.h nl_config.h nl_setup.c
[src/emu/netlist/devices]net_lib.c net_lib.h nld_74107.c* nld_74107.h* nld_74153.c* nld_74153.h* nld_7474.h nld_legacy.c nld_legacy.h nld_twoterm.h

trunk/src/emu/machine/netlist.h
r26749r26750
199199
200200
201201   netlist_mame_t *m_netlist;
202
203202   netlist_setup_t *m_setup;
204203
205// more save state ... needs to go somewhere else
206
207   struct qentry {
208      netlist_time m_time;
209      char m_name[64];
210   };
211
212   qentry qtemp[1024];
213   int qsize;
214
215204private:
216205
217206   void save_state();
trunk/src/emu/netlist/netlist.mak
r26749r26750
2929   $(NETLISTOBJ)/devices/nld_7486.o \
3030   $(NETLISTOBJ)/devices/nld_7490.o \
3131   $(NETLISTOBJ)/devices/nld_7493.o \
32   $(NETLISTOBJ)/devices/nld_74107.o \
33   $(NETLISTOBJ)/devices/nld_74153.o \
3234   $(NETLISTOBJ)/devices/nld_9316.o \
3335   $(NETLISTOBJ)/devices/nld_ne555.o \
3436   $(NETLISTOBJ)/devices/nld_legacy.o \
trunk/src/emu/netlist/nl_base.h
r26749r26750
368368   netlist_core_terminal_t *m_update_list_next;
369369
370370protected:
371   ATTR_COLD virtual void save_register() { save(NAME(m_state)); netlist_owned_object_t::save_register(); }
371   ATTR_COLD virtual void save_register()
372   {
373       save(NAME(m_state));
374       netlist_owned_object_t::save_register();
375   }
372376
373377private:
374378   netlist_net_t * RESTRICT m_net;
r26749r26750
497501    ATTR_COLD netlist_analog_input_t()
498502      : netlist_input_t(INPUT, ANALOG) { }
499503
500   ATTR_HOT inline const bool is_highz() const;
501504   ATTR_HOT inline const double Q_Analog() const;
502505};
503506
r26749r26750
10191022protected:
10201023    ATTR_COLD virtual void save_register()
10211024    {
1022        //netlist_queue_t                     m_queue;
1023        //netlist().save_manager(m_queue.callback(), "m_queue");
10241025        save(NAME(m_queue.callback()));
10251026        save(NAME(m_time_ps));
10261027        save(NAME(m_rem));
r26749r26750
12541255   return net().Q_Analog();
12551256}
12561257
1257//FIXME: Legacy ... must be removed
1258ATTR_HOT inline const bool netlist_analog_input_t::is_highz() const
1259{
1260   return (net().Q_Analog() == NETLIST_HIGHIMP_V);
1261}
1262
12631258// ----------------------------------------------------------------------------------------
12641259// net_dev class factory
12651260// ----------------------------------------------------------------------------------------
trunk/src/emu/netlist/nl_setup.c
r26749r26750
1515static NETLIST_START(base)
1616   NETDEV_TTL_CONST(ttlhigh, 1)
1717   NETDEV_TTL_CONST(ttllow, 0)
18   NETDEV_ANALOG_CONST(NC, NETLIST_HIGHIMP_V)
1918
2019   NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
2120   NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
trunk/src/emu/netlist/devices/nld_legacy.c
r26749r26750
3838   //update();
3939}
4040
41NETLIB_START(nicMixer8)
42{
43   static const char *sI[8] = { "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8" };
44   static const char *sR[8] = { "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8" };
45   int i;
46
47   m_low.initial(0);
48
49   for (i=0; i<8; i++)
50   {
51      register_input(sI[i], m_I[i]);
52      m_low.net().register_con(m_I[i]);
53      //m_I[i].set_output(m_low);
54      register_param(sR[i], m_R[i], 1e12);
55   }
56   register_output("Q", m_Q);
57}
58
59NETLIB_UPDATE(nicMixer8)
60{
61   int i;
62   double r = 0;
63
64   for (i=0; i<8; i++)
65   {
66      r += m_w[i] * INPANALOG(m_I[i]);
67   }
68   OUTANALOG(m_Q, r, NLTIME_IMMEDIATE);
69}
70
71NETLIB_UPDATE_PARAM(nicMixer8)
72{
73   double t = 0;
74   int i;
75
76   for (i=0; i<8; i++)
77      t += 1.0 / m_R[i].Value();
78   t = 1.0 / t;
79
80   for (i=0; i<8; i++)
81      m_w[i] = t / m_R[i].Value();
82}
83
84
85
8641NETLIB_START(nicRSFF)
8742{
8843   register_input("S", m_S);
r26749r26750
10661      OUTLOGIC(m_QQ, 1, NLTIME_FROM_NS(10));
10762   }
10863}
109
110
111NETLIB_START(nicNE555N_MSTABLE)
112{
113   register_input("TRIG", m_trigger);
114   register_input("CV", m_CV);
115
116   register_output("Q", m_Q);
117   register_param("R", m_R, 0.0);
118   register_param("C", m_C, 0.0);
119   register_param("VS", m_VS, 5.0);
120   register_param("VL", m_VL, 0.0 *5.0);
121
122   m_THRESHOLD_OUT.init_object(*this, name() + "THRESHOLD");
123   register_link_internal(m_THRESHOLD, m_THRESHOLD_OUT, netlist_input_t::STATE_INP_ACTIVE);
124
125   m_Q.initial(5.0 * 0.4);
126   m_last = false;
127
128   save(NAME(m_last));
129
130}
131
132inline double NETLIB_NAME(nicNE555N_MSTABLE)::nicNE555N_cv()
133{
134   return (m_CV.is_highz() ? 0.67 * m_VS.Value() : INPANALOG(m_CV));
135}
136
137inline double NETLIB_NAME(nicNE555N_MSTABLE)::nicNE555N_clamp(const double v, const double a, const double b)
138{
139   double ret = v;
140   if (ret >  m_VS.Value() - a)
141      ret = m_VS.Value() - a;
142   if (ret < b)
143      ret = b;
144   return ret;
145}
146
147NETLIB_UPDATE_PARAM(nicNE555N_MSTABLE)
148{
149}
150
151NETLIB_UPDATE(nicNE555N_MSTABLE)
152{
153   update_param(); // FIXME : m_CV should be on a sub device ...
154
155   double vt = nicNE555N_clamp(nicNE555N_cv(), 0.7, 1.4);
156   bool bthresh = (INPANALOG(m_THRESHOLD) > vt);
157   bool btrig = (INPANALOG(m_trigger) > nicNE555N_clamp(nicNE555N_cv() * 0.5, 0.7, 1.4));
158   bool out = m_last;
159
160   if (!btrig)
161   {
162      out = true;
163   }
164   else if (bthresh)
165   {
166      out = false;
167   }
168
169   if (!m_last && out)
170   {
171      double vl = m_VL.Value();
172      double time;
173
174      // FIXME : m_CV should be on a sub device ...
175
176      // TI datasheet states minimum pulse of 10 us
177      if (vt<vl)
178         time = 10;
179      else
180      {
181         time = - log((m_VS.Value()-vt)/(m_VS.Value()-vl)) * m_R.Value() * m_C.Value() * 1.0e6; // in us
182         if (time < 10.0)
183            time = 10.0;
184      }
185
186      OUTANALOG(m_Q, m_VS.Value() * 0.7, NLTIME_FROM_NS(100));
187      OUTANALOG(m_THRESHOLD_OUT, m_VS.Value(), NLTIME_FROM_US(time ));
188   }
189   else if (m_last && !out)
190   {
191      OUTANALOG(m_Q, 0.25, NLTIME_FROM_NS(100));
192      OUTANALOG(m_THRESHOLD_OUT, 0.0, NLTIME_FROM_NS(1));
193   }
194   m_last = out;
195}
trunk/src/emu/netlist/devices/nld_legacy.h
r26749r26750
2424      NET_CONNECT(_name, S, _S)                                                   \
2525      NET_CONNECT(_name, R, _R)
2626
27
28#define NE555N_MSTABLE(_name, _TRIG, _CV)                                           \
29      NET_REGISTER_DEV(nicNE555N_MSTABLE, _name)                                  \
30      NET_CONNECT(_name, TRIG, _TRIG)                                             \
31      NET_CONNECT(_name, CV, _CV)
32
33#define NETDEV_MIXER3(_name, _I1, _I2, _I3)                                         \
34      NET_REGISTER_DEV(nicMixer8, _name)                                          \
35      NET_CONNECT(_name, I1, _I1)                                                 \
36      NET_CONNECT(_name, I2, _I2)                                                 \
37      NET_CONNECT(_name, I3, _I3)
38
3927#define NETDEV_SWITCH2(_name, _i1, _i2)                                             \
4028      NET_REGISTER_DEV(nicMultiSwitch, _name)                                     \
4129      NET_CONNECT(_name, i1, _i1)                                                 \
r26749r26750
5341   netlist_ttl_output_t m_QQ;
5442);
5543
56NETLIB_DEVICE_WITH_PARAMS(nicMixer8,
57   netlist_analog_input_t m_I[8];
58
59   netlist_analog_output_t m_Q;
60   netlist_analog_output_t m_low;
61
62   netlist_param_double_t m_R[8];
63
64   double m_w[8];
65);
66
67NETLIB_DEVICE_WITH_PARAMS(nicNE555N_MSTABLE,
68
69   //ATTR_HOT void timer_cb(INT32 timer_id);
70
71   netlist_analog_input_t m_trigger;
72   netlist_analog_input_t m_CV;
73   netlist_analog_input_t m_THRESHOLD; /* internal */
74
75   bool m_last;
76
77   netlist_analog_output_t m_Q;
78   netlist_analog_output_t m_THRESHOLD_OUT; /* internal */
79
80   //netlist_base_timer_t *m_timer;
81   netlist_param_double_t m_R;
82   netlist_param_double_t m_C;
83   netlist_param_double_t m_VS;
84   netlist_param_double_t m_VL;
85
86   double nicNE555N_cv();
87   double nicNE555N_clamp(const double v, const double a, const double b);
88
89);
90
9144NETLIB_DEVICE_WITH_PARAMS(nicMultiSwitch,
9245   netlist_analog_input_t m_I[8];
9346
trunk/src/emu/netlist/devices/nld_74153.c
r0r26750
1/*
2 * nld_74153.c
3 *
4 */
5
6#include "nld_74153.h"
7
8NETLIB_START(nic74153)
9{
10    register_input("C0", m_C[0]);
11    register_input("C1", m_C[1]);
12    register_input("C2", m_C[2]);
13    register_input("C3", m_C[3]);
14    register_input("A", m_A);
15    register_input("B", m_B);
16    register_input("G", m_G);
17
18    register_output("AY", m_Y); //FIXME: Change netlists
19}
20
21/* FIXME: timing is not 100% accurate, Strobe and Select inputs have a
22 *        slightly longer timing.
23 *        Convert this to sub-devices at some time.
24 */
25
26NETLIB_UPDATE(nic74153)
27{
28    const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
29    if (!INPLOGIC(m_G))
30    {
31        UINT8 chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
32        UINT8 t = INPLOGIC(m_C[chan]);
33        OUTLOGIC(m_Y, t, delay[t] );
34    }
35    else
36    {
37        OUTLOGIC(m_Y, 0, delay[0]);
38    }
39}
40
41
Property changes on: trunk/src/emu/netlist/devices/nld_74153.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/netlist/devices/nld_74153.h
r0r26750
1// license:GPL-2.0+
2// copyright-holders:Couriersud
3/*
4 * nld_74153.h
5 *
6 *  DM74153: Dual 4-Line to 1-Line Data Selectors Multiplexers
7 *
8 *          +--------------+
9 *       G1 |1     ++    16| VCC
10 *        B |2           15| G2
11 *      1C3 |3           14| A
12 *      1C2 |4   74153   13| 2C3
13 *      1C1 |5           12| 2C2
14 *      1C0 |6           11| 2C1
15 *       Y1 |7           10| 2C0
16 *      GND |8            9| Y2
17 *          +--------------+
18 *
19 *
20 *          Function table
21 *
22 *          +-----+-----++----+----+----+----++----+----+
23 *          |  B  |  A  || C0 | C1 | C2 | C3 ||  G |  Y |
24 *          +=====+=====++====+====+====+====++====+====+
25 *          |  X  |  X  ||  X |  X |  X |  X ||  H |  L |
26 *          |  L  |  L  ||  L |  X |  X |  X ||  L |  L |
27 *          |  L  |  L  ||  H |  X |  X |  X ||  L |  H |
28 *          |  L  |  H  ||  X |  L |  X |  X ||  L |  L |
29 *          |  L  |  H  ||  X |  H |  X |  X ||  L |  H |
30 *          |  H  |  L  ||  X |  X |  L |  X ||  L |  L |
31 *          |  H  |  L  ||  X |  X |  H |  X ||  L |  H |
32 *          |  H  |  H  ||  X |  X |  X |  L ||  L |  L |
33 *          |  H  |  H  ||  X |  X |  X |  H ||  L |  H |
34 *          +-----+-----++----+----+----+----++----+----+
35 *
36 *  A, B : Select Inputs
37 *  C*   : Data inputs
38 *  G    : Strobe
39 *  Y    : Output
40 *
41 *  Naming conventions follow National Semiconductor datasheet
42 *
43 */
44
45#ifndef NLD_74153_H_
46#define NLD_74153_H_
47
48#include "../nl_base.h"
49
50#define TTL_74153(_name, _C0, _C1, _C2, _C3, _A, _B, _G)                            \
51        NET_REGISTER_DEV(nic74153, _name)                                           \
52        NET_CONNECT(_name, C0, _C0)                                                 \
53        NET_CONNECT(_name, C1, _C1)                                                 \
54        NET_CONNECT(_name, C2, _C2)                                                 \
55        NET_CONNECT(_name, C3, _C3)                                                 \
56        NET_CONNECT(_name, A, _A)                                                   \
57        NET_CONNECT(_name, B, _B)                                                   \
58        NET_CONNECT(_name, G, _G)
59
60NETLIB_DEVICE(nic74153,
61    netlist_ttl_input_t m_C[4];
62    netlist_ttl_input_t m_A;
63    netlist_ttl_input_t m_B;
64    netlist_ttl_input_t m_G;
65
66    netlist_ttl_output_t m_Y;
67);
68
69#endif /* NLD_74153_H_ */
Property changes on: trunk/src/emu/netlist/devices/nld_74153.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/netlist/devices/nld_twoterm.h
r26749r26750
456456   netlist_terminal_t m_OP2;
457457   netlist_terminal_t m_ON2;
458458
459   double m_mult;
460
461459   netlist_param_double_t m_RO;
462460};
463461
trunk/src/emu/netlist/devices/nld_7474.h
r26749r26750
2424 *          |  0  |  0  |  X  | X || 1 |  1  | (*)
2525 *          |  1  |  1  |  R  | 1 || 1 |  0  |
2626 *          |  1  |  1  |  R  | 0 || 0 |  1  |
27 *          |  1  |  1  |  L  | X || Q0| Q0Q |
27 *          |  1  |  1  |  0  | X || Q0| Q0Q |
2828 *          +-----+-----+-----+---++---+-----+
2929 *
3030 *  (*) his configuration is nonstable that is it will not persist
trunk/src/emu/netlist/devices/net_lib.c
r26749r26750
218218
219219
220220
221
222NETLIB_START(nic74107Asub)
223{
224   register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL);
225   register_output("Q", m_Q);
226   register_output("QQ", m_QQ);
227
228   m_Q.initial(0);
229   m_QQ.initial(1);
230
231   save(NAME(m_Q1));
232   save(NAME(m_Q2));
233   save(NAME(m_F));
234}
235
236NETLIB_START(nic74107A)
237{
238   register_sub(sub, "sub");
239
240   register_subalias("CLK", sub.m_clk);
241   register_input("J", m_J);
242   register_input("K", m_K);
243   register_input("CLRQ", m_clrQ);
244   register_subalias("Q", sub.m_Q);
245   register_subalias("QQ", sub.m_QQ);
246
247   sub.m_Q.initial(0);
248   sub.m_QQ.initial(1);
249}
250
251ATTR_HOT inline void NETLIB_NAME(nic74107Asub)::newstate(const netlist_sig_t state)
252{
253   const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) };
254#if 1
255   OUTLOGIC(m_Q, state, delay[state ^ 1]);
256   OUTLOGIC(m_QQ, state ^ 1, delay[state]);
257#else
258   if (state != Q.new_Q())
259   {
260      Q.setToNoCheck(state, delay[1-state]);
261      QQ.setToNoCheck(1-state, delay[state]);
262   }
263#endif
264}
265
266NETLIB_UPDATE(nic74107Asub)
267{
268   {
269      const netlist_sig_t t = m_Q.net().new_Q();
270      newstate((!t & m_Q1) | (t & m_Q2) | m_F);
271      if (!m_Q1)
272         m_clk.inactivate();
273   }
274}
275
276NETLIB_UPDATE(nic74107A)
277{
278   if (INPLOGIC(m_J) & INPLOGIC(m_K))
279   {
280      sub.m_Q1 = 1;
281      sub.m_Q2 = 0;
282      sub.m_F  = 0;
283   }
284   else if (!INPLOGIC(m_J) & INPLOGIC(m_K))
285   {
286      sub.m_Q1 = 0;
287      sub.m_Q2 = 0;
288      sub.m_F  = 0;
289   }
290   else if (INPLOGIC(m_J) & !INPLOGIC(m_K))
291   {
292      sub.m_Q1 = 0;
293      sub.m_Q2 = 0;
294      sub.m_F  = 1;
295   }
296   else
297   {
298      sub.m_Q1 = 0;
299      sub.m_Q2 = 1;
300      sub.m_F  = 0;
301      sub.m_clk.inactivate();
302   }
303   if (!INPLOGIC(m_clrQ))
304   {
305      sub.m_clk.inactivate();
306      sub.newstate(0);
307   }
308   else if (!sub.m_Q2)
309      sub.m_clk.activate_hl();
310   //if (!sub.m_Q2 & INPLOGIC(m_clrQ))
311   //  sub.m_clk.activate_hl();
312}
313
314NETLIB_START(nic74153)
315{
316   register_input("A1", m_I[0]);
317   register_input("A2", m_I[1]);
318   register_input("A3", m_I[2]);
319   register_input("A4", m_I[3]);
320   register_input("A", m_A);
321   register_input("B", m_B);
322   register_input("GA", m_GA);
323
324   register_output("AY", m_AY);
325}
326
327NETLIB_UPDATE(nic74153)
328{
329   const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
330   if (!INPLOGIC(m_GA))
331   {
332      UINT8 chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
333      UINT8 t = INPLOGIC(m_I[chan]);
334      OUTLOGIC(m_AY, t, delay[t] ); /* data to y only, FIXME */
335   }
336   else
337   {
338      OUTLOGIC(m_AY, 0, delay[0]);
339   }
340}
341
342
343221#define xstr(s) # s
344222#define ENTRY1(_nic, _name) register_device<_nic>( # _name, xstr(_nic) );
345223#define ENTRY(_nic, _name) ENTRY1(NETLIB_NAME(_nic), _name)
r26749r26750
379257   ENTRY(solver,               NETDEV_SOLVER)
380258   ENTRY(nicMultiSwitch,       NETDEV_SWITCH2)
381259   ENTRY(nicRSFF,              NETDEV_RSFF)
382   ENTRY(nicMixer8,            NETDEV_MIXER)
383260   ENTRY(7400,                 TTL_7400_NAND)
384261   ENTRY(7402,                 TTL_7402_NOR)
385262   ENTRY(nic7404,              TTL_7404_INVERT)
r26749r26750
400277   ENTRY(nic74153,             TTL_74153)
401278   ENTRY(9316,                 TTL_9316)
402279   ENTRY(NE555,                NETDEV_NE555)
403   ENTRY(nicNE555N_MSTABLE,    NE555N_MSTABLE)
404280}
405281
406282netlist_device_t *netlist_factory::new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const
trunk/src/emu/netlist/devices/nld_74107.c
r0r26750
1/*
2 * nld_74107.c
3 *
4 */
5
6#include "nld_74107.h"
7
8NETLIB_START(nic74107Asub)
9{
10    register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL);
11    register_output("Q", m_Q);
12    register_output("QQ", m_QQ);
13
14    m_Q.initial(0);
15    m_QQ.initial(1);
16
17    m_Q1 = 0;
18    m_Q2 = 0;
19    m_F = 0;
20
21    save(NAME(m_Q1));
22    save(NAME(m_Q2));
23    save(NAME(m_F));
24}
25
26NETLIB_START(nic74107A)
27{
28    register_sub(sub, "sub");
29
30    register_subalias("CLK", sub.m_clk);
31    register_input("J", m_J);
32    register_input("K", m_K);
33    register_input("CLRQ", m_clrQ);
34    register_subalias("Q", sub.m_Q);
35    register_subalias("QQ", sub.m_QQ);
36
37}
38
39ATTR_HOT inline void NETLIB_NAME(nic74107Asub)::newstate(const netlist_sig_t state)
40{
41    const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) };
42
43    OUTLOGIC(m_Q, state, delay[state ^ 1]);
44    OUTLOGIC(m_QQ, state ^ 1, delay[state]);
45}
46
47NETLIB_UPDATE(nic74107Asub)
48{
49    const netlist_sig_t t = m_Q.net().Q();
50    newstate((!t & m_Q1) | (t & m_Q2) | m_F);
51    if (!m_Q1)
52        m_clk.inactivate();
53}
54
55NETLIB_UPDATE(nic74107A)
56{
57    const UINT8 JK = (INPLOGIC(m_J) << 1) | INPLOGIC(m_K);
58
59    switch (JK)
60    {
61        case 0:
62            sub.m_Q1 = 0;
63            sub.m_Q2 = 1;
64            sub.m_F  = 0;
65            sub.m_clk.inactivate();
66            break;
67        case 1:             // (!INPLOGIC(m_J) & INPLOGIC(m_K))
68            sub.m_Q1 = 0;
69            sub.m_Q2 = 0;
70            sub.m_F  = 0;
71            break;
72        case 2:             // (INPLOGIC(m_J) & !INPLOGIC(m_K))
73            sub.m_Q1 = 0;
74            sub.m_Q2 = 0;
75            sub.m_F  = 1;
76            break;
77        case 3:             // (INPLOGIC(m_J) & INPLOGIC(m_K))
78            sub.m_Q1 = 1;
79            sub.m_Q2 = 0;
80            sub.m_F  = 0;
81            break;
82        default:
83            break;
84    }
85
86    if (!INPLOGIC(m_clrQ))
87    {
88        sub.m_clk.inactivate();
89        sub.newstate(0);
90    }
91    else if (!sub.m_Q2)
92        sub.m_clk.activate_hl();
93}
Property changes on: trunk/src/emu/netlist/devices/nld_74107.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/netlist/devices/net_lib.h
r26749r26750
6868#include "nld_7486.h"
6969#include "nld_7490.h"
7070#include "nld_7493.h"
71#include "nld_74107.h"
72#include "nld_74153.h"
7173#include "nld_9316.h"
7274
7375#include "nld_ne555.h"
r26749r26750
99101      NET_CONNECT(_name, BIQ, _BIQ)                                               \
100102      NET_CONNECT(_name, RBIQ, _RBIQ)
101103
102#define TTL_74107A(_name, _CLK, _J, _K, _CLRQ)                                      \
103      NET_REGISTER_DEV(nic74107A, _name)                                          \
104      NET_CONNECT(_name, CLK, _CLK)                                               \
105      NET_CONNECT(_name, J,  _J)                                                  \
106      NET_CONNECT(_name, K,  _K)                                                  \
107      NET_CONNECT(_name, CLRQ,  _CLRQ)
108104
109#define TTL_74107(_name, _CLK, _J, _K, _CLRQ)                                       \
110      TTL_74107A(_name, _CLK, _J, _K, _CLRQ)
111105
112#define TTL_74153(_name, _A1, _A2, _A3, _A4, _A, _B, _GA)                           \
113      NET_REGISTER_DEV(nic74153, _name)                                           \
114      NET_CONNECT(_name, A1, _A1)                                                 \
115      NET_CONNECT(_name, A2, _A2)                                                 \
116      NET_CONNECT(_name, A3, _A3)                                                 \
117      NET_CONNECT(_name, A4, _A4)                                                 \
118      NET_CONNECT(_name, A, _A)                                                   \
119      NET_CONNECT(_name, B, _B)                                                   \
120      NET_CONNECT(_name, GA, _GA)
121
122106// ----------------------------------------------------------------------------------------
123107// Standard devices ...
124108// ----------------------------------------------------------------------------------------
r26749r26750
131115   netlist_ttl_output_t m_Q;
132116);
133117
134/* 74107 does latch data during high !
135 * For modelling purposes, we assume 74107 and 74107A are the same
136 */
137118
138NETLIB_SUBDEVICE(nic74107Asub,
139   netlist_ttl_input_t m_clk;
140
141   netlist_ttl_output_t m_Q;
142   netlist_ttl_output_t m_QQ;
143
144   netlist_sig_t m_Q1;
145   netlist_sig_t m_Q2;
146   netlist_sig_t m_F;
147
148   ATTR_HOT void newstate(const netlist_sig_t state);
149
150);
151
152NETLIB_DEVICE(nic74107A,
153   NETLIB_NAME(nic74107Asub) sub;
154
155   netlist_ttl_input_t m_J;
156   netlist_ttl_input_t m_K;
157   netlist_ttl_input_t m_clrQ;
158
159);
160
161class NETLIB_NAME(nic74107) : public NETLIB_NAME(nic74107A)
162{
163public:
164   NETLIB_NAME(nic74107) ()
165   :   NETLIB_NAME(nic74107A) () {}
166
167};
168
169
170/* ripple-carry counter on low-high clock transition */
171
172
173
174/* one half of a nic74153 */
175
176NETLIB_DEVICE(nic74153,
177   netlist_ttl_input_t m_I[4];
178   netlist_ttl_input_t m_A;
179   netlist_ttl_input_t m_B;
180   netlist_ttl_input_t m_GA;
181
182   netlist_ttl_output_t m_AY;
183);
184
185119NETLIB_SUBDEVICE(nic7448_sub,
186120   ATTR_HOT void update_outputs(UINT8 v);
187121   static const UINT8 tab7448[16][7];
trunk/src/emu/netlist/devices/nld_74107.h
r0r26750
1// license:GPL-2.0+
2// copyright-holders:Couriersud
3/*
4 * nld_74107.h
5 *
6 *  DM74107: DUAL J-K FLIP-FLOPS WITH CLEAR
7 *
8 *          +--------------+
9 *       1J |1     ++    14| VCC
10 *      1QQ |2           13| 1CLRQ
11 *       1Q |3           12| 1CLK
12 *       1K |4    74107  11| 2K
13 *       2Q |5           10| 2CLRQ
14 *      2QQ |6            9| 2CLK
15 *      GND |7            8| 2J
16 *          +--------------+
17 *
18 *
19 *          Function table 107
20 *
21 *          +-----+-----+-----+---++---+-----+
22 *          | CLRQ| CLK |  J  | K || Q | QQ  |
23 *          +=====+=====+=====+===++===+=====+
24 *          |  0  |  X  |  X  | X || 0 |  1  |
25 *          |  1  |  *  |  0  | 0 || Q0| Q0Q |
26 *          |  1  |  *  |  1  | 0 || 1 |  0  |
27 *          |  1  |  *  |  0  | 1 || 0 |  1  |
28 *          |  1  |  *  |  1  | 1 || TOGGLE  |
29 *          +-----+-----+-----+---++---+-----+
30 *                _
31 *          * = _| |_
32 *
33 *          This is positive triggered, J and K
34 *          are latched during clock high and
35 *          transferred when CLK falls.
36 *
37 *          Function table 107A
38 *
39 *          +-----+-----+-----+---++---+-----+
40 *          | CLRQ| CLK |  J  | K || Q | QQ  |
41 *          +=====+=====+=====+===++===+=====+
42 *          |  0  |  X  |  X  | X || 0 |  1  |
43 *          |  1  |  F  |  0  | 0 || Q0| Q0Q |
44 *          |  1  |  F  |  1  | 0 || 1 |  0  |
45 *          |  1  |  F  |  0  | 1 || 0 |  1  |
46 *          |  1  |  F  |  1  | 1 || TOGGLE  |
47 *          |  1  |  1  |  X  | X || Q0| Q0Q |
48 *          +-----+-----+-----+---++---+-----+
49 *
50 *          THe 107A is negative triggered.
51 *
52 *  Naming conventions follow Texas instruments datasheet
53 *
54 *  FIXME: Currently, only the 107A is implemented.
55 *         The 107 uses the same model.
56 *
57 */
58
59#ifndef NLD_74107_H_
60#define NLD_74107_H_
61
62#include "../nl_base.h"
63
64#define TTL_74107A(_name, _CLK, _J, _K, _CLRQ)                                      \
65        NET_REGISTER_DEV(nic74107A, _name)                                          \
66        NET_CONNECT(_name, CLK, _CLK)                                               \
67        NET_CONNECT(_name, J,  _J)                                                  \
68        NET_CONNECT(_name, K,  _K)                                                  \
69        NET_CONNECT(_name, CLRQ,  _CLRQ)
70
71#define TTL_74107(_name, _CLK, _J, _K, _CLRQ)                                       \
72        TTL_74107A(_name, _CLK, _J, _K, _CLRQ)
73
74NETLIB_SUBDEVICE(nic74107Asub,
75    netlist_ttl_input_t m_clk;
76
77    netlist_ttl_output_t m_Q;
78    netlist_ttl_output_t m_QQ;
79
80    netlist_sig_t m_Q1;
81    netlist_sig_t m_Q2;
82    netlist_sig_t m_F;
83
84    ATTR_HOT void newstate(const netlist_sig_t state);
85
86);
87
88NETLIB_DEVICE(nic74107A,
89    NETLIB_NAME(nic74107Asub) sub;
90
91    netlist_ttl_input_t m_J;
92    netlist_ttl_input_t m_K;
93    netlist_ttl_input_t m_clrQ;
94
95);
96
97class NETLIB_NAME(nic74107) : public NETLIB_NAME(nic74107A)
98{
99public:
100    NETLIB_NAME(nic74107) ()
101    :   NETLIB_NAME(nic74107A) () {}
102
103};
104
105
106#endif /* NLD_74107_H_ */
Property changes on: trunk/src/emu/netlist/devices/nld_74107.h
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/netlist/nl_config.h
r26749r26750
3737#define NETLIST_CLOCK               (NETLIST_INTERNAL_RES / NETLIST_DIV)
3838
3939//FIXME: LEGACY
40#define NETLIST_HIGHIMP_V   (1.23456e20)        /* some voltage we should never see */
40//#define NETLIST_HIGHIMP_V   (1.23456e20)        /* some voltage we should never see */
4141
4242#define NETLIST_GMIN    (1e-9)
4343
trunk/src/emu/netlist/nl_base.c
r26749r26750
4545
4646void netlist_queue_t::on_post_load()
4747{
48    printf("on_post_load\n");
4948    this->clear();
50    printf("qsize %d\n", m_qsize);
5149    NL_VERBOSE_OUT(("current time %f qsize %d\n", m_netlist->time().as_double(), qsize));
5250    for (int i = 0; i < m_qsize; i++ )
5351    {
5452        netlist_net_t *n = m_netlist.find_net(&(m_name[i][0]));
5553        NL_VERBOSE_OUT(("Got %s ==> %p\n", qtemp[i].m_name, n));
56        printf("Got %s ==> %p\n", m_name[i], n);
5754        NL_VERBOSE_OUT(("schedule time %f (%f)\n", n->time().as_double(), qtemp[i].m_time.as_double()));
58        printf("schedule time %f (%f)\n", n->time().as_double(), netlist_time::from_raw(m_times[i]).as_double());
5955        this->push(netlist_queue_t::entry_t(netlist_time::from_raw(m_times[i]), *n));
6056    }
6157}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team