Previous 199869 Revisions Next

r26061 Friday 8th November, 2013 at 20:24:47 UTC by Couriersud
Netlist: remove hardcoded maximum net size. Separated and documented a couple more devices out of net_lib.c
[src/emu/machine]netlist.h
[src/emu/netlist]nl_base.c nl_base.h nl_config.h
[src/emu/netlist/devices]net_lib.c net_lib.h nld_7420.h nld_7425.h* nld_7427.h* nld_signal.h

trunk/src/emu/machine/netlist.h
r26060r26061
9595// ======================> netlist_mame_device
9696
9797class netlist_mame_device : public device_t,
98                  public device_execute_interface
98                      public device_execute_interface
99                      //, public device_memory_interface
99100{
100101public:
101102
trunk/src/emu/netlist/nl_base.h
r26060r26061
164164
165165   ATTR_COLD net_input_t(const int atype)
166166      : net_terminal_t(atype)
167      , m_low_thresh_V(0)
168      , m_high_thresh_V(0)
167        , m_low_thresh_V(0)
168        , m_high_thresh_V(0)
169#if USE_LINKED_LIST
170       , m_next(NULL)
171#endif
169172      , m_state(INP_STATE_ACTIVE)
170173      , m_output(NULL)
171174   {}
r26060r26061
185188   double m_low_thresh_V;
186189   double m_high_thresh_V;
187190
191#if USE_LINKED_LIST
192   net_input_t *m_next;
193#endif
194
188195private:
189196   net_input_state m_state;
190197   net_output_t * RESTRICT m_output;
r26060r26061
248255{
249256public:
250257
251    typedef struct {
258    // FIXME: union does not work
259    typedef struct
260    {
261        netlist_sig_t Q;
252262        double        Analog;
253        netlist_sig_t Q;
254263    } hybrid_t;
255264
256265   net_output_t(int atype);
r26060r26061
300309   hybrid_t m_cur;
301310   hybrid_t m_new;
302311
312#if USE_LINKED_LIST
313   net_input_t *m_head;
314#endif
303315   UINT32 m_num_cons;
304316
305317private:
r26060r26061
311323
312324   UINT32 m_in_queue;    /* 0: not in queue, 1: in queue, 2: last was taken */
313325
326#if !USE_LINKED_LIST
314327   net_input_t *  RESTRICT m_cons[OUTPUT_MAX_CONNECTIONS];
328#endif
315329};
316330
317331
r26060r26061
333347   {
334348      if (EXPECTED(newQ != m_new.Q))
335349      {
336         m_new.Q = newQ;
350           m_new.Q = newQ;
337351         if (m_num_cons)
338352            push_to_queue(delay);
339353      }
r26060r26061
352366
353367   ttl_output_t()
354368      : logic_output_t()
355   { set_levels(0.3, 3.4); }
369   {
370       set_levels(0.3, 3.4);
371   }
356372
357373};
358374
r26060r26061
361377public:
362378
363379   analog_output_t()
364      : net_output_t(OUTPUT | SIGNAL_ANALOG) { }
380      : net_output_t(OUTPUT | SIGNAL_ANALOG)
381    {
382        m_cur.Analog = 0.0;
383        m_new.Analog = 0.0;
384    }
365385
366    ATTR_COLD void initial(const double val) { m_cur.Analog = val; m_new.Analog = val; }
386    ATTR_COLD void initial(const double val)
387    {
388        m_cur.Analog = val;
389        m_new.Analog = val;
390    }
367391
368392   ATTR_HOT inline void set_Q(const double newQ, const netlist_time &delay)
369393   {
trunk/src/emu/netlist/devices/nld_7425.h
r0r26061
1// license:GPL-2.0+
2// copyright-holders:Couriersud
3/*
4 * nld_7425.h
5 *
6 *  DM7425: Dual 4-Input NOR Gates
7 *
8 *          +--------------+
9 *       A1 |1     ++    14| VCC
10 *       B1 |2           13| D2
11 *       X1 |3           12| C2
12 *       C1 |4    7425   11| X2
13 *       D1 |5           10| B2
14 *       Y! |6            9| A2
15 *      GND |7            8| Y2
16 *          +--------------+
17 *                  _______
18 *              Y = A+B+C+D
19 *          +---+---+---+---+---++---+
20 *          | A | B | C | D | X || Y |
21 *          +===+===+===+===+===++===+
22 *          | X | X | X | X | 0 || Z |
23 *          | 0 | 0 | 0 | 0 | 1 || 1 |
24 *          | X | X | X | 1 | 1 || 0 |
25 *          | X | X | 1 | X | 1 || 0 |
26 *          | X | 1 | X | X | 1 || 0 |
27 *          | 1 | X | X | X | 1 || 0 |
28 *          +---+---+---+---+---++---+
29 *
30 *  TODO: The "X" input and high impedance output are currently not simulated.
31 *
32 *  Naming conventions follow National Semiconductor datasheet
33 *
34 */
35
36
37#include "nld_signal.h"
38
39#ifndef NLD_7425_H_
40#define NLD_7425_H_
41
42#define TTL_7425_NOR(_name, _I1, _I2, _I3, _I4)                                     \
43        NET_REGISTER_DEV(7425, _name)                                               \
44        NET_CONNECT(_name, A, _I1)                                                  \
45        NET_CONNECT(_name, B, _I2)                                                  \
46        NET_CONNECT(_name, C, _I3)                                                  \
47        NET_CONNECT(_name, D, _I4)
48
49
50NETLIB_SIGNAL(7425, 4, 1, 0);
51
52#endif /* NLD_7425_H_ */
Property changes on: trunk/src/emu/netlist/devices/nld_7425.h
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/emu/netlist/devices/nld_7427.h
r0r26061
1// license:GPL-2.0+
2// copyright-holders:Couriersud
3/*
4 * nld_7427.h
5 *
6 *  DM7427: Triple 3-Input NOR Gates
7 *
8 *          +--------------+
9 *       A1 |1     ++    14| VCC
10 *       B1 |2           13| C1
11 *       A2 |3           12| Y1
12 *       B2 |4    7427   11| C3
13 *       C2 |5           10| B3
14 *       Y2 |6            9| A3
15 *      GND |7            8| Y3
16 *          +--------------+
17 *                  _____
18 *              Y = A+B+C
19 *          +---+---+---++---+
20 *          | A | B | C || Y |
21 *          +===+===+===++===+
22 *          | X | X | 1 || 0 |
23 *          | X | 1 | X || 0 |
24 *          | 1 | X | X || 0 |
25 *          | 0 | 0 | 0 || 1 |
26 *          +---+---+---++---+
27 *
28 *  Naming conventions follow National Semiconductor datasheet
29 *
30 */
31
32
33#include "nld_signal.h"
34
35#ifndef NLD_7427_H_
36#define NLD_7427_H_
37
38#define TTL_7427_NOR(_name, _I1, _I2, _I3)                                          \
39        NET_REGISTER_DEV(7427, _name)                                               \
40        NET_CONNECT(_name, A, _I1)                                                  \
41        NET_CONNECT(_name, B, _I2)                                                  \
42        NET_CONNECT(_name, C, _I3)
43
44NETLIB_SIGNAL(7427, 3, 1, 0);
45
46#endif /* NLD_7427_H_ */
Property changes on: trunk/src/emu/netlist/devices/nld_7427.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/netlist/devices/net_lib.c
r26060r26061
986986   ENTRY(7402,                 TTL_7402_NOR)
987987   ENTRY(nic7404,              TTL_7404_INVERT)
988988   ENTRY(7410,                 TTL_7410_NAND)
989   ENTRY(nic7420,              TTL_7420_NAND)
990   ENTRY(nic7425,              TTL_7425_NOR)
991   ENTRY(nic7427,              TTL_7427_NOR)
989   ENTRY(7420,                 TTL_7420_NAND)
990   ENTRY(7425,                 TTL_7425_NOR)
991   ENTRY(7427,                 TTL_7427_NOR)
992992   ENTRY(nic7430,              TTL_7430_NAND)
993993   ENTRY(nic7450,              TTL_7450_ANDORINVERT)
994994   ENTRY(nic7486,              TTL_7486_XOR)
trunk/src/emu/netlist/devices/nld_7420.h
r26060r26061
3737#define NLD_7420_H_
3838
3939#define TTL_7420_NAND(_name, _I1, _I2, _I3, _I4)                                    \
40        NET_REGISTER_DEV(nic7420, _name)                                            \
40        NET_REGISTER_DEV(7420, _name)                                               \
4141        NET_CONNECT(_name, A, _I1)                                                  \
4242        NET_CONNECT(_name, B, _I2)                                                  \
4343        NET_CONNECT(_name, C, _I3)                                                  \
4444        NET_CONNECT(_name, D, _I4)
4545
4646
47NETLIB_SIGNAL(nic7420, 4, 0, 0);
47NETLIB_SIGNAL(7420, 4, 0, 0);
4848
4949#endif /* NLD_7420_H_ */
trunk/src/emu/netlist/devices/nld_signal.h
r26060r26061
191191
192192   ATTR_HOT ATTR_ALIGN void update()
193193   {
194      const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
194      static const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
195195
196196      int res = _invert ^ 1 ^_check;
197197      m_i[0].activate();
trunk/src/emu/netlist/devices/net_lib.h
r26060r26061
5858#include "nld_7402.h"
5959#include "nld_7410.h"
6060#include "nld_7420.h"
61#include "nld_7425.h"
62#include "nld_7427.h"
6163
6264// this is a bad hack
6365#define USE_OLD7493 (0)
r26060r26061
105107      NET_REGISTER_DEV(nic7404, _name)                                            \
106108      NET_CONNECT(_name, I1, _I1)
107109
108#define TTL_7425_NOR(_name, _I1, _I2, _I3, _I4)                                     \
109      NET_REGISTER_DEV(nic7425, _name)                                            \
110      NET_CONNECT(_name, A, _I1)                                                  \
111      NET_CONNECT(_name, B, _I2)                                                  \
112      NET_CONNECT(_name, C, _I3)                                                  \
113      NET_CONNECT(_name, D, _I4)
114110
115#define TTL_7427_NOR(_name, _I1, _I2, _I3)                                          \
116      NET_REGISTER_DEV(nic7427, _name)                                            \
117      NET_CONNECT(_name, A, _I1)                                                  \
118      NET_CONNECT(_name, B, _I2)                                                  \
119      NET_CONNECT(_name, C, _I3)
120111
121112#define TTL_7430_NAND(_name, _I1, _I2, _I3, _I4, _I5, _I6, _I7, _I8)                \
122113      NET_REGISTER_DEV(nic7430, _name)                                            \
r26060r26061
312303   net_param_t m_VL;
313304);
314305
315NETLIB_SIGNAL(nic7425, 4, 1, 0);
316NETLIB_SIGNAL(nic7427, 3, 1, 0);
317306NETLIB_SIGNAL(nic7430, 8, 0, 0);
318307
319308NETLIB_DEVICE(nic7404,
trunk/src/emu/netlist/nl_base.c
r26060r26061
289289   //, m_new_Q(0)
290290   //, m_Q_analog(0.0)
291291   //, m_new_Q_analog(0.0)
292   , m_num_cons(0)
292#if USE_LINKED_LIST
293    , m_head(NULL)
294#endif
295    , m_num_cons(0)
293296   , m_time(netlist_time::zero)
294297   , m_active(0)
295298   , m_in_queue(2)
r26060r26061
322325
323326   const UINT32 mask = masks[ (m_last.Q  << 1) | m_cur.Q ];
324327
328#if USE_LINKED_LIST
329    net_input_t *p = m_head;
330    switch (m_num_cons)
331    {
332    case 2:
333        update_dev(p, mask);
334        p = p->m_next;
335    case 1:
336        update_dev(p, mask);
337        break;
338    default:
339        do
340        {
341            update_dev(p, mask);
342            p = p->m_next;
343        } while (p != NULL);
344        break;
345    }
346
347#else
325348   switch (m_num_cons)
326349   {
327350   case 2:
r26060r26061
336359      }
337360      break;
338361   }
339
362#endif
340363   m_last = m_cur;
341364}
342365
343366ATTR_COLD void net_output_t::register_con(net_input_t &input)
344367{
345   int i;
368#if USE_LINKED_LIST
369    if (m_head == NULL)
370        m_head = &input;
371    else
372    {
373        input.m_next = m_head;
374        m_head = &input;
375    }
376#else
346377   if (m_num_cons >= OUTPUT_MAX_CONNECTIONS)
347378      fatalerror("Connections exceeded for %s\n", netdev()->name().cstr());
348379
380#if 0
381    int i;
349382   /* keep similar devices together */
350383   for (i = 0; i < m_num_cons; i++)
351384      if (m_cons[i]->netdev() == input.netdev())
r26060r26061
355388      m_cons[j] = m_cons[j - 1];
356389
357390   m_cons[i] = &input;
358   m_num_cons++;
359   if (input.state() != net_input_t::INP_STATE_PASSIVE)
360      m_active++;
391#else
392    m_cons[m_num_cons] = &input;
393#endif
394#endif
395    m_num_cons++;
396    if (input.state() != net_input_t::INP_STATE_PASSIVE)
397        m_active++;
361398}
362399
363400// ----------------------------------------------------------------------------------------
trunk/src/emu/netlist/nl_config.h
r26060r26061
1616//  SETUP
1717//============================================================
1818
19#define USE_LINKED_LIST         (1)
20
1921#define USE_DELEGATES           (0)
2022/*
2123 * The next options needs -Wno-pmf-conversions to compile and gcc

Previous 199869 Revisions Next


© 1997-2024 The MAME Team