summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist/devices
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist/devices')
-rw-r--r--src/emu/netlist/devices/net_lib.c566
-rw-r--r--src/emu/netlist/devices/net_lib.h2
-rw-r--r--src/emu/netlist/devices/nld_7400.h40
-rw-r--r--src/emu/netlist/devices/nld_7402.h6
-rw-r--r--src/emu/netlist/devices/nld_7404.c12
-rw-r--r--src/emu/netlist/devices/nld_7404.h8
-rw-r--r--src/emu/netlist/devices/nld_7410.h8
-rw-r--r--src/emu/netlist/devices/nld_7420.h10
-rw-r--r--src/emu/netlist/devices/nld_7425.h10
-rw-r--r--src/emu/netlist/devices/nld_7427.h8
-rw-r--r--src/emu/netlist/devices/nld_7430.h18
-rw-r--r--src/emu/netlist/devices/nld_7474.c76
-rw-r--r--src/emu/netlist/devices/nld_7474.h28
-rw-r--r--src/emu/netlist/devices/nld_7483.c67
-rw-r--r--src/emu/netlist/devices/nld_7483.h58
-rw-r--r--src/emu/netlist/devices/nld_7486.c13
-rw-r--r--src/emu/netlist/devices/nld_7486.h12
-rw-r--r--src/emu/netlist/devices/nld_7490.c62
-rw-r--r--src/emu/netlist/devices/nld_7490.h28
-rw-r--r--src/emu/netlist/devices/nld_7493.c74
-rw-r--r--src/emu/netlist/devices/nld_7493.h28
-rw-r--r--src/emu/netlist/devices/nld_9316.c227
-rw-r--r--src/emu/netlist/devices/nld_9316.h60
-rw-r--r--src/emu/netlist/devices/nld_legacy.c246
-rw-r--r--src/emu/netlist/devices/nld_legacy.h82
-rw-r--r--src/emu/netlist/devices/nld_log.c26
-rw-r--r--src/emu/netlist/devices/nld_log.h26
-rw-r--r--src/emu/netlist/devices/nld_ne555.c105
-rw-r--r--src/emu/netlist/devices/nld_ne555.h23
-rw-r--r--src/emu/netlist/devices/nld_signal.h4
-rw-r--r--src/emu/netlist/devices/nld_solver.c503
-rw-r--r--src/emu/netlist/devices/nld_solver.h74
-rw-r--r--src/emu/netlist/devices/nld_system.c30
-rw-r--r--src/emu/netlist/devices/nld_system.h22
-rw-r--r--src/emu/netlist/devices/nld_twoterm.c274
-rw-r--r--src/emu/netlist/devices/nld_twoterm.h376
36 files changed, 1600 insertions, 1612 deletions
diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c
index 81a375bfd27..fdb376d6340 100644
--- a/src/emu/netlist/devices/net_lib.c
+++ b/src/emu/netlist/devices/net_lib.c
@@ -53,164 +53,164 @@
NETLIB_START(nic7448)
{
- register_sub(sub, "sub");
-
- register_subalias("A0", sub.m_A0);
- register_subalias("A1", sub.m_A1);
- register_subalias("A2", sub.m_A2);
- register_subalias("A3", sub.m_A3);
- register_input("LTQ", m_LTQ);
- register_input("BIQ", m_BIQ);
- register_subalias("RBIQ",sub.m_RBIQ);
-
- register_subalias("a", sub.m_a);
- register_subalias("b", sub.m_b);
- register_subalias("c", sub.m_c);
- register_subalias("d", sub.m_d);
- register_subalias("e", sub.m_e);
- register_subalias("f", sub.m_f);
- register_subalias("g", sub.m_g);
+ register_sub(sub, "sub");
+
+ register_subalias("A0", sub.m_A0);
+ register_subalias("A1", sub.m_A1);
+ register_subalias("A2", sub.m_A2);
+ register_subalias("A3", sub.m_A3);
+ register_input("LTQ", m_LTQ);
+ register_input("BIQ", m_BIQ);
+ register_subalias("RBIQ",sub.m_RBIQ);
+
+ register_subalias("a", sub.m_a);
+ register_subalias("b", sub.m_b);
+ register_subalias("c", sub.m_c);
+ register_subalias("d", sub.m_d);
+ register_subalias("e", sub.m_e);
+ register_subalias("f", sub.m_f);
+ register_subalias("g", sub.m_g);
}
NETLIB_UPDATE(nic7448)
{
- if (INPLOGIC(m_BIQ) && !INPLOGIC(m_LTQ))
- {
- sub.update_outputs(8);
- }
- else if (!INPLOGIC(m_BIQ))
- {
- sub.update_outputs(15);
- }
-
- if (!INPLOGIC(m_BIQ) || (INPLOGIC(m_BIQ) && !INPLOGIC(m_LTQ)))
- {
- sub.m_A0.inactivate();
- sub.m_A1.inactivate();
- sub.m_A2.inactivate();
- sub.m_A3.inactivate();
- sub.m_RBIQ.inactivate();
- } else {
- sub.m_RBIQ.activate();
- sub.m_A3.activate();
- sub.m_A2.activate();
- sub.m_A1.activate();
- sub.m_A0.activate();
- sub.update();
- }
+ if (INPLOGIC(m_BIQ) && !INPLOGIC(m_LTQ))
+ {
+ sub.update_outputs(8);
+ }
+ else if (!INPLOGIC(m_BIQ))
+ {
+ sub.update_outputs(15);
+ }
+
+ if (!INPLOGIC(m_BIQ) || (INPLOGIC(m_BIQ) && !INPLOGIC(m_LTQ)))
+ {
+ sub.m_A0.inactivate();
+ sub.m_A1.inactivate();
+ sub.m_A2.inactivate();
+ sub.m_A3.inactivate();
+ sub.m_RBIQ.inactivate();
+ } else {
+ sub.m_RBIQ.activate();
+ sub.m_A3.activate();
+ sub.m_A2.activate();
+ sub.m_A1.activate();
+ sub.m_A0.activate();
+ sub.update();
+ }
}
NETLIB_START(nic7448_sub)
{
- m_state = 0;
-
- register_input("A0", m_A0);
- register_input("A1", m_A1);
- register_input("A2", m_A2);
- register_input("A3", m_A3);
- register_input("RBIQ", m_RBIQ);
-
- register_output("a", m_a);
- register_output("b", m_b);
- register_output("c", m_c);
- register_output("d", m_d);
- register_output("e", m_e);
- register_output("f", m_f);
- register_output("g", m_g);
-
- save(NAME(m_state));
+ m_state = 0;
+
+ register_input("A0", m_A0);
+ register_input("A1", m_A1);
+ register_input("A2", m_A2);
+ register_input("A3", m_A3);
+ register_input("RBIQ", m_RBIQ);
+
+ register_output("a", m_a);
+ register_output("b", m_b);
+ register_output("c", m_c);
+ register_output("d", m_d);
+ register_output("e", m_e);
+ register_output("f", m_f);
+ register_output("g", m_g);
+
+ save(NAME(m_state));
}
NETLIB_UPDATE(nic7448_sub)
{
- UINT8 v;
+ UINT8 v;
- v = (INPLOGIC(m_A0) << 0) | (INPLOGIC(m_A1) << 1) | (INPLOGIC(m_A2) << 2) | (INPLOGIC(m_A3) << 3);
- if ((!INPLOGIC(m_RBIQ) && (v==0)))
- v = 15;
- update_outputs(v);
+ v = (INPLOGIC(m_A0) << 0) | (INPLOGIC(m_A1) << 1) | (INPLOGIC(m_A2) << 2) | (INPLOGIC(m_A3) << 3);
+ if ((!INPLOGIC(m_RBIQ) && (v==0)))
+ v = 15;
+ update_outputs(v);
}
NETLIB_FUNC_VOID(nic7448_sub, update_outputs, (UINT8 v))
{
- assert(v<16);
- if (v != m_state)
- {
- OUTLOGIC(m_a, tab7448[v][0], NLTIME_FROM_NS(100));
- OUTLOGIC(m_b, tab7448[v][1], NLTIME_FROM_NS(100));
- OUTLOGIC(m_c, tab7448[v][2], NLTIME_FROM_NS(100));
- OUTLOGIC(m_d, tab7448[v][3], NLTIME_FROM_NS(100));
- OUTLOGIC(m_e, tab7448[v][4], NLTIME_FROM_NS(100));
- OUTLOGIC(m_f, tab7448[v][5], NLTIME_FROM_NS(100));
- OUTLOGIC(m_g, tab7448[v][6], NLTIME_FROM_NS(100));
- m_state = v;
- }
+ assert(v<16);
+ if (v != m_state)
+ {
+ OUTLOGIC(m_a, tab7448[v][0], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_b, tab7448[v][1], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_c, tab7448[v][2], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_d, tab7448[v][3], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_e, tab7448[v][4], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_f, tab7448[v][5], NLTIME_FROM_NS(100));
+ OUTLOGIC(m_g, tab7448[v][6], NLTIME_FROM_NS(100));
+ m_state = v;
+ }
}
const UINT8 NETLIB_NAME(nic7448_sub)::tab7448[16][7] =
{
- { 1, 1, 1, 1, 1, 1, 0 }, /* 00 - not blanked ! */
- { 0, 1, 1, 0, 0, 0, 0 }, /* 01 */
- { 1, 1, 0, 1, 1, 0, 1 }, /* 02 */
- { 1, 1, 1, 1, 0, 0, 1 }, /* 03 */
- { 0, 1, 1, 0, 0, 1, 1 }, /* 04 */
- { 1, 0, 1, 1, 0, 1, 1 }, /* 05 */
- { 0, 0, 1, 1, 1, 1, 1 }, /* 06 */
- { 1, 1, 1, 0, 0, 0, 0 }, /* 07 */
- { 1, 1, 1, 1, 1, 1, 1 }, /* 08 */
- { 1, 1, 1, 0, 0, 1, 1 }, /* 09 */
- { 0, 0, 0, 1, 1, 0, 1 }, /* 10 */
- { 0, 0, 1, 1, 0, 0, 1 }, /* 11 */
- { 0, 1, 0, 0, 0, 1, 1 }, /* 12 */
- { 1, 0, 0, 1, 0, 1, 1 }, /* 13 */
- { 0, 0, 0, 1, 1, 1, 1 }, /* 14 */
- { 0, 0, 0, 0, 0, 0, 0 }, /* 15 */
+ { 1, 1, 1, 1, 1, 1, 0 }, /* 00 - not blanked ! */
+ { 0, 1, 1, 0, 0, 0, 0 }, /* 01 */
+ { 1, 1, 0, 1, 1, 0, 1 }, /* 02 */
+ { 1, 1, 1, 1, 0, 0, 1 }, /* 03 */
+ { 0, 1, 1, 0, 0, 1, 1 }, /* 04 */
+ { 1, 0, 1, 1, 0, 1, 1 }, /* 05 */
+ { 0, 0, 1, 1, 1, 1, 1 }, /* 06 */
+ { 1, 1, 1, 0, 0, 0, 0 }, /* 07 */
+ { 1, 1, 1, 1, 1, 1, 1 }, /* 08 */
+ { 1, 1, 1, 0, 0, 1, 1 }, /* 09 */
+ { 0, 0, 0, 1, 1, 0, 1 }, /* 10 */
+ { 0, 0, 1, 1, 0, 0, 1 }, /* 11 */
+ { 0, 1, 0, 0, 0, 1, 1 }, /* 12 */
+ { 1, 0, 0, 1, 0, 1, 1 }, /* 13 */
+ { 0, 0, 0, 1, 1, 1, 1 }, /* 14 */
+ { 0, 0, 0, 0, 0, 0, 0 }, /* 15 */
};
NETLIB_START(nic7450)
{
- register_input("I1", m_I0);
- register_input("I2", m_I1);
- register_input("I3", m_I2);
- register_input("I4", m_I3);
- register_output("Q", m_Q);
+ register_input("I1", m_I0);
+ register_input("I2", m_I1);
+ register_input("I3", m_I2);
+ register_input("I4", m_I3);
+ register_output("Q", m_Q);
}
NETLIB_UPDATE(nic7450)
{
- m_I0.activate();
- m_I1.activate();
- m_I2.activate();
- m_I3.activate();
- UINT8 t1 = INPLOGIC(m_I0) & INPLOGIC(m_I1);
- UINT8 t2 = INPLOGIC(m_I2) & INPLOGIC(m_I3);
+ m_I0.activate();
+ m_I1.activate();
+ m_I2.activate();
+ m_I3.activate();
+ UINT8 t1 = INPLOGIC(m_I0) & INPLOGIC(m_I1);
+ UINT8 t2 = INPLOGIC(m_I2) & INPLOGIC(m_I3);
#if 0
- UINT8 t = (t1 | t2) ^ 1;
- OUTLOGIC(m_Q, t, t ? NLTIME_FROM_NS(22) : NLTIME_FROM_NS(15));
+ UINT8 t = (t1 | t2) ^ 1;
+ OUTLOGIC(m_Q, t, t ? NLTIME_FROM_NS(22) : NLTIME_FROM_NS(15));
#else
- const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
-
- UINT8 res = 0;
- if (t1 ^ 1)
- {
- if (t2 ^ 1)
- {
- res = 1;
- }
- else
- {
- m_I0.inactivate();
- m_I1.inactivate();
- }
- } else {
- if (t2 ^ 1)
- {
- m_I2.inactivate();
- m_I3.inactivate();
- }
- }
- OUTLOGIC(m_Q, res, times[1 - res]);// ? 22000 : 15000);
+ const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
+
+ UINT8 res = 0;
+ if (t1 ^ 1)
+ {
+ if (t2 ^ 1)
+ {
+ res = 1;
+ }
+ else
+ {
+ m_I0.inactivate();
+ m_I1.inactivate();
+ }
+ } else {
+ if (t2 ^ 1)
+ {
+ m_I2.inactivate();
+ m_I3.inactivate();
+ }
+ }
+ OUTLOGIC(m_Q, res, times[1 - res]);// ? 22000 : 15000);
#endif
}
@@ -221,122 +221,122 @@ NETLIB_UPDATE(nic7450)
NETLIB_START(nic74107Asub)
{
- register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL);
- register_output("Q", m_Q);
- register_output("QQ", m_QQ);
+ register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL);
+ register_output("Q", m_Q);
+ register_output("QQ", m_QQ);
- m_Q.initial(0);
- m_QQ.initial(1);
+ m_Q.initial(0);
+ m_QQ.initial(1);
- save(NAME(m_Q1));
- save(NAME(m_Q2));
- save(NAME(m_F));
+ save(NAME(m_Q1));
+ save(NAME(m_Q2));
+ save(NAME(m_F));
}
NETLIB_START(nic74107A)
{
- register_sub(sub, "sub");
+ register_sub(sub, "sub");
- register_subalias("CLK", sub.m_clk);
- register_input("J", m_J);
- register_input("K", m_K);
- register_input("CLRQ", m_clrQ);
- register_subalias("Q", sub.m_Q);
- register_subalias("QQ", sub.m_QQ);
+ register_subalias("CLK", sub.m_clk);
+ register_input("J", m_J);
+ register_input("K", m_K);
+ register_input("CLRQ", m_clrQ);
+ register_subalias("Q", sub.m_Q);
+ register_subalias("QQ", sub.m_QQ);
- sub.m_Q.initial(0);
- sub.m_QQ.initial(1);
+ sub.m_Q.initial(0);
+ sub.m_QQ.initial(1);
}
ATTR_HOT inline void NETLIB_NAME(nic74107Asub)::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(40), NLTIME_FROM_NS(25) };
#if 1
- OUTLOGIC(m_Q, state, delay[state ^ 1]);
- OUTLOGIC(m_QQ, state ^ 1, delay[state]);
+ OUTLOGIC(m_Q, state, delay[state ^ 1]);
+ OUTLOGIC(m_QQ, state ^ 1, delay[state]);
#else
- if (state != Q.new_Q())
- {
- Q.setToNoCheck(state, delay[1-state]);
- QQ.setToNoCheck(1-state, delay[state]);
- }
+ if (state != Q.new_Q())
+ {
+ Q.setToNoCheck(state, delay[1-state]);
+ QQ.setToNoCheck(1-state, delay[state]);
+ }
#endif
}
NETLIB_UPDATE(nic74107Asub)
{
- {
- const netlist_sig_t t = m_Q.net().new_Q();
- newstate((!t & m_Q1) | (t & m_Q2) | m_F);
- if (!m_Q1)
- m_clk.inactivate();
- }
+ {
+ const netlist_sig_t t = m_Q.net().new_Q();
+ newstate((!t & m_Q1) | (t & m_Q2) | m_F);
+ if (!m_Q1)
+ m_clk.inactivate();
+ }
}
NETLIB_UPDATE(nic74107A)
{
- if (INPLOGIC(m_J) & INPLOGIC(m_K))
- {
- sub.m_Q1 = 1;
- sub.m_Q2 = 0;
- sub.m_F = 0;
- }
- else if (!INPLOGIC(m_J) & INPLOGIC(m_K))
- {
- sub.m_Q1 = 0;
- sub.m_Q2 = 0;
- sub.m_F = 0;
- }
- else if (INPLOGIC(m_J) & !INPLOGIC(m_K))
- {
- sub.m_Q1 = 0;
- sub.m_Q2 = 0;
- sub.m_F = 1;
- }
- else
- {
- sub.m_Q1 = 0;
- sub.m_Q2 = 1;
- sub.m_F = 0;
- sub.m_clk.inactivate();
- }
- if (!INPLOGIC(m_clrQ))
- {
- sub.m_clk.inactivate();
- sub.newstate(0);
- }
- else if (!sub.m_Q2)
- sub.m_clk.activate_hl();
- //if (!sub.m_Q2 & INPLOGIC(m_clrQ))
- // sub.m_clk.activate_hl();
+ if (INPLOGIC(m_J) & INPLOGIC(m_K))
+ {
+ sub.m_Q1 = 1;
+ sub.m_Q2 = 0;
+ sub.m_F = 0;
+ }
+ else if (!INPLOGIC(m_J) & INPLOGIC(m_K))
+ {
+ sub.m_Q1 = 0;
+ sub.m_Q2 = 0;
+ sub.m_F = 0;
+ }
+ else if (INPLOGIC(m_J) & !INPLOGIC(m_K))
+ {
+ sub.m_Q1 = 0;
+ sub.m_Q2 = 0;
+ sub.m_F = 1;
+ }
+ else
+ {
+ sub.m_Q1 = 0;
+ sub.m_Q2 = 1;
+ sub.m_F = 0;
+ sub.m_clk.inactivate();
+ }
+ if (!INPLOGIC(m_clrQ))
+ {
+ sub.m_clk.inactivate();
+ sub.newstate(0);
+ }
+ else if (!sub.m_Q2)
+ sub.m_clk.activate_hl();
+ //if (!sub.m_Q2 & INPLOGIC(m_clrQ))
+ // sub.m_clk.activate_hl();
}
NETLIB_START(nic74153)
{
- register_input("A1", m_I[0]);
- register_input("A2", m_I[1]);
- register_input("A3", m_I[2]);
- register_input("A4", m_I[3]);
- register_input("A", m_A);
- register_input("B", m_B);
- register_input("GA", m_GA);
-
- register_output("AY", m_AY);
+ register_input("A1", m_I[0]);
+ register_input("A2", m_I[1]);
+ register_input("A3", m_I[2]);
+ register_input("A4", m_I[3]);
+ register_input("A", m_A);
+ register_input("B", m_B);
+ register_input("GA", m_GA);
+
+ register_output("AY", m_AY);
}
NETLIB_UPDATE(nic74153)
{
- const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
- if (!INPLOGIC(m_GA))
- {
- UINT8 chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
- UINT8 t = INPLOGIC(m_I[chan]);
- OUTLOGIC(m_AY, t, delay[t] ); /* data to y only, FIXME */
- }
- else
- {
- OUTLOGIC(m_AY, 0, delay[0]);
- }
+ const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
+ if (!INPLOGIC(m_GA))
+ {
+ UINT8 chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
+ UINT8 t = INPLOGIC(m_I[chan]);
+ OUTLOGIC(m_AY, t, delay[t] ); /* data to y only, FIXME */
+ }
+ else
+ {
+ OUTLOGIC(m_AY, 0, delay[0]);
+ }
}
@@ -346,93 +346,91 @@ NETLIB_UPDATE(nic74153)
netlist_factory::netlist_factory()
{
-
}
netlist_factory::~netlist_factory()
{
- for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
- {
- net_device_t_base_factory *p = e->object();
- delete p;
- }
- m_list.reset();
+ for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = e->object();
+ delete p;
+ }
+ m_list.reset();
}
void netlist_factory::initialize()
{
- ENTRY(R, NETDEV_R)
- ENTRY(POT, NETDEV_POT)
- ENTRY(C, NETDEV_C)
- ENTRY(D, NETDEV_D)
- ENTRY(VCVS, NETDEV_VCVS)
- ENTRY(VCCS, NETDEV_VCCS)
- ENTRY(QPNP_switch, NETDEV_QPNP)
- ENTRY(QNPN_switch, NETDEV_QNPN)
- ENTRY(ttl_const, NETDEV_TTL_CONST)
- ENTRY(analog_const, NETDEV_ANALOG_CONST)
- ENTRY(logic_input, NETDEV_LOGIC_INPUT)
- ENTRY(analog_input, NETDEV_ANALOG_INPUT)
- ENTRY(log, NETDEV_LOG)
- ENTRY(logD, NETDEV_LOGD)
- ENTRY(clock, NETDEV_CLOCK)
- ENTRY(mainclock, NETDEV_MAINCLOCK)
- ENTRY(solver, NETDEV_SOLVER)
- ENTRY(nicMultiSwitch, NETDEV_SWITCH2)
- ENTRY(nicRSFF, NETDEV_RSFF)
- ENTRY(nicMixer8, NETDEV_MIXER)
- ENTRY(7400, TTL_7400_NAND)
- ENTRY(7402, TTL_7402_NOR)
- ENTRY(nic7404, TTL_7404_INVERT)
- ENTRY(7410, TTL_7410_NAND)
- ENTRY(7420, TTL_7420_NAND)
- ENTRY(7425, TTL_7425_NOR)
- ENTRY(7427, TTL_7427_NOR)
- ENTRY(7430, TTL_7430_NAND)
- ENTRY(nic7450, TTL_7450_ANDORINVERT)
- ENTRY(7486, TTL_7486_XOR)
- ENTRY(nic7448, TTL_7448)
- ENTRY(7474, TTL_7474)
- ENTRY(7483, TTL_7483)
- ENTRY(7490, TTL_7490)
- ENTRY(7493, TTL_7493)
- ENTRY(nic74107, TTL_74107)
- ENTRY(nic74107A, TTL_74107A)
- ENTRY(nic74153, TTL_74153)
- ENTRY(9316, TTL_9316)
- ENTRY(NE555, NETDEV_NE555)
- ENTRY(nicNE555N_MSTABLE, NE555N_MSTABLE)
+ ENTRY(R, NETDEV_R)
+ ENTRY(POT, NETDEV_POT)
+ ENTRY(C, NETDEV_C)
+ ENTRY(D, NETDEV_D)
+ ENTRY(VCVS, NETDEV_VCVS)
+ ENTRY(VCCS, NETDEV_VCCS)
+ ENTRY(QPNP_switch, NETDEV_QPNP)
+ ENTRY(QNPN_switch, NETDEV_QNPN)
+ ENTRY(ttl_const, NETDEV_TTL_CONST)
+ ENTRY(analog_const, NETDEV_ANALOG_CONST)
+ ENTRY(logic_input, NETDEV_LOGIC_INPUT)
+ ENTRY(analog_input, NETDEV_ANALOG_INPUT)
+ ENTRY(log, NETDEV_LOG)
+ ENTRY(logD, NETDEV_LOGD)
+ ENTRY(clock, NETDEV_CLOCK)
+ ENTRY(mainclock, NETDEV_MAINCLOCK)
+ ENTRY(solver, NETDEV_SOLVER)
+ ENTRY(nicMultiSwitch, NETDEV_SWITCH2)
+ ENTRY(nicRSFF, NETDEV_RSFF)
+ ENTRY(nicMixer8, NETDEV_MIXER)
+ ENTRY(7400, TTL_7400_NAND)
+ ENTRY(7402, TTL_7402_NOR)
+ ENTRY(nic7404, TTL_7404_INVERT)
+ ENTRY(7410, TTL_7410_NAND)
+ ENTRY(7420, TTL_7420_NAND)
+ ENTRY(7425, TTL_7425_NOR)
+ ENTRY(7427, TTL_7427_NOR)
+ ENTRY(7430, TTL_7430_NAND)
+ ENTRY(nic7450, TTL_7450_ANDORINVERT)
+ ENTRY(7486, TTL_7486_XOR)
+ ENTRY(nic7448, TTL_7448)
+ ENTRY(7474, TTL_7474)
+ ENTRY(7483, TTL_7483)
+ ENTRY(7490, TTL_7490)
+ ENTRY(7493, TTL_7493)
+ ENTRY(nic74107, TTL_74107)
+ ENTRY(nic74107A, TTL_74107A)
+ ENTRY(nic74153, TTL_74153)
+ ENTRY(9316, TTL_9316)
+ ENTRY(NE555, NETDEV_NE555)
+ ENTRY(nicNE555N_MSTABLE, NE555N_MSTABLE)
}
netlist_device_t *netlist_factory::new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const
{
- for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
- {
- net_device_t_base_factory *p = e->object();
- if (strcmp(p->classname(), classname) == 0)
- {
- netlist_device_t *ret = p->Create();
- return ret;
- }
- p++;
- }
- setup.netlist().xfatalerror("Class %s not found!\n", classname.cstr());
- return NULL; // appease code analysis
+ for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = e->object();
+ if (strcmp(p->classname(), classname) == 0)
+ {
+ netlist_device_t *ret = p->Create();
+ return ret;
+ }
+ p++;
+ }
+ setup.netlist().xfatalerror("Class %s not found!\n", classname.cstr());
+ return NULL; // appease code analysis
}
netlist_device_t *netlist_factory::new_device_by_name(const pstring &name, netlist_setup_t &setup) const
{
- for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
- {
- net_device_t_base_factory *p = e->object();
- if (strcmp(p->name(), name) == 0)
- {
- netlist_device_t *ret = p->Create();
- return ret;
- }
- p++;
- }
- setup.netlist().xfatalerror("Class %s not found!\n", name.cstr());
- return NULL; // appease code analysis
+ for (list_t::entry_t *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = e->object();
+ if (strcmp(p->name(), name) == 0)
+ {
+ netlist_device_t *ret = p->Create();
+ return ret;
+ }
+ p++;
+ }
+ setup.netlist().xfatalerror("Class %s not found!\n", name.cstr());
+ return NULL; // appease code analysis
}
-
diff --git a/src/emu/netlist/devices/net_lib.h b/src/emu/netlist/devices/net_lib.h
index da225bc3f1e..2c696588f97 100644
--- a/src/emu/netlist/devices/net_lib.h
+++ b/src/emu/netlist/devices/net_lib.h
@@ -136,7 +136,7 @@ NETLIB_DEVICE(nic7450,
*/
NETLIB_SUBDEVICE(nic74107Asub,
- netlist_ttl_input_t m_clk;
+ netlist_ttl_input_t m_clk;
netlist_ttl_output_t m_Q;
netlist_ttl_output_t m_QQ;
diff --git a/src/emu/netlist/devices/nld_7400.h b/src/emu/netlist/devices/nld_7400.h
index 809ea87334e..76af3043c4b 100644
--- a/src/emu/netlist/devices/nld_7400.h
+++ b/src/emu/netlist/devices/nld_7400.h
@@ -43,34 +43,34 @@ NETLIB_SIGNAL(7400, 2, 0, 0);
NETLIB_DEVICE(7400pin,
- NETLIB_NAME(7400) m_1;
- NETLIB_NAME(7400) m_2;
- NETLIB_NAME(7400) m_3;
- NETLIB_NAME(7400) m_4;
+ NETLIB_NAME(7400) m_1;
+ NETLIB_NAME(7400) m_2;
+ NETLIB_NAME(7400) m_3;
+ NETLIB_NAME(7400) m_4;
);
inline NETLIB_START(7400pin)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
- register_sub(m_3, "3");
- register_sub(m_4, "4");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+ register_sub(m_3, "3");
+ register_sub(m_4, "4");
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_1.m_Q);
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
+ register_subalias("3", m_1.m_Q);
- register_subalias("4", m_2.m_i[0]);
- register_subalias("5", m_2.m_i[1]);
- register_subalias("6", m_2.m_Q);
+ register_subalias("4", m_2.m_i[0]);
+ register_subalias("5", m_2.m_i[1]);
+ register_subalias("6", m_2.m_Q);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
- register_subalias("8", m_3.m_Q);
+ register_subalias("9", m_3.m_i[0]);
+ register_subalias("10", m_3.m_i[1]);
+ register_subalias("8", m_3.m_Q);
- register_subalias("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
- register_subalias("11", m_4.m_Q);
+ register_subalias("12", m_4.m_i[0]);
+ register_subalias("13", m_4.m_i[1]);
+ register_subalias("11", m_4.m_Q);
}
#endif /* NLD_7400_H_ */
diff --git a/src/emu/netlist/devices/nld_7402.h b/src/emu/netlist/devices/nld_7402.h
index 0d5990478c0..63a91d25ce8 100644
--- a/src/emu/netlist/devices/nld_7402.h
+++ b/src/emu/netlist/devices/nld_7402.h
@@ -35,9 +35,9 @@
#include "nld_signal.h"
#define TTL_7402_NOR(_name, _I1, _I2) \
- NET_REGISTER_DEV(7402, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2)
+ NET_REGISTER_DEV(7402, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2)
NETLIB_SIGNAL(7402, 2, 1, 0);
diff --git a/src/emu/netlist/devices/nld_7404.c b/src/emu/netlist/devices/nld_7404.c
index e285eb54f06..42b7e341c39 100644
--- a/src/emu/netlist/devices/nld_7404.c
+++ b/src/emu/netlist/devices/nld_7404.c
@@ -7,14 +7,14 @@
NETLIB_START(nic7404)
{
- register_input("A", m_I);
- register_output("Q", m_Q);
- m_Q.initial(1);
+ register_input("A", m_I);
+ register_output("Q", m_Q);
+ m_Q.initial(1);
}
NETLIB_UPDATE(nic7404)
{
- static const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
- UINT8 t = (INPLOGIC(m_I)) ^ 1;
- OUTLOGIC(m_Q, t, delay[t]);
+ static const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
+ UINT8 t = (INPLOGIC(m_I)) ^ 1;
+ OUTLOGIC(m_Q, t, delay[t]);
}
diff --git a/src/emu/netlist/devices/nld_7404.h b/src/emu/netlist/devices/nld_7404.h
index 15c16652f75..5432a1dd9f7 100644
--- a/src/emu/netlist/devices/nld_7404.h
+++ b/src/emu/netlist/devices/nld_7404.h
@@ -33,12 +33,12 @@
#include "nld_signal.h"
NETLIB_DEVICE(nic7404,
- netlist_ttl_input_t m_I;
- netlist_ttl_output_t m_Q;
+ netlist_ttl_input_t m_I;
+ netlist_ttl_output_t m_Q;
);
#define TTL_7404_INVERT(_name, _A) \
- NET_REGISTER_DEV(nic7404, _name) \
- NET_CONNECT(_name, A, _A)
+ NET_REGISTER_DEV(nic7404, _name) \
+ NET_CONNECT(_name, A, _A)
#endif /* NLD_7404_H_ */
diff --git a/src/emu/netlist/devices/nld_7410.h b/src/emu/netlist/devices/nld_7410.h
index 860d5fcab21..b8a1c55aee6 100644
--- a/src/emu/netlist/devices/nld_7410.h
+++ b/src/emu/netlist/devices/nld_7410.h
@@ -35,10 +35,10 @@
#include "nld_signal.h"
#define TTL_7410_NAND(_name, _I1, _I2, _I3) \
- NET_REGISTER_DEV(7410, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3)
+ NET_REGISTER_DEV(7410, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3)
NETLIB_SIGNAL(7410, 3, 0, 0);
diff --git a/src/emu/netlist/devices/nld_7420.h b/src/emu/netlist/devices/nld_7420.h
index 5ff5bd12ac5..6ac7c477743 100644
--- a/src/emu/netlist/devices/nld_7420.h
+++ b/src/emu/netlist/devices/nld_7420.h
@@ -36,11 +36,11 @@
#include "nld_signal.h"
#define TTL_7420_NAND(_name, _I1, _I2, _I3, _I4) \
- NET_REGISTER_DEV(7420, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3) \
- NET_CONNECT(_name, D, _I4)
+ NET_REGISTER_DEV(7420, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3) \
+ NET_CONNECT(_name, D, _I4)
NETLIB_SIGNAL(7420, 4, 0, 0);
diff --git a/src/emu/netlist/devices/nld_7425.h b/src/emu/netlist/devices/nld_7425.h
index 5e2fff4f946..26ae9b8476c 100644
--- a/src/emu/netlist/devices/nld_7425.h
+++ b/src/emu/netlist/devices/nld_7425.h
@@ -39,11 +39,11 @@
#include "nld_signal.h"
#define TTL_7425_NOR(_name, _I1, _I2, _I3, _I4) \
- NET_REGISTER_DEV(7425, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3) \
- NET_CONNECT(_name, D, _I4)
+ NET_REGISTER_DEV(7425, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3) \
+ NET_CONNECT(_name, D, _I4)
NETLIB_SIGNAL(7425, 4, 1, 0);
diff --git a/src/emu/netlist/devices/nld_7427.h b/src/emu/netlist/devices/nld_7427.h
index c5a8ede870a..9863acc9f5d 100644
--- a/src/emu/netlist/devices/nld_7427.h
+++ b/src/emu/netlist/devices/nld_7427.h
@@ -35,10 +35,10 @@
#include "nld_signal.h"
#define TTL_7427_NOR(_name, _I1, _I2, _I3) \
- NET_REGISTER_DEV(7427, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3)
+ NET_REGISTER_DEV(7427, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3)
NETLIB_SIGNAL(7427, 3, 1, 0);
diff --git a/src/emu/netlist/devices/nld_7430.h b/src/emu/netlist/devices/nld_7430.h
index 783e8bb6816..2d9ff87f385 100644
--- a/src/emu/netlist/devices/nld_7430.h
+++ b/src/emu/netlist/devices/nld_7430.h
@@ -40,15 +40,15 @@
#include "nld_signal.h"
#define TTL_7430_NAND(_name, _I1, _I2, _I3, _I4, _I5, _I6, _I7, _I8) \
- NET_REGISTER_DEV(7430, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3) \
- NET_CONNECT(_name, D, _I4) \
- NET_CONNECT(_name, E, _I5) \
- NET_CONNECT(_name, F, _I6) \
- NET_CONNECT(_name, G, _I7) \
- NET_CONNECT(_name, H, _I8)
+ NET_REGISTER_DEV(7430, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3) \
+ NET_CONNECT(_name, D, _I4) \
+ NET_CONNECT(_name, E, _I5) \
+ NET_CONNECT(_name, F, _I6) \
+ NET_CONNECT(_name, G, _I7) \
+ NET_CONNECT(_name, H, _I8)
NETLIB_SIGNAL(7430, 8, 0, 0);
diff --git a/src/emu/netlist/devices/nld_7474.c b/src/emu/netlist/devices/nld_7474.c
index cd9e64e41af..ef23fe819c5 100644
--- a/src/emu/netlist/devices/nld_7474.c
+++ b/src/emu/netlist/devices/nld_7474.c
@@ -7,63 +7,63 @@
ATTR_HOT inline void NETLIB_NAME(7474sub)::newstate(const UINT8 state)
{
- static const netlist_time delay[2] = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(40) };
- OUTLOGIC(m_Q, state, delay[state]);
- OUTLOGIC(m_QQ, !state, delay[!state]);
+ static const netlist_time delay[2] = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(40) };
+ OUTLOGIC(m_Q, state, delay[state]);
+ OUTLOGIC(m_QQ, !state, delay[!state]);
}
NETLIB_UPDATE(7474sub)
{
- //if (!INP_LAST(m_clk) & INP(m_clk))
- {
- newstate(m_nextD);
- m_clk.inactivate();
- }
+ //if (!INP_LAST(m_clk) & INP(m_clk))
+ {
+ newstate(m_nextD);
+ m_clk.inactivate();
+ }
}
NETLIB_UPDATE(7474)
{
- if (!INPLOGIC(m_preQ))
- {
- sub.newstate(1);
- sub.m_clk.inactivate();
- m_D.inactivate();
- }
- else if (!INPLOGIC(m_clrQ))
- {
- sub.newstate(0);
- sub.m_clk.inactivate();
- m_D.inactivate();
- }
- else
- {
- m_D.activate();
- sub.m_nextD = INPLOGIC(m_D);
- sub.m_clk.activate_lh();
- }
+ if (!INPLOGIC(m_preQ))
+ {
+ sub.newstate(1);
+ sub.m_clk.inactivate();
+ m_D.inactivate();
+ }
+ else if (!INPLOGIC(m_clrQ))
+ {
+ sub.newstate(0);
+ sub.m_clk.inactivate();
+ m_D.inactivate();
+ }
+ else
+ {
+ m_D.activate();
+ sub.m_nextD = INPLOGIC(m_D);
+ sub.m_clk.activate_lh();
+ }
}
NETLIB_START(7474)
{
- register_sub(sub, "sub");
+ register_sub(sub, "sub");
- register_subalias("CLK", sub.m_clk);
- register_input("D", m_D);
- register_input("CLRQ", m_clrQ);
- register_input("PREQ", m_preQ);
+ register_subalias("CLK", sub.m_clk);
+ register_input("D", m_D);
+ register_input("CLRQ", m_clrQ);
+ register_input("PREQ", m_preQ);
- register_subalias("Q", sub.m_Q);
- register_subalias("QQ", sub.m_QQ);
+ register_subalias("Q", sub.m_Q);
+ register_subalias("QQ", sub.m_QQ);
}
NETLIB_START(7474sub)
{
- register_input("CLK", m_clk, netlist_input_t::STATE_INP_LH);
+ register_input("CLK", m_clk, netlist_input_t::STATE_INP_LH);
- register_output("Q", m_Q);
- register_output("QQ", m_QQ);
+ register_output("Q", m_Q);
+ register_output("QQ", m_QQ);
- m_Q.initial(1);
- m_QQ.initial(0);
+ m_Q.initial(1);
+ m_QQ.initial(0);
}
diff --git a/src/emu/netlist/devices/nld_7474.h b/src/emu/netlist/devices/nld_7474.h
index 91375f479e6..31cf80e0d6d 100644
--- a/src/emu/netlist/devices/nld_7474.h
+++ b/src/emu/netlist/devices/nld_7474.h
@@ -45,28 +45,28 @@
#include "nld_signal.h"
#define TTL_7474(_name, _CLK, _D, _CLRQ, _PREQ) \
- NET_REGISTER_DEV(7474, _name) \
- NET_CONNECT(_name, CLK, _CLK) \
- NET_CONNECT(_name, D, _D) \
- NET_CONNECT(_name, CLRQ, _CLRQ) \
- NET_CONNECT(_name, PREQ, _PREQ)
+ NET_REGISTER_DEV(7474, _name) \
+ NET_CONNECT(_name, CLK, _CLK) \
+ NET_CONNECT(_name, D, _D) \
+ NET_CONNECT(_name, CLRQ, _CLRQ) \
+ NET_CONNECT(_name, PREQ, _PREQ)
NETLIB_SUBDEVICE(7474sub,
- netlist_ttl_input_t m_clk;
+ netlist_ttl_input_t m_clk;
- UINT8 m_nextD;
- netlist_ttl_output_t m_Q;
- netlist_ttl_output_t m_QQ;
+ UINT8 m_nextD;
+ netlist_ttl_output_t m_Q;
+ netlist_ttl_output_t m_QQ;
- ATTR_HOT inline void newstate(const UINT8 state);
+ ATTR_HOT inline void newstate(const UINT8 state);
);
NETLIB_DEVICE(7474,
- NETLIB_NAME(7474sub) sub;
+ NETLIB_NAME(7474sub) sub;
- netlist_ttl_input_t m_D;
- netlist_ttl_input_t m_clrQ;
- netlist_ttl_input_t m_preQ;
+ netlist_ttl_input_t m_D;
+ netlist_ttl_input_t m_clrQ;
+ netlist_ttl_input_t m_preQ;
);
diff --git a/src/emu/netlist/devices/nld_7483.c b/src/emu/netlist/devices/nld_7483.c
index eca61846241..81624326d6e 100644
--- a/src/emu/netlist/devices/nld_7483.c
+++ b/src/emu/netlist/devices/nld_7483.c
@@ -7,42 +7,41 @@
NETLIB_START(7483)
{
- m_lastr = 0;
-
- register_input("A1", m_A1);
- register_input("A2", m_A2);
- register_input("A3", m_A3);
- register_input("A4", m_A4);
- register_input("B1", m_B1);
- register_input("B2", m_B2);
- register_input("B3", m_B3);
- register_input("B4", m_B4);
- register_input("C0", m_C0);
-
- register_output("SA", m_SA);
- register_output("SB", m_SB);
- register_output("SC", m_SC);
- register_output("SD", m_SD);
- register_output("C4", m_C4);
-
- save(NAME(m_lastr));
+ m_lastr = 0;
+
+ register_input("A1", m_A1);
+ register_input("A2", m_A2);
+ register_input("A3", m_A3);
+ register_input("A4", m_A4);
+ register_input("B1", m_B1);
+ register_input("B2", m_B2);
+ register_input("B3", m_B3);
+ register_input("B4", m_B4);
+ register_input("C0", m_C0);
+
+ register_output("SA", m_SA);
+ register_output("SB", m_SB);
+ register_output("SC", m_SC);
+ register_output("SD", m_SD);
+ register_output("C4", m_C4);
+
+ save(NAME(m_lastr));
}
NETLIB_UPDATE(7483)
{
- UINT8 a = (INPLOGIC(m_A1) << 0) | (INPLOGIC(m_A2) << 1) | (INPLOGIC(m_A3) << 2) | (INPLOGIC(m_A4) << 3);
- UINT8 b = (INPLOGIC(m_B1) << 0) | (INPLOGIC(m_B2) << 1) | (INPLOGIC(m_B3) << 2) | (INPLOGIC(m_B4) << 3);
-
- UINT8 r = a + b + INPLOGIC(m_C0);
-
- if (r != m_lastr)
- {
- m_lastr = r;
- OUTLOGIC(m_SA, (r >> 0) & 1, NLTIME_FROM_NS(23));
- OUTLOGIC(m_SB, (r >> 1) & 1, NLTIME_FROM_NS(23));
- OUTLOGIC(m_SC, (r >> 2) & 1, NLTIME_FROM_NS(23));
- OUTLOGIC(m_SD, (r >> 3) & 1, NLTIME_FROM_NS(23));
- OUTLOGIC(m_C4, (r >> 4) & 1, NLTIME_FROM_NS(23));
- }
+ UINT8 a = (INPLOGIC(m_A1) << 0) | (INPLOGIC(m_A2) << 1) | (INPLOGIC(m_A3) << 2) | (INPLOGIC(m_A4) << 3);
+ UINT8 b = (INPLOGIC(m_B1) << 0) | (INPLOGIC(m_B2) << 1) | (INPLOGIC(m_B3) << 2) | (INPLOGIC(m_B4) << 3);
+
+ UINT8 r = a + b + INPLOGIC(m_C0);
+
+ if (r != m_lastr)
+ {
+ m_lastr = r;
+ OUTLOGIC(m_SA, (r >> 0) & 1, NLTIME_FROM_NS(23));
+ OUTLOGIC(m_SB, (r >> 1) & 1, NLTIME_FROM_NS(23));
+ OUTLOGIC(m_SC, (r >> 2) & 1, NLTIME_FROM_NS(23));
+ OUTLOGIC(m_SD, (r >> 3) & 1, NLTIME_FROM_NS(23));
+ OUTLOGIC(m_C4, (r >> 4) & 1, NLTIME_FROM_NS(23));
+ }
}
-
diff --git a/src/emu/netlist/devices/nld_7483.h b/src/emu/netlist/devices/nld_7483.h
index 5900b33cc05..2f457435847 100644
--- a/src/emu/netlist/devices/nld_7483.h
+++ b/src/emu/netlist/devices/nld_7483.h
@@ -7,16 +7,16 @@
*
* +--------------+
* A4 |1 ++ 16| B4
- * Ʃ3 |2 15| Ʃ3
+ * ??3 |2 15| ??3
* A3 |3 14| C4
* B3 |4 7483 13| C0
* VCC |5 12| GND
- * Ʃ3 |6 11| B1
+ * ??3 |6 11| B1
* B2 |7 10| A1
- * A2 |8 9| Ʃ3
+ * A2 |8 9| ??3
* +--------------+
*
- * Æ© = (A + B + C) & 0x0f
+ * ?? = (A + B + C) & 0x0f
*
* C4 = (A + B + C) > 15 ? 1 : 0
*
@@ -30,35 +30,35 @@
#include "../nl_base.h"
#define TTL_7483(_name, _A1, _A2, _A3, _A4, _B1, _B2, _B3, _B4, _CI) \
- NET_REGISTER_DEV(7483, _name) \
- NET_CONNECT(_name, A1, _A1) \
- NET_CONNECT(_name, A2, _A2) \
- NET_CONNECT(_name, A3, _A3) \
- NET_CONNECT(_name, A4, _A4) \
- NET_CONNECT(_name, B1, _B1) \
- NET_CONNECT(_name, B2, _B2) \
- NET_CONNECT(_name, B3, _B3) \
- NET_CONNECT(_name, B4, _B4) \
- NET_CONNECT(_name, C0, _CI)
+ NET_REGISTER_DEV(7483, _name) \
+ NET_CONNECT(_name, A1, _A1) \
+ NET_CONNECT(_name, A2, _A2) \
+ NET_CONNECT(_name, A3, _A3) \
+ NET_CONNECT(_name, A4, _A4) \
+ NET_CONNECT(_name, B1, _B1) \
+ NET_CONNECT(_name, B2, _B2) \
+ NET_CONNECT(_name, B3, _B3) \
+ NET_CONNECT(_name, B4, _B4) \
+ NET_CONNECT(_name, C0, _CI)
NETLIB_DEVICE(7483,
- netlist_ttl_input_t m_C0;
- netlist_ttl_input_t m_A1;
- netlist_ttl_input_t m_A2;
- netlist_ttl_input_t m_A3;
- netlist_ttl_input_t m_A4;
- netlist_ttl_input_t m_B1;
- netlist_ttl_input_t m_B2;
- netlist_ttl_input_t m_B3;
- netlist_ttl_input_t m_B4;
+ netlist_ttl_input_t m_C0;
+ netlist_ttl_input_t m_A1;
+ netlist_ttl_input_t m_A2;
+ netlist_ttl_input_t m_A3;
+ netlist_ttl_input_t m_A4;
+ netlist_ttl_input_t m_B1;
+ netlist_ttl_input_t m_B2;
+ netlist_ttl_input_t m_B3;
+ netlist_ttl_input_t m_B4;
- UINT8 m_lastr;
+ UINT8 m_lastr;
- netlist_ttl_output_t m_SA;
- netlist_ttl_output_t m_SB;
- netlist_ttl_output_t m_SC;
- netlist_ttl_output_t m_SD;
- netlist_ttl_output_t m_C4;
+ netlist_ttl_output_t m_SA;
+ netlist_ttl_output_t m_SB;
+ netlist_ttl_output_t m_SC;
+ netlist_ttl_output_t m_SD;
+ netlist_ttl_output_t m_C4;
);
diff --git a/src/emu/netlist/devices/nld_7486.c b/src/emu/netlist/devices/nld_7486.c
index 55fa712e9ad..fcd94c9f321 100644
--- a/src/emu/netlist/devices/nld_7486.c
+++ b/src/emu/netlist/devices/nld_7486.c
@@ -7,15 +7,14 @@
NETLIB_START(7486)
{
- register_input("A", m_A);
- register_input("B", m_B);
- register_output("Q", m_Q);
+ register_input("A", m_A);
+ register_input("B", m_B);
+ register_output("Q", m_Q);
}
NETLIB_UPDATE(7486)
{
- static const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
- UINT8 t = INPLOGIC(m_A) ^ INPLOGIC(m_B);
- OUTLOGIC(m_Q, t, delay[t]);
+ static const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
+ UINT8 t = INPLOGIC(m_A) ^ INPLOGIC(m_B);
+ OUTLOGIC(m_Q, t, delay[t]);
}
-
diff --git a/src/emu/netlist/devices/nld_7486.h b/src/emu/netlist/devices/nld_7486.h
index b00d8905ae3..d4fd3d5cda9 100644
--- a/src/emu/netlist/devices/nld_7486.h
+++ b/src/emu/netlist/devices/nld_7486.h
@@ -35,13 +35,13 @@
#include "nld_signal.h"
#define TTL_7486_XOR(_name, _A, _B) \
- NET_REGISTER_DEV(7486, _name) \
- NET_CONNECT(_name, A, _A) \
- NET_CONNECT(_name, B, _B)
+ NET_REGISTER_DEV(7486, _name) \
+ NET_CONNECT(_name, A, _A) \
+ NET_CONNECT(_name, B, _B)
NETLIB_DEVICE(7486,
- netlist_ttl_input_t m_A;
- netlist_ttl_input_t m_B;
- netlist_ttl_output_t m_Q;
+ netlist_ttl_input_t m_A;
+ netlist_ttl_input_t m_B;
+ netlist_ttl_output_t m_Q;
);
#endif /* NLD_7486_H_ */
diff --git a/src/emu/netlist/devices/nld_7490.c b/src/emu/netlist/devices/nld_7490.c
index 48b8bbc6b5c..cc84a1389c3 100644
--- a/src/emu/netlist/devices/nld_7490.c
+++ b/src/emu/netlist/devices/nld_7490.c
@@ -7,47 +7,47 @@
NETLIB_START(7490)
{
- m_cnt = 0;
+ m_cnt = 0;
- register_input("CLK", m_clk);
- register_input("R1", m_R1);
- register_input("R2", m_R2);
- register_input("R91", m_R91);
- register_input("R92", m_R92);
+ register_input("CLK", m_clk);
+ register_input("R1", m_R1);
+ register_input("R2", m_R2);
+ register_input("R91", m_R91);
+ register_input("R92", m_R92);
- register_output("QA", m_Q[0]);
- register_output("QB", m_Q[1]);
- register_output("QC", m_Q[2]);
- register_output("QD", m_Q[3]);
+ register_output("QA", m_Q[0]);
+ register_output("QB", m_Q[1]);
+ register_output("QC", m_Q[2]);
+ register_output("QD", m_Q[3]);
- save(NAME(m_cnt));
+ save(NAME(m_cnt));
}
NETLIB_UPDATE(7490)
{
- if (INPLOGIC(m_R91) & INPLOGIC(m_R92))
- {
- m_cnt = 9;
- update_outputs();
- }
- else if (INPLOGIC(m_R1) & INPLOGIC(m_R2))
- {
- m_cnt = 0;
- update_outputs();
- }
- else if (INP_HL(m_clk))
- {
- m_cnt++;
- if (m_cnt >= 10)
- m_cnt = 0;
- update_outputs();
- }
+ if (INPLOGIC(m_R91) & INPLOGIC(m_R92))
+ {
+ m_cnt = 9;
+ update_outputs();
+ }
+ else if (INPLOGIC(m_R1) & INPLOGIC(m_R2))
+ {
+ m_cnt = 0;
+ update_outputs();
+ }
+ else if (INP_HL(m_clk))
+ {
+ m_cnt++;
+ if (m_cnt >= 10)
+ m_cnt = 0;
+ update_outputs();
+ }
}
NETLIB_FUNC_VOID(7490, update_outputs, (void))
{
- const netlist_time delay[4] = { NLTIME_FROM_NS(18), NLTIME_FROM_NS(36), NLTIME_FROM_NS(54), NLTIME_FROM_NS(72) };
- for (int i=0; i<4; i++)
- OUTLOGIC(m_Q[i], (m_cnt >> i) & 1, delay[i]);
+ const netlist_time delay[4] = { NLTIME_FROM_NS(18), NLTIME_FROM_NS(36), NLTIME_FROM_NS(54), NLTIME_FROM_NS(72) };
+ for (int i=0; i<4; i++)
+ OUTLOGIC(m_Q[i], (m_cnt >> i) & 1, delay[i]);
}
diff --git a/src/emu/netlist/devices/nld_7490.h b/src/emu/netlist/devices/nld_7490.h
index a5380a21cae..288f2cc8864 100644
--- a/src/emu/netlist/devices/nld_7490.h
+++ b/src/emu/netlist/devices/nld_7490.h
@@ -58,26 +58,26 @@
#include "../nl_base.h"
#define TTL_7490(_name, _CLK, _R1, _R2, _R91, _R92) \
- NET_REGISTER_DEV(7490, _name) \
- NET_CONNECT(_name, CLK, _CLK) \
- NET_CONNECT(_name, R1, _R1) \
- NET_CONNECT(_name, R2, _R2) \
- NET_CONNECT(_name, R91, _R91) \
- NET_CONNECT(_name, R92, _R92)
+ NET_REGISTER_DEV(7490, _name) \
+ NET_CONNECT(_name, CLK, _CLK) \
+ NET_CONNECT(_name, R1, _R1) \
+ NET_CONNECT(_name, R2, _R2) \
+ NET_CONNECT(_name, R91, _R91) \
+ NET_CONNECT(_name, R92, _R92)
NETLIB_DEVICE(7490,
- ATTR_HOT void update_outputs();
+ ATTR_HOT void update_outputs();
- netlist_ttl_input_t m_R1;
- netlist_ttl_input_t m_R2;
- netlist_ttl_input_t m_R91;
- netlist_ttl_input_t m_R92;
- netlist_ttl_input_t m_clk;
+ netlist_ttl_input_t m_R1;
+ netlist_ttl_input_t m_R2;
+ netlist_ttl_input_t m_R91;
+ netlist_ttl_input_t m_R92;
+ netlist_ttl_input_t m_clk;
- UINT8 m_cnt;
+ UINT8 m_cnt;
- netlist_ttl_output_t m_Q[4];
+ netlist_ttl_output_t m_Q[4];
);
#endif /* NLD_7490_H_ */
diff --git a/src/emu/netlist/devices/nld_7493.c b/src/emu/netlist/devices/nld_7493.c
index a8c218de5a8..ac633df081b 100644
--- a/src/emu/netlist/devices/nld_7493.c
+++ b/src/emu/netlist/devices/nld_7493.c
@@ -7,59 +7,59 @@
NETLIB_START(7493)
{
- register_sub(A, "A");
- register_sub(B, "B");
- register_sub(C, "C");
- register_sub(D, "D");
+ register_sub(A, "A");
+ register_sub(B, "B");
+ register_sub(C, "C");
+ register_sub(D, "D");
- register_subalias("CLKA", A.m_I);
- register_subalias("CLKB", B.m_I);
- register_input("R1", m_R1);
- register_input("R2", m_R2);
+ register_subalias("CLKA", A.m_I);
+ register_subalias("CLKB", B.m_I);
+ register_input("R1", m_R1);
+ register_input("R2", m_R2);
- register_subalias("QA", A.m_Q);
- register_subalias("QB", B.m_Q);
- register_subalias("QC", C.m_Q);
- register_subalias("QD", D.m_Q);
+ register_subalias("QA", A.m_Q);
+ register_subalias("QB", B.m_Q);
+ register_subalias("QC", C.m_Q);
+ register_subalias("QD", D.m_Q);
- register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL);
- register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL);
+ register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL);
+ register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL);
}
NETLIB_START(7493ff)
{
- m_reset = 0;
+ m_reset = 0;
- register_input("CLK", m_I, netlist_input_t::STATE_INP_HL);
- register_output("Q", m_Q);
+ register_input("CLK", m_I, netlist_input_t::STATE_INP_HL);
+ register_output("Q", m_Q);
- save(NAME(m_reset));
+ save(NAME(m_reset));
}
NETLIB_UPDATE(7493ff)
{
- if (m_reset == 0)
- OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18));
+ if (m_reset == 0)
+ OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18));
}
NETLIB_UPDATE(7493)
{
- netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2);
+ netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2);
- if (r)
- {
- A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1;
- A.m_I.inactivate();
- B.m_I.inactivate();
- OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40));
- OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40));
- OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40));
- OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40));
- }
- else
- {
- A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0;
- A.m_I.activate_hl();
- B.m_I.activate_hl();
- }
+ if (r)
+ {
+ A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1;
+ A.m_I.inactivate();
+ B.m_I.inactivate();
+ OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40));
+ OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40));
+ OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40));
+ OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40));
+ }
+ else
+ {
+ A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0;
+ A.m_I.activate_hl();
+ B.m_I.activate_hl();
+ }
}
diff --git a/src/emu/netlist/devices/nld_7493.h b/src/emu/netlist/devices/nld_7493.h
index 7cd6e59988b..cc961c389f1 100644
--- a/src/emu/netlist/devices/nld_7493.h
+++ b/src/emu/netlist/devices/nld_7493.h
@@ -60,27 +60,27 @@
#include "../nl_base.h"
#define TTL_7493(_name, _CLKA, _CLKB, _R1, _R2) \
- NET_REGISTER_DEV(7493, _name) \
- NET_CONNECT(_name, CLKA, _CLKA) \
- NET_CONNECT(_name, CLKB, _CLKB) \
- NET_CONNECT(_name, R1, _R1) \
- NET_CONNECT(_name, R2, _R2)
+ NET_REGISTER_DEV(7493, _name) \
+ NET_CONNECT(_name, CLKA, _CLKA) \
+ NET_CONNECT(_name, CLKB, _CLKB) \
+ NET_CONNECT(_name, R1, _R1) \
+ NET_CONNECT(_name, R2, _R2)
NETLIB_SUBDEVICE(7493ff,
- netlist_ttl_input_t m_I;
- netlist_ttl_output_t m_Q;
+ netlist_ttl_input_t m_I;
+ netlist_ttl_output_t m_Q;
- UINT8 m_reset;
+ UINT8 m_reset;
);
NETLIB_DEVICE(7493,
- netlist_ttl_input_t m_R1;
- netlist_ttl_input_t m_R2;
+ netlist_ttl_input_t m_R1;
+ netlist_ttl_input_t m_R2;
- NETLIB_NAME(7493ff) A;
- NETLIB_NAME(7493ff) B;
- NETLIB_NAME(7493ff) C;
- NETLIB_NAME(7493ff) D;
+ NETLIB_NAME(7493ff) A;
+ NETLIB_NAME(7493ff) B;
+ NETLIB_NAME(7493ff) C;
+ NETLIB_NAME(7493ff) D;
);
#endif /* NLD_7493_H_ */
diff --git a/src/emu/netlist/devices/nld_9316.c b/src/emu/netlist/devices/nld_9316.c
index ede8e0c0e68..b3b49c171b3 100644
--- a/src/emu/netlist/devices/nld_9316.c
+++ b/src/emu/netlist/devices/nld_9316.c
@@ -7,148 +7,147 @@
NETLIB_START(9316)
{
- register_sub(sub, "sub");
+ register_sub(sub, "sub");
- register_subalias("CLK", sub.m_clk);
+ register_subalias("CLK", sub.m_clk);
- register_input("ENP", m_ENP);
- register_input("ENT", m_ENT);
- register_input("CLRQ", m_CLRQ);
- register_input("LOADQ", m_LOADQ);
+ register_input("ENP", m_ENP);
+ register_input("ENT", m_ENT);
+ register_input("CLRQ", m_CLRQ);
+ register_input("LOADQ", m_LOADQ);
- register_subalias("A", sub.m_A);
- register_subalias("B", sub.m_B);
- register_subalias("C", sub.m_C);
- register_subalias("D", sub.m_D);
+ register_subalias("A", sub.m_A);
+ register_subalias("B", sub.m_B);
+ register_subalias("C", sub.m_C);
+ register_subalias("D", sub.m_D);
- register_subalias("QA", sub.m_QA);
- register_subalias("QB", sub.m_QB);
- register_subalias("QC", sub.m_QC);
- register_subalias("QD", sub.m_QD);
- register_subalias("RC", sub.m_RC);
+ register_subalias("QA", sub.m_QA);
+ register_subalias("QB", sub.m_QB);
+ register_subalias("QC", sub.m_QC);
+ register_subalias("QD", sub.m_QD);
+ register_subalias("RC", sub.m_RC);
}
NETLIB_START(9316_sub)
{
- m_cnt = 0;
- m_loadq = 1;
- m_ent = 1;
-
- register_input("CLK", m_clk, netlist_input_t::STATE_INP_LH);
-
- register_input("A", m_A, netlist_input_t::STATE_INP_PASSIVE);
- register_input("B", m_B, netlist_input_t::STATE_INP_PASSIVE);
- register_input("C", m_C, netlist_input_t::STATE_INP_PASSIVE);
- register_input("D", m_D, netlist_input_t::STATE_INP_PASSIVE);
-
- register_output("QA", m_QA);
- register_output("QB", m_QB);
- register_output("QC", m_QC);
- register_output("QD", m_QD);
- register_output("RC", m_RC);
-
- save(NAME(m_cnt));
- save(NAME(m_loadq));
- save(NAME(m_ent));
+ m_cnt = 0;
+ m_loadq = 1;
+ m_ent = 1;
+
+ register_input("CLK", m_clk, netlist_input_t::STATE_INP_LH);
+
+ register_input("A", m_A, netlist_input_t::STATE_INP_PASSIVE);
+ register_input("B", m_B, netlist_input_t::STATE_INP_PASSIVE);
+ register_input("C", m_C, netlist_input_t::STATE_INP_PASSIVE);
+ register_input("D", m_D, netlist_input_t::STATE_INP_PASSIVE);
+
+ register_output("QA", m_QA);
+ register_output("QB", m_QB);
+ register_output("QC", m_QC);
+ register_output("QD", m_QD);
+ register_output("RC", m_RC);
+
+ save(NAME(m_cnt));
+ save(NAME(m_loadq));
+ save(NAME(m_ent));
}
NETLIB_UPDATE(9316_sub)
{
- UINT8 cnt = m_cnt;
- if (m_loadq)
- {
- cnt = ( cnt + 1) & 0x0f;
- update_outputs(cnt);
- if (cnt == 0x0f)
- OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
- else if (cnt == 0)
- OUTLOGIC(m_RC, 0, NLTIME_FROM_NS(20));
- }
- else
- {
- cnt = (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
- update_outputs_all(cnt);
- OUTLOGIC(m_RC, m_ent & (cnt == 0x0f), NLTIME_FROM_NS(20));
- }
- m_cnt = cnt;
+ UINT8 cnt = m_cnt;
+ if (m_loadq)
+ {
+ cnt = ( cnt + 1) & 0x0f;
+ update_outputs(cnt);
+ if (cnt == 0x0f)
+ OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
+ else if (cnt == 0)
+ OUTLOGIC(m_RC, 0, NLTIME_FROM_NS(20));
+ }
+ else
+ {
+ cnt = (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+ update_outputs_all(cnt);
+ OUTLOGIC(m_RC, m_ent & (cnt == 0x0f), NLTIME_FROM_NS(20));
+ }
+ m_cnt = cnt;
}
NETLIB_UPDATE(9316)
{
- sub.m_loadq = INPLOGIC(m_LOADQ);
- sub.m_ent = INPLOGIC(m_ENT);
- const netlist_sig_t clrq = INPLOGIC(m_CLRQ);
-
- if ((!sub.m_loadq || (sub.m_ent & INPLOGIC(m_ENP))) & clrq)
- {
- sub.m_clk.activate_lh();
- }
- else
- {
- sub.m_clk.inactivate();
- if (!clrq & (sub.m_cnt>0))
- {
- sub.m_cnt = 0;
- sub.update_outputs(sub.m_cnt);
- OUTLOGIC(sub.m_RC, 0, NLTIME_FROM_NS(20));
- return;
- }
- }
- OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == 0x0f), NLTIME_FROM_NS(20));
+ sub.m_loadq = INPLOGIC(m_LOADQ);
+ sub.m_ent = INPLOGIC(m_ENT);
+ const netlist_sig_t clrq = INPLOGIC(m_CLRQ);
+
+ if ((!sub.m_loadq || (sub.m_ent & INPLOGIC(m_ENP))) & clrq)
+ {
+ sub.m_clk.activate_lh();
+ }
+ else
+ {
+ sub.m_clk.inactivate();
+ if (!clrq & (sub.m_cnt>0))
+ {
+ sub.m_cnt = 0;
+ sub.update_outputs(sub.m_cnt);
+ OUTLOGIC(sub.m_RC, 0, NLTIME_FROM_NS(20));
+ return;
+ }
+ }
+ OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == 0x0f), NLTIME_FROM_NS(20));
}
inline NETLIB_FUNC_VOID(9316_sub, update_outputs_all, (const UINT8 cnt))
{
- const netlist_time out_delay = NLTIME_FROM_NS(20);
- OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
- OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
- OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
- OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay);
+ const netlist_time out_delay = NLTIME_FROM_NS(20);
+ OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
+ OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
+ OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
+ OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay);
}
inline NETLIB_FUNC_VOID(9316_sub, update_outputs, (const UINT8 cnt))
{
- const netlist_time out_delay = NLTIME_FROM_NS(20);
+ const netlist_time out_delay = NLTIME_FROM_NS(20);
#if 0
// for (int i=0; i<4; i++)
// OUTLOGIC(m_Q[i], (cnt >> i) & 1, delay[i]);
- OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
- OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
- OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
- OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay);
+ OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
+ OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
+ OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
+ OUTLOGIC(m_QD, (cnt >> 3) & 1, out_delay);
#else
- if ((cnt & 1) == 1)
- OUTLOGIC(m_QA, 1, out_delay);
- else
- {
- OUTLOGIC(m_QA, 0, out_delay);
- switch (cnt)
- {
- case 0x00:
- OUTLOGIC(m_QB, 0, out_delay);
- OUTLOGIC(m_QC, 0, out_delay);
- OUTLOGIC(m_QD, 0, out_delay);
- break;
- case 0x02:
- case 0x06:
- case 0x0A:
- case 0x0E:
- OUTLOGIC(m_QB, 1, out_delay);
- break;
- case 0x04:
- case 0x0C:
- OUTLOGIC(m_QB, 0, out_delay);
- OUTLOGIC(m_QC, 1, out_delay);
- break;
- case 0x08:
- OUTLOGIC(m_QB, 0, out_delay);
- OUTLOGIC(m_QC, 0, out_delay);
- OUTLOGIC(m_QD, 1, out_delay);
- break;
- }
-
- }
+ if ((cnt & 1) == 1)
+ OUTLOGIC(m_QA, 1, out_delay);
+ else
+ {
+ OUTLOGIC(m_QA, 0, out_delay);
+ switch (cnt)
+ {
+ case 0x00:
+ OUTLOGIC(m_QB, 0, out_delay);
+ OUTLOGIC(m_QC, 0, out_delay);
+ OUTLOGIC(m_QD, 0, out_delay);
+ break;
+ case 0x02:
+ case 0x06:
+ case 0x0A:
+ case 0x0E:
+ OUTLOGIC(m_QB, 1, out_delay);
+ break;
+ case 0x04:
+ case 0x0C:
+ OUTLOGIC(m_QB, 0, out_delay);
+ OUTLOGIC(m_QC, 1, out_delay);
+ break;
+ case 0x08:
+ OUTLOGIC(m_QB, 0, out_delay);
+ OUTLOGIC(m_QC, 0, out_delay);
+ OUTLOGIC(m_QD, 1, out_delay);
+ break;
+ }
+
+ }
#endif
}
-
diff --git a/src/emu/netlist/devices/nld_9316.h b/src/emu/netlist/devices/nld_9316.h
index 886ef1c956c..7aa340a76d1 100644
--- a/src/emu/netlist/devices/nld_9316.h
+++ b/src/emu/netlist/devices/nld_9316.h
@@ -52,45 +52,45 @@
#include "../nl_base.h"
#define TTL_9316(_name, _CLK, _ENP, _ENT, _CLRQ, _LOADQ, _A, _B, _C, _D) \
- NET_REGISTER_DEV(9316, _name) \
- NET_CONNECT(_name, CLK, _CLK) \
- NET_CONNECT(_name, ENP, _ENP) \
- NET_CONNECT(_name, ENT, _ENT) \
- NET_CONNECT(_name, CLRQ, _CLRQ) \
- NET_CONNECT(_name, LOADQ,_LOADQ) \
- NET_CONNECT(_name, A, _A) \
- NET_CONNECT(_name, B, _B) \
- NET_CONNECT(_name, C, _C) \
- NET_CONNECT(_name, D, _D)
+ NET_REGISTER_DEV(9316, _name) \
+ NET_CONNECT(_name, CLK, _CLK) \
+ NET_CONNECT(_name, ENP, _ENP) \
+ NET_CONNECT(_name, ENT, _ENT) \
+ NET_CONNECT(_name, CLRQ, _CLRQ) \
+ NET_CONNECT(_name, LOADQ,_LOADQ) \
+ NET_CONNECT(_name, A, _A) \
+ NET_CONNECT(_name, B, _B) \
+ NET_CONNECT(_name, C, _C) \
+ NET_CONNECT(_name, D, _D)
NETLIB_SUBDEVICE(9316_sub,
- ATTR_HOT void update_outputs_all(const UINT8 cnt);
- ATTR_HOT void update_outputs(const UINT8 cnt);
+ ATTR_HOT void update_outputs_all(const UINT8 cnt);
+ ATTR_HOT void update_outputs(const UINT8 cnt);
- netlist_ttl_input_t m_clk;
+ netlist_ttl_input_t m_clk;
- netlist_ttl_input_t m_A;
- netlist_ttl_input_t m_B;
- netlist_ttl_input_t m_C;
- netlist_ttl_input_t m_D;
+ netlist_ttl_input_t m_A;
+ netlist_ttl_input_t m_B;
+ netlist_ttl_input_t m_C;
+ netlist_ttl_input_t m_D;
- UINT8 m_cnt;
- netlist_sig_t m_loadq;
- netlist_sig_t m_ent;
+ UINT8 m_cnt;
+ netlist_sig_t m_loadq;
+ netlist_sig_t m_ent;
- netlist_ttl_output_t m_QA;
- netlist_ttl_output_t m_QB;
- netlist_ttl_output_t m_QC;
- netlist_ttl_output_t m_QD;
- netlist_ttl_output_t m_RC;
+ netlist_ttl_output_t m_QA;
+ netlist_ttl_output_t m_QB;
+ netlist_ttl_output_t m_QC;
+ netlist_ttl_output_t m_QD;
+ netlist_ttl_output_t m_RC;
);
NETLIB_DEVICE(9316,
- NETLIB_NAME(9316_sub) sub;
- netlist_ttl_input_t m_ENP;
- netlist_ttl_input_t m_ENT;
- netlist_ttl_input_t m_CLRQ;
- netlist_ttl_input_t m_LOADQ;
+ NETLIB_NAME(9316_sub) sub;
+ netlist_ttl_input_t m_ENP;
+ netlist_ttl_input_t m_ENT;
+ netlist_ttl_input_t m_CLRQ;
+ netlist_ttl_input_t m_LOADQ;
);
#endif /* NLD_9316_H_ */
diff --git a/src/emu/netlist/devices/nld_legacy.c b/src/emu/netlist/devices/nld_legacy.c
index 4afe74a45d8..e23c7287ea0 100644
--- a/src/emu/netlist/devices/nld_legacy.c
+++ b/src/emu/netlist/devices/nld_legacy.c
@@ -7,141 +7,141 @@
NETLIB_START(nicMultiSwitch)
{
- static const char *sIN[8] = { "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8" };
- int i;
+ static const char *sIN[8] = { "i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8" };
+ int i;
- m_position = 0;
- m_low.initial(0);
+ m_position = 0;
+ m_low.initial(0);
- for (i=0; i<8; i++)
- {
- register_input(sIN[i], m_I[i]);
- m_low.net().register_con(m_I[i]);
- //m_I[i].set_net(m_low.m_net);
- }
- register_param("POS", m_POS, 0);
- register_output("Q", m_Q);
+ for (i=0; i<8; i++)
+ {
+ register_input(sIN[i], m_I[i]);
+ m_low.net().register_con(m_I[i]);
+ //m_I[i].set_net(m_low.m_net);
+ }
+ register_param("POS", m_POS, 0);
+ register_output("Q", m_Q);
- save(NAME(m_position));
+ save(NAME(m_position));
}
NETLIB_UPDATE(nicMultiSwitch)
{
- assert(m_position<8);
- OUTANALOG(m_Q, INPANALOG(m_I[m_position]), NLTIME_FROM_NS(1));
+ assert(m_position<8);
+ OUTANALOG(m_Q, INPANALOG(m_I[m_position]), NLTIME_FROM_NS(1));
}
NETLIB_UPDATE_PARAM(nicMultiSwitch)
{
- m_position = m_POS.Value();
- //update();
+ m_position = m_POS.Value();
+ //update();
}
NETLIB_START(nicMixer8)
{
- static const char *sI[8] = { "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8" };
- static const char *sR[8] = { "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8" };
- int i;
-
- m_low.initial(0);
-
- for (i=0; i<8; i++)
- {
- register_input(sI[i], m_I[i]);
- m_low.net().register_con(m_I[i]);
- //m_I[i].set_output(m_low);
- register_param(sR[i], m_R[i], 1e12);
- }
- register_output("Q", m_Q);
+ static const char *sI[8] = { "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8" };
+ static const char *sR[8] = { "R1", "R2", "R3", "R4", "R5", "R6", "R7", "R8" };
+ int i;
+
+ m_low.initial(0);
+
+ for (i=0; i<8; i++)
+ {
+ register_input(sI[i], m_I[i]);
+ m_low.net().register_con(m_I[i]);
+ //m_I[i].set_output(m_low);
+ register_param(sR[i], m_R[i], 1e12);
+ }
+ register_output("Q", m_Q);
}
NETLIB_UPDATE(nicMixer8)
{
- int i;
- double r = 0;
-
- for (i=0; i<8; i++)
- {
- r += m_w[i] * INPANALOG(m_I[i]);
- }
- OUTANALOG(m_Q, r, NLTIME_IMMEDIATE);
+ int i;
+ double r = 0;
+
+ for (i=0; i<8; i++)
+ {
+ r += m_w[i] * INPANALOG(m_I[i]);
+ }
+ OUTANALOG(m_Q, r, NLTIME_IMMEDIATE);
}
NETLIB_UPDATE_PARAM(nicMixer8)
{
- double t = 0;
- int i;
+ double t = 0;
+ int i;
- for (i=0; i<8; i++)
- t += 1.0 / m_R[i].Value();
- t = 1.0 / t;
+ for (i=0; i<8; i++)
+ t += 1.0 / m_R[i].Value();
+ t = 1.0 / t;
- for (i=0; i<8; i++)
- m_w[i] = t / m_R[i].Value();
+ for (i=0; i<8; i++)
+ m_w[i] = t / m_R[i].Value();
}
NETLIB_START(nicRSFF)
{
- register_input("S", m_S);
- register_input("R", m_R);
- register_output("Q", m_Q);
- register_output("QQ", m_QQ);
- m_Q.initial(0);
- m_QQ.initial(1);
+ register_input("S", m_S);
+ register_input("R", m_R);
+ register_output("Q", m_Q);
+ register_output("QQ", m_QQ);
+ m_Q.initial(0);
+ m_QQ.initial(1);
}
NETLIB_UPDATE(nicRSFF)
{
- if (INPLOGIC(m_S))
- {
- OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(10));
- OUTLOGIC(m_QQ, 0, NLTIME_FROM_NS(10));
- }
- else if (INPLOGIC(m_R))
- {
- OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(10));
- OUTLOGIC(m_QQ, 1, NLTIME_FROM_NS(10));
- }
+ if (INPLOGIC(m_S))
+ {
+ OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(10));
+ OUTLOGIC(m_QQ, 0, NLTIME_FROM_NS(10));
+ }
+ else if (INPLOGIC(m_R))
+ {
+ OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(10));
+ OUTLOGIC(m_QQ, 1, NLTIME_FROM_NS(10));
+ }
}
NETLIB_START(nicNE555N_MSTABLE)
{
- register_input("TRIG", m_trigger);
- register_input("CV", m_CV);
+ register_input("TRIG", m_trigger);
+ register_input("CV", m_CV);
- register_output("Q", m_Q);
- register_param("R", m_R, 0.0);
- register_param("C", m_C, 0.0);
- register_param("VS", m_VS, 5.0);
- register_param("VL", m_VL, 0.0 *5.0);
+ register_output("Q", m_Q);
+ register_param("R", m_R, 0.0);
+ register_param("C", m_C, 0.0);
+ register_param("VS", m_VS, 5.0);
+ register_param("VL", m_VL, 0.0 *5.0);
- m_THRESHOLD_OUT.init_object(*this, name() + "THRESHOLD");
- register_link_internal(m_THRESHOLD, m_THRESHOLD_OUT, netlist_input_t::STATE_INP_ACTIVE);
+ m_THRESHOLD_OUT.init_object(*this, name() + "THRESHOLD");
+ register_link_internal(m_THRESHOLD, m_THRESHOLD_OUT, netlist_input_t::STATE_INP_ACTIVE);
- m_Q.initial(5.0 * 0.4);
- m_last = false;
+ m_Q.initial(5.0 * 0.4);
+ m_last = false;
- save(NAME(m_last));
+ save(NAME(m_last));
}
inline double NETLIB_NAME(nicNE555N_MSTABLE)::nicNE555N_cv()
{
- return (m_CV.is_highz() ? 0.67 * m_VS.Value() : INPANALOG(m_CV));
+ return (m_CV.is_highz() ? 0.67 * m_VS.Value() : INPANALOG(m_CV));
}
inline double NETLIB_NAME(nicNE555N_MSTABLE)::nicNE555N_clamp(const double v, const double a, const double b)
{
- double ret = v;
- if (ret > m_VS.Value() - a)
- ret = m_VS.Value() - a;
- if (ret < b)
- ret = b;
- return ret;
+ double ret = v;
+ if (ret > m_VS.Value() - a)
+ ret = m_VS.Value() - a;
+ if (ret < b)
+ ret = b;
+ return ret;
}
NETLIB_UPDATE_PARAM(nicNE555N_MSTABLE)
@@ -150,46 +150,46 @@ NETLIB_UPDATE_PARAM(nicNE555N_MSTABLE)
NETLIB_UPDATE(nicNE555N_MSTABLE)
{
- update_param(); // FIXME : m_CV should be on a sub device ...
-
- double vt = nicNE555N_clamp(nicNE555N_cv(), 0.7, 1.4);
- bool bthresh = (INPANALOG(m_THRESHOLD) > vt);
- bool btrig = (INPANALOG(m_trigger) > nicNE555N_clamp(nicNE555N_cv() * 0.5, 0.7, 1.4));
- bool out = m_last;
-
- if (!btrig)
- {
- out = true;
- }
- else if (bthresh)
- {
- out = false;
- }
-
- if (!m_last && out)
- {
- double vl = m_VL.Value();
- double time;
-
- // FIXME : m_CV should be on a sub device ...
-
- // TI datasheet states minimum pulse of 10 us
- if (vt<vl)
- time = 10;
- else
- {
- time = - log((m_VS.Value()-vt)/(m_VS.Value()-vl)) * m_R.Value() * m_C.Value() * 1.0e6; // in us
- if (time < 10.0)
- time = 10.0;
- }
-
- OUTANALOG(m_Q, m_VS.Value() * 0.7, NLTIME_FROM_NS(100));
- OUTANALOG(m_THRESHOLD_OUT, m_VS.Value(), NLTIME_FROM_US(time ));
- }
- else if (m_last && !out)
- {
- OUTANALOG(m_Q, 0.25, NLTIME_FROM_NS(100));
- OUTANALOG(m_THRESHOLD_OUT, 0.0, NLTIME_FROM_NS(1));
- }
- m_last = out;
+ update_param(); // FIXME : m_CV should be on a sub device ...
+
+ double vt = nicNE555N_clamp(nicNE555N_cv(), 0.7, 1.4);
+ bool bthresh = (INPANALOG(m_THRESHOLD) > vt);
+ bool btrig = (INPANALOG(m_trigger) > nicNE555N_clamp(nicNE555N_cv() * 0.5, 0.7, 1.4));
+ bool out = m_last;
+
+ if (!btrig)
+ {
+ out = true;
+ }
+ else if (bthresh)
+ {
+ out = false;
+ }
+
+ if (!m_last && out)
+ {
+ double vl = m_VL.Value();
+ double time;
+
+ // FIXME : m_CV should be on a sub device ...
+
+ // TI datasheet states minimum pulse of 10 us
+ if (vt<vl)
+ time = 10;
+ else
+ {
+ time = - log((m_VS.Value()-vt)/(m_VS.Value()-vl)) * m_R.Value() * m_C.Value() * 1.0e6; // in us
+ if (time < 10.0)
+ time = 10.0;
+ }
+
+ OUTANALOG(m_Q, m_VS.Value() * 0.7, NLTIME_FROM_NS(100));
+ OUTANALOG(m_THRESHOLD_OUT, m_VS.Value(), NLTIME_FROM_US(time ));
+ }
+ else if (m_last && !out)
+ {
+ OUTANALOG(m_Q, 0.25, NLTIME_FROM_NS(100));
+ OUTANALOG(m_THRESHOLD_OUT, 0.0, NLTIME_FROM_NS(1));
+ }
+ m_last = out;
}
diff --git a/src/emu/netlist/devices/nld_legacy.h b/src/emu/netlist/devices/nld_legacy.h
index eb94dbfaba0..43cdd5f6be3 100644
--- a/src/emu/netlist/devices/nld_legacy.h
+++ b/src/emu/netlist/devices/nld_legacy.h
@@ -20,83 +20,83 @@
// ----------------------------------------------------------------------------------------
#define NETDEV_RSFF(_name, _S, _R) \
- NET_REGISTER_DEV(nicRSFF, _name) \
- NET_CONNECT(_name, S, _S) \
- NET_CONNECT(_name, R, _R)
+ NET_REGISTER_DEV(nicRSFF, _name) \
+ NET_CONNECT(_name, S, _S) \
+ NET_CONNECT(_name, R, _R)
#define NE555N_MSTABLE(_name, _TRIG, _CV) \
- NET_REGISTER_DEV(nicNE555N_MSTABLE, _name) \
- NET_CONNECT(_name, TRIG, _TRIG) \
- NET_CONNECT(_name, CV, _CV)
+ NET_REGISTER_DEV(nicNE555N_MSTABLE, _name) \
+ NET_CONNECT(_name, TRIG, _TRIG) \
+ NET_CONNECT(_name, CV, _CV)
#define NETDEV_MIXER3(_name, _I1, _I2, _I3) \
- NET_REGISTER_DEV(nicMixer8, _name) \
- NET_CONNECT(_name, I1, _I1) \
- NET_CONNECT(_name, I2, _I2) \
- NET_CONNECT(_name, I3, _I3)
+ NET_REGISTER_DEV(nicMixer8, _name) \
+ NET_CONNECT(_name, I1, _I1) \
+ NET_CONNECT(_name, I2, _I2) \
+ NET_CONNECT(_name, I3, _I3)
#define NETDEV_SWITCH2(_name, _i1, _i2) \
- NET_REGISTER_DEV(nicMultiSwitch, _name) \
- NET_CONNECT(_name, i1, _i1) \
- NET_CONNECT(_name, i2, _i2)
+ NET_REGISTER_DEV(nicMultiSwitch, _name) \
+ NET_CONNECT(_name, i1, _i1) \
+ NET_CONNECT(_name, i2, _i2)
// ----------------------------------------------------------------------------------------
// Devices ...
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE(nicRSFF,
- netlist_ttl_input_t m_S;
- netlist_ttl_input_t m_R;
+ netlist_ttl_input_t m_S;
+ netlist_ttl_input_t m_R;
- netlist_ttl_output_t m_Q;
- netlist_ttl_output_t m_QQ;
+ netlist_ttl_output_t m_Q;
+ netlist_ttl_output_t m_QQ;
);
NETLIB_DEVICE_WITH_PARAMS(nicMixer8,
- netlist_analog_input_t m_I[8];
+ netlist_analog_input_t m_I[8];
- netlist_analog_output_t m_Q;
- netlist_analog_output_t m_low;
+ netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_low;
- netlist_param_double_t m_R[8];
+ netlist_param_double_t m_R[8];
- double m_w[8];
+ double m_w[8];
);
NETLIB_DEVICE_WITH_PARAMS(nicNE555N_MSTABLE,
- //ATTR_HOT void timer_cb(INT32 timer_id);
+ //ATTR_HOT void timer_cb(INT32 timer_id);
- netlist_analog_input_t m_trigger;
- netlist_analog_input_t m_CV;
- netlist_analog_input_t m_THRESHOLD; /* internal */
+ netlist_analog_input_t m_trigger;
+ netlist_analog_input_t m_CV;
+ netlist_analog_input_t m_THRESHOLD; /* internal */
- bool m_last;
+ bool m_last;
- netlist_analog_output_t m_Q;
- netlist_analog_output_t m_THRESHOLD_OUT; /* internal */
+ netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_THRESHOLD_OUT; /* internal */
- //netlist_base_timer_t *m_timer;
- netlist_param_double_t m_R;
- netlist_param_double_t m_C;
- netlist_param_double_t m_VS;
- netlist_param_double_t m_VL;
+ //netlist_base_timer_t *m_timer;
+ netlist_param_double_t m_R;
+ netlist_param_double_t m_C;
+ netlist_param_double_t m_VS;
+ netlist_param_double_t m_VL;
- double nicNE555N_cv();
- double nicNE555N_clamp(const double v, const double a, const double b);
+ double nicNE555N_cv();
+ double nicNE555N_clamp(const double v, const double a, const double b);
);
NETLIB_DEVICE_WITH_PARAMS(nicMultiSwitch,
- netlist_analog_input_t m_I[8];
+ netlist_analog_input_t m_I[8];
- netlist_analog_output_t m_Q;
- netlist_analog_output_t m_low;
+ netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_low;
- netlist_param_int_t m_POS;
+ netlist_param_int_t m_POS;
- int m_position;
+ int m_position;
);
diff --git a/src/emu/netlist/devices/nld_log.c b/src/emu/netlist/devices/nld_log.c
index e175c4670a8..837923154ab 100644
--- a/src/emu/netlist/devices/nld_log.c
+++ b/src/emu/netlist/devices/nld_log.c
@@ -10,31 +10,31 @@
NETLIB_START(log)
{
- register_input("I", m_I);
+ register_input("I", m_I);
- pstring filename = "netlist_" + name() + ".log";
- m_file = fopen(filename, "w");
+ pstring filename = "netlist_" + name() + ".log";
+ m_file = fopen(filename, "w");
}
NETLIB_UPDATE(log)
{
- fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I));
+ fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I));
}
NETLIB_NAME(log)::~NETLIB_NAME(log)()
{
- fclose(m_file);
+ fclose(m_file);
}
NETLIB_START(logD)
{
- NETLIB_NAME(log)::start();
- register_input("I2", m_I2);
+ NETLIB_NAME(log)::start();
+ register_input("I2", m_I2);
}
NETLIB_UPDATE(logD)
{
- fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I) - INPANALOG(m_I2));
+ fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I) - INPANALOG(m_I2));
}
// FIXME: Implement wav later, this must be clock triggered device where the input to be written
@@ -42,19 +42,19 @@ NETLIB_UPDATE(logD)
#if 0
NETLIB_START(wav)
{
- register_input("I", m_I);
+ register_input("I", m_I);
- pstring filename = "netlist_" + name() + ".wav";
- m_file = wav_open(filename, sample_rate(), active_inputs()/2)
+ pstring filename = "netlist_" + name() + ".wav";
+ m_file = wav_open(filename, sample_rate(), active_inputs()/2)
}
NETLIB_UPDATE(wav)
{
- fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I));
+ fprintf(m_file, "%e %e\n", netlist().time().as_double(), INPANALOG(m_I));
}
NETLIB_NAME(log)::~NETLIB_NAME(wav)()
{
- fclose(m_file);
+ fclose(m_file);
}
#endif
diff --git a/src/emu/netlist/devices/nld_log.h b/src/emu/netlist/devices/nld_log.h
index f8910f51112..16d389263b8 100644
--- a/src/emu/netlist/devices/nld_log.h
+++ b/src/emu/netlist/devices/nld_log.h
@@ -21,32 +21,32 @@
#include "../nl_base.h"
#define NETDEV_LOG(_name, _I) \
- NET_REGISTER_DEV(log, _name) \
- NET_CONNECT(_name, I, _I)
+ NET_REGISTER_DEV(log, _name) \
+ NET_CONNECT(_name, I, _I)
NETLIB_DEVICE(log,
- ~NETLIB_NAME(log)();
- netlist_analog_input_t m_I;
+ ~NETLIB_NAME(log)();
+ netlist_analog_input_t m_I;
protected:
- FILE *m_file;
+ FILE *m_file;
);
#define NETDEV_LOGD(_name, _I, _I2) \
- NET_REGISTER_DEV(logD, _name) \
- NET_CONNECT(_name, I, _I) \
- NET_CONNECT(_name, I2, _I2)
+ NET_REGISTER_DEV(logD, _name) \
+ NET_CONNECT(_name, I, _I) \
+ NET_CONNECT(_name, I2, _I2)
NETLIB_DEVICE_DERIVED(logD, log,
- netlist_analog_input_t m_I2;
+ netlist_analog_input_t m_I2;
);
#if 0
NETLIB_DEVICE(wav,
- ~NETLIB_NAME(wav)();
- netlist_analog_input_t m_I;
+ ~NETLIB_NAME(wav)();
+ netlist_analog_input_t m_I;
private:
- // FIXME: rewrite sound/wavwrite.h to be an object ...
- void *m_file;
+ // FIXME: rewrite sound/wavwrite.h to be an object ...
+ void *m_file;
);
#endif
diff --git a/src/emu/netlist/devices/nld_ne555.c b/src/emu/netlist/devices/nld_ne555.c
index 06a616f2bb9..4eb20c75980 100644
--- a/src/emu/netlist/devices/nld_ne555.c
+++ b/src/emu/netlist/devices/nld_ne555.c
@@ -11,74 +11,73 @@
inline double NETLIB_NAME(NE555)::clamp(const double v, const double a, const double b)
{
- double ret = v;
- double vcc = TERMANALOG(m_R1.m_P);
+ double ret = v;
+ double vcc = TERMANALOG(m_R1.m_P);
- if (ret > vcc - a)
- ret = vcc - a;
- if (ret < b)
- ret = b;
- return ret;
+ if (ret > vcc - a)
+ ret = vcc - a;
+ if (ret < b)
+ ret = b;
+ return ret;
}
NETLIB_START(NE555)
{
+ register_sub(m_R1, "R1");
+ register_sub(m_R2, "R2");
+ register_sub(m_R3, "R3");
+ register_sub(m_RDIS, "RDIS");
- register_sub(m_R1, "R1");
- register_sub(m_R2, "R2");
- register_sub(m_R3, "R3");
- register_sub(m_RDIS, "RDIS");
+ register_subalias("GND", m_R3.m_N); // Pin 1
+ register_input("TRIG", m_TRIG); // Pin 2
+ register_output("OUT", m_OUT); // Pin 3
+ register_input("RESET", m_RESET); // Pin 4
+ register_subalias("CONT", m_R1.m_N); // Pin 5
+ register_input("THRESH", m_THRES); // Pin 6
+ register_subalias("DISCH", m_RDIS.m_P); // Pin 7
+ register_subalias("VCC", m_R1.m_P); // Pin 8
- register_subalias("GND", m_R3.m_N); // Pin 1
- register_input("TRIG", m_TRIG); // Pin 2
- register_output("OUT", m_OUT); // Pin 3
- register_input("RESET", m_RESET); // Pin 4
- register_subalias("CONT", m_R1.m_N); // Pin 5
- register_input("THRESH", m_THRES); // Pin 6
- register_subalias("DISCH", m_RDIS.m_P); // Pin 7
- register_subalias("VCC", m_R1.m_P); // Pin 8
+ m_R1.set_R(5000);
+ m_R2.set_R(5000);
+ m_R3.set_R(5000);
+ m_RDIS.set_R(R_OFF);
- m_R1.set_R(5000);
- m_R2.set_R(5000);
- m_R3.set_R(5000);
- m_RDIS.set_R(R_OFF);
+ setup().connect(m_R1.m_N, m_R2.m_P);
+ setup().connect(m_R2.m_N, m_R3.m_P);
+ setup().connect(m_RDIS.m_N, m_R3.m_N);
- setup().connect(m_R1.m_N, m_R2.m_P);
- setup().connect(m_R2.m_N, m_R3.m_P);
- setup().connect(m_RDIS.m_N, m_R3.m_N);
+ m_last_out = false;
- m_last_out = false;
-
- save(NAME(m_last_out));
+ save(NAME(m_last_out));
}
NETLIB_UPDATE(NE555)
{
- // FIXME: assumes GND is connected to 0V.
+ // FIXME: assumes GND is connected to 0V.
- double vt = clamp(TERMANALOG(m_R2.m_P), 0.7, 1.4);
- bool bthresh = (INPANALOG(m_THRES) > vt);
- bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2.m_N), 0.7, 1.4));
- bool out = m_last_out;
+ double vt = clamp(TERMANALOG(m_R2.m_P), 0.7, 1.4);
+ bool bthresh = (INPANALOG(m_THRES) > vt);
+ bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2.m_N), 0.7, 1.4));
+ bool out = m_last_out;
- if (!btrig)
- {
- out = true;
- }
- else if (bthresh)
- {
- out = false;
- }
+ if (!btrig)
+ {
+ out = true;
+ }
+ else if (bthresh)
+ {
+ out = false;
+ }
- if (!m_last_out && out)
- {
- OUTANALOG(m_OUT, TERMANALOG(m_R1.m_P), NLTIME_FROM_NS(100));
- m_RDIS.set_R(R_OFF);
- }
- else if (m_last_out && !out)
- {
- OUTANALOG(m_OUT, TERMANALOG(m_R3.m_N), NLTIME_FROM_NS(100));
- m_RDIS.set_R(R_ON);
- }
- m_last_out = out;
+ if (!m_last_out && out)
+ {
+ OUTANALOG(m_OUT, TERMANALOG(m_R1.m_P), NLTIME_FROM_NS(100));
+ m_RDIS.set_R(R_OFF);
+ }
+ else if (m_last_out && !out)
+ {
+ OUTANALOG(m_OUT, TERMANALOG(m_R3.m_N), NLTIME_FROM_NS(100));
+ m_RDIS.set_R(R_ON);
+ }
+ m_last_out = out;
}
diff --git a/src/emu/netlist/devices/nld_ne555.h b/src/emu/netlist/devices/nld_ne555.h
index a350a684c28..487e8d33789 100644
--- a/src/emu/netlist/devices/nld_ne555.h
+++ b/src/emu/netlist/devices/nld_ne555.h
@@ -23,22 +23,21 @@
#include "nld_twoterm.h"
#define NETDEV_NE555(_name) \
- NET_REGISTER_DEV(NE555, _name) \
-
+ NET_REGISTER_DEV(NE555, _name)
NETLIB_DEVICE(NE555,
- NETLIB_NAME(R) m_R1;
- NETLIB_NAME(R) m_R2;
- NETLIB_NAME(R) m_R3;
- NETLIB_NAME(R) m_RDIS;
+ NETLIB_NAME(R) m_R1;
+ NETLIB_NAME(R) m_R2;
+ NETLIB_NAME(R) m_R3;
+ NETLIB_NAME(R) m_RDIS;
- netlist_logic_input_t m_RESET;
- netlist_analog_input_t m_THRES;
- netlist_analog_input_t m_TRIG;
- netlist_analog_output_t m_OUT;
+ netlist_logic_input_t m_RESET;
+ netlist_analog_input_t m_THRES;
+ netlist_analog_input_t m_TRIG;
+ netlist_analog_output_t m_OUT;
- bool m_last_out;
+ bool m_last_out;
- double clamp(const double v, const double a, const double b);
+ double clamp(const double v, const double a, const double b);
);
diff --git a/src/emu/netlist/devices/nld_signal.h b/src/emu/netlist/devices/nld_signal.h
index a9e99ec381d..e54eaac7372 100644
--- a/src/emu/netlist/devices/nld_signal.h
+++ b/src/emu/netlist/devices/nld_signal.h
@@ -93,7 +93,7 @@ public:
{
register_input(sIN[i], m_i[i]);
}
- save(NAME(m_active));
+ save(NAME(m_active));
}
#if (USE_DEACTIVE_DEVICE)
@@ -167,7 +167,7 @@ public:
{
register_input(sIN[i], m_i[i], netlist_input_t::STATE_INP_ACTIVE);
}
- save(NAME(m_active));
+ save(NAME(m_active));
}
#if (USE_DEACTIVE_DEVICE)
diff --git a/src/emu/netlist/devices/nld_solver.c b/src/emu/netlist/devices/nld_solver.c
index b02f5e4d701..7c8ed65d0e5 100644
--- a/src/emu/netlist/devices/nld_solver.c
+++ b/src/emu/netlist/devices/nld_solver.c
@@ -15,155 +15,155 @@
ATTR_COLD void netlist_matrix_solver_t::setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &aowner)
{
- m_owner = &aowner;
- for (netlist_net_t::list_t::entry_t *pn = nets.first(); pn != NULL; pn = nets.next(pn))
- {
- NL_VERBOSE_OUT(("setting up net\n"));
-
- m_nets.add(pn->object());
- pn->object()->m_solver = this;
-
- for (netlist_core_terminal_t *p = pn->object()->m_head; p != NULL; p = p->m_update_list_next)
- {
- switch (p->type())
- {
- case netlist_terminal_t::TERMINAL:
- switch (p->netdev().family())
- {
- case netlist_device_t::CAPACITOR:
- if (!m_steps.contains(&p->netdev()))
- m_steps.add(&p->netdev());
- break;
- case netlist_device_t::DIODE:
- //case netlist_device_t::VCVS:
- //case netlist_device_t::BJT_SWITCH:
- if (!m_dynamic.contains(&p->netdev()))
- m_dynamic.add(&p->netdev());
- break;
- default:
- break;
- }
- pn->object()->m_terms.add(static_cast<netlist_terminal_t *>(p));
- NL_VERBOSE_OUT(("Added terminal\n"));
- break;
- case netlist_terminal_t::INPUT:
- if (!m_inps.contains(&p->netdev()))
- m_inps.add(&p->netdev());
- NL_VERBOSE_OUT(("Added input\n"));
- break;
- default:
- owner().netlist().xfatalerror("unhandled element found\n");
- break;
- }
- }
- }
+ m_owner = &aowner;
+ for (netlist_net_t::list_t::entry_t *pn = nets.first(); pn != NULL; pn = nets.next(pn))
+ {
+ NL_VERBOSE_OUT(("setting up net\n"));
+
+ m_nets.add(pn->object());
+ pn->object()->m_solver = this;
+
+ for (netlist_core_terminal_t *p = pn->object()->m_head; p != NULL; p = p->m_update_list_next)
+ {
+ switch (p->type())
+ {
+ case netlist_terminal_t::TERMINAL:
+ switch (p->netdev().family())
+ {
+ case netlist_device_t::CAPACITOR:
+ if (!m_steps.contains(&p->netdev()))
+ m_steps.add(&p->netdev());
+ break;
+ case netlist_device_t::DIODE:
+ //case netlist_device_t::VCVS:
+ //case netlist_device_t::BJT_SWITCH:
+ if (!m_dynamic.contains(&p->netdev()))
+ m_dynamic.add(&p->netdev());
+ break;
+ default:
+ break;
+ }
+ pn->object()->m_terms.add(static_cast<netlist_terminal_t *>(p));
+ NL_VERBOSE_OUT(("Added terminal\n"));
+ break;
+ case netlist_terminal_t::INPUT:
+ if (!m_inps.contains(&p->netdev()))
+ m_inps.add(&p->netdev());
+ NL_VERBOSE_OUT(("Added input\n"));
+ break;
+ default:
+ owner().netlist().xfatalerror("unhandled element found\n");
+ break;
+ }
+ }
+ }
}
ATTR_HOT inline void netlist_matrix_solver_t::step(const netlist_time delta)
{
- const double dd = delta.as_double();
- for (dev_list_t::entry_t *p = m_steps.first(); p != NULL; p = m_steps.next(p))
- p->object()->step_time(dd);
+ const double dd = delta.as_double();
+ for (dev_list_t::entry_t *p = m_steps.first(); p != NULL; p = m_steps.next(p))
+ p->object()->step_time(dd);
}
ATTR_HOT inline void netlist_matrix_solver_t::update_inputs()
{
- for (dev_list_t::entry_t *p = m_inps.first(); p != NULL; p = m_inps.next(p))
- p->object()->update_dev();
+ for (dev_list_t::entry_t *p = m_inps.first(); p != NULL; p = m_inps.next(p))
+ p->object()->update_dev();
}
ATTR_HOT inline bool netlist_matrix_solver_t::solve()
{
- bool resched = false;
-
- /* update all non-linear devices */
- for (dev_list_t::entry_t *p = m_dynamic.first(); p != NULL; p = m_dynamic.next(p))
- switch (p->object()->family())
- {
- case netlist_device_t::DIODE:
- static_cast<NETLIB_NAME(D) *>(p->object())->update_terminals();
- break;
- default:
- p->object()->update_terminals();
- break;
- }
-
- for (netlist_net_t::list_t::entry_t *pn = m_nets.first(); pn != NULL; pn = m_nets.next(pn))
- {
- netlist_net_t *net = pn->object();
-
- double gtot = 0;
- double gabs = 0;
- double iIdr = 0;
- const netlist_net_t::terminal_list_t &terms = net->m_terms;
+ bool resched = false;
+
+ /* update all non-linear devices */
+ for (dev_list_t::entry_t *p = m_dynamic.first(); p != NULL; p = m_dynamic.next(p))
+ switch (p->object()->family())
+ {
+ case netlist_device_t::DIODE:
+ static_cast<NETLIB_NAME(D) *>(p->object())->update_terminals();
+ break;
+ default:
+ p->object()->update_terminals();
+ break;
+ }
+
+ for (netlist_net_t::list_t::entry_t *pn = m_nets.first(); pn != NULL; pn = m_nets.next(pn))
+ {
+ netlist_net_t *net = pn->object();
+
+ double gtot = 0;
+ double gabs = 0;
+ double iIdr = 0;
+ const netlist_net_t::terminal_list_t &terms = net->m_terms;
#if 1
- switch (terms.count())
- {
- case 1:
- {
- const netlist_terminal_t *pt = terms.first()->object();
- gtot = pt->m_gt;
- gabs = fabs(pt->m_go);
- iIdr = pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
- }
- break;
- case 2:
- {
- const netlist_terminal_t *pt1 = terms[0];
- const netlist_terminal_t *pt2 = terms[1];
- gtot = pt1->m_gt + pt2->m_gt;
- gabs = fabs(pt1->m_go) + fabs(pt2->m_go);
- iIdr = pt1->m_Idr + pt1->m_go * pt1->m_otherterm->net().Q_Analog()
- + pt2->m_Idr + pt2->m_go * pt2->m_otherterm->net().Q_Analog();
- }
- break;
- case 3:
- {
- const netlist_terminal_t *pt1 = terms[0];
- const netlist_terminal_t *pt2 = terms[1];
- const netlist_terminal_t *pt3 = terms[2];
- gtot = pt1->m_gt + pt2->m_gt + pt3->m_gt;
- gabs = fabs(pt1->m_go) + fabs(pt2->m_go) + fabs(pt3->m_go);
- iIdr = pt1->m_Idr + pt1->m_go * pt1->m_otherterm->net().Q_Analog()
- + pt2->m_Idr + pt2->m_go * pt2->m_otherterm->net().Q_Analog()
- + pt3->m_Idr + pt3->m_go * pt3->m_otherterm->net().Q_Analog();
- }
- break;
- default:
- for (netlist_net_t::terminal_list_t::entry_t *e = terms.first(); e != NULL; e = terms.next(e))
- {
- netlist_terminal_t *pt = e->object();
- gtot += pt->m_gt;
- gabs += fabs(pt->m_go);
- iIdr += pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
- }
- break;
- }
+ switch (terms.count())
+ {
+ case 1:
+ {
+ const netlist_terminal_t *pt = terms.first()->object();
+ gtot = pt->m_gt;
+ gabs = fabs(pt->m_go);
+ iIdr = pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
+ }
+ break;
+ case 2:
+ {
+ const netlist_terminal_t *pt1 = terms[0];
+ const netlist_terminal_t *pt2 = terms[1];
+ gtot = pt1->m_gt + pt2->m_gt;
+ gabs = fabs(pt1->m_go) + fabs(pt2->m_go);
+ iIdr = pt1->m_Idr + pt1->m_go * pt1->m_otherterm->net().Q_Analog()
+ + pt2->m_Idr + pt2->m_go * pt2->m_otherterm->net().Q_Analog();
+ }
+ break;
+ case 3:
+ {
+ const netlist_terminal_t *pt1 = terms[0];
+ const netlist_terminal_t *pt2 = terms[1];
+ const netlist_terminal_t *pt3 = terms[2];
+ gtot = pt1->m_gt + pt2->m_gt + pt3->m_gt;
+ gabs = fabs(pt1->m_go) + fabs(pt2->m_go) + fabs(pt3->m_go);
+ iIdr = pt1->m_Idr + pt1->m_go * pt1->m_otherterm->net().Q_Analog()
+ + pt2->m_Idr + pt2->m_go * pt2->m_otherterm->net().Q_Analog()
+ + pt3->m_Idr + pt3->m_go * pt3->m_otherterm->net().Q_Analog();
+ }
+ break;
+ default:
+ for (netlist_net_t::terminal_list_t::entry_t *e = terms.first(); e != NULL; e = terms.next(e))
+ {
+ netlist_terminal_t *pt = e->object();
+ gtot += pt->m_gt;
+ gabs += fabs(pt->m_go);
+ iIdr += pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
+ }
+ break;
+ }
#else
- for (netlist_net_t::terminal_list_t::entry_t *e = terms.first(); e != NULL; e = terms.next(e))
- {
- netlist_terminal_t *pt = e->object();
- gtot += pt->m_gt;
- gabs += fabs(pt->m_go);
- iIdr += pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
- }
+ for (netlist_net_t::terminal_list_t::entry_t *e = terms.first(); e != NULL; e = terms.next(e))
+ {
+ netlist_terminal_t *pt = e->object();
+ gtot += pt->m_gt;
+ gabs += fabs(pt->m_go);
+ iIdr += pt->m_Idr + pt->m_go * pt->m_otherterm->net().Q_Analog();
+ }
#endif
- double new_val;
- gabs *= m_convergence_factor;
- if (gabs > gtot)
- new_val = (net->m_cur.Analog * gabs + iIdr) / (gtot + gabs);
- else
- new_val = iIdr / gtot;
-
- if (fabs(new_val - net->m_cur.Analog) > m_accuracy)
- resched = true;
- net->m_cur.Analog = net->m_new.Analog = new_val;
-
- NL_VERBOSE_OUT(("Info: %d\n", pn->object()->m_num_cons));
- //NL_VERBOSE_OUT(("New: %lld %f %f\n", netlist().time().as_raw(), netlist().time().as_double(), new_val));
- }
- return resched;
+ double new_val;
+ gabs *= m_convergence_factor;
+ if (gabs > gtot)
+ new_val = (net->m_cur.Analog * gabs + iIdr) / (gtot + gabs);
+ else
+ new_val = iIdr / gtot;
+
+ if (fabs(new_val - net->m_cur.Analog) > m_accuracy)
+ resched = true;
+ net->m_cur.Analog = net->m_new.Analog = new_val;
+
+ NL_VERBOSE_OUT(("Info: %d\n", pn->object()->m_num_cons));
+ //NL_VERBOSE_OUT(("New: %lld %f %f\n", netlist().time().as_raw(), netlist().time().as_double(), new_val));
+ }
+ return resched;
}
// ----------------------------------------------------------------------------------------
@@ -174,160 +174,159 @@ typedef netlist_net_t::list_t *net_groups_t;
static bool already_processed(net_groups_t groups, int &cur_group, netlist_net_t *net)
{
- if (net->isRailNet())
- return true;
- for (int i = 0; i <= cur_group; i++)
- {
- if (groups[i].contains(net))
- return true;
- }
- return false;
+ if (net->isRailNet())
+ return true;
+ for (int i = 0; i <= cur_group; i++)
+ {
+ if (groups[i].contains(net))
+ return true;
+ }
+ return false;
}
static void process_net(net_groups_t groups, int &cur_group, netlist_net_t *net)
{
- /* add the net */
- if (net->m_head == NULL)
- return;
- groups[cur_group].add(net);
- for (netlist_core_terminal_t *p = net->m_head; p != NULL; p = p->m_update_list_next)
- {
- if (p->isType(netlist_terminal_t::TERMINAL))
- {
- netlist_terminal_t *pt = static_cast<netlist_terminal_t *>(p);
- netlist_net_t *nnet = &pt->m_otherterm->net();
- if (!already_processed(groups, cur_group, nnet))
- process_net(groups, cur_group, nnet);
- }
- }
+ /* add the net */
+ if (net->m_head == NULL)
+ return;
+ groups[cur_group].add(net);
+ for (netlist_core_terminal_t *p = net->m_head; p != NULL; p = p->m_update_list_next)
+ {
+ if (p->isType(netlist_terminal_t::TERMINAL))
+ {
+ netlist_terminal_t *pt = static_cast<netlist_terminal_t *>(p);
+ netlist_net_t *nnet = &pt->m_otherterm->net();
+ if (!already_processed(groups, cur_group, nnet))
+ process_net(groups, cur_group, nnet);
+ }
+ }
}
NETLIB_START(solver)
{
- register_output("Q_sync", m_Q_sync);
- register_output("Q_step", m_Q_step);
- //register_input("FB", m_feedback);
+ register_output("Q_sync", m_Q_sync);
+ register_output("Q_step", m_Q_step);
+ //register_input("FB", m_feedback);
- register_param("SYNC_DELAY", m_sync_delay, NLTIME_FROM_NS(10).as_double());
- m_nt_sync_delay = m_sync_delay.Value();
+ register_param("SYNC_DELAY", m_sync_delay, NLTIME_FROM_NS(10).as_double());
+ m_nt_sync_delay = m_sync_delay.Value();
- register_param("FREQ", m_freq, 48000.0);
- m_inc = netlist_time::from_hz(m_freq.Value());
+ register_param("FREQ", m_freq, 48000.0);
+ m_inc = netlist_time::from_hz(m_freq.Value());
- register_param("ACCURACY", m_accuracy, 1e-3);
- register_param("CONVERG", m_convergence, 0.3);
+ register_param("ACCURACY", m_accuracy, 1e-3);
+ register_param("CONVERG", m_convergence, 0.3);
- // internal staff
+ // internal staff
- register_input("FB_sync", m_fb_sync, netlist_input_t::STATE_INP_ACTIVE);
- register_input("FB_step", m_fb_step, netlist_input_t::STATE_INP_ACTIVE);
+ register_input("FB_sync", m_fb_sync, netlist_input_t::STATE_INP_ACTIVE);
+ register_input("FB_step", m_fb_step, netlist_input_t::STATE_INP_ACTIVE);
- setup().connect(m_fb_sync, m_Q_sync);
- setup().connect(m_fb_step, m_Q_step);
+ setup().connect(m_fb_sync, m_Q_sync);
+ setup().connect(m_fb_step, m_Q_step);
- m_last_step = netlist_time::zero;
+ m_last_step = netlist_time::zero;
- save(NAME(m_last_step));
+ save(NAME(m_last_step));
}
NETLIB_UPDATE_PARAM(solver)
{
- m_inc = netlist_time::from_hz(m_freq.Value());
+ m_inc = netlist_time::from_hz(m_freq.Value());
}
NETLIB_NAME(solver)::~NETLIB_NAME(solver)()
{
- netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first();
- while (e != NULL)
- {
- netlist_matrix_solver_t::list_t::entry_t *en = m_mat_solvers.next(e);
- delete e->object();
- e = en;
- }
+ netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first();
+ while (e != NULL)
+ {
+ netlist_matrix_solver_t::list_t::entry_t *en = m_mat_solvers.next(e);
+ delete e->object();
+ e = en;
+ }
}
NETLIB_FUNC_VOID(solver, post_start, ())
{
- netlist_net_t::list_t groups[100];
- int cur_group = -1;
-
- SOLVER_VERBOSE_OUT(("Scanning net groups ...\n"));
- // determine net groups
- for (netlist_net_t::list_t::entry_t *pn = netlist().m_nets.first(); pn != NULL; pn = netlist().m_nets.next(pn))
- {
- if (!already_processed(groups, cur_group, pn->object()))
- {
- cur_group++;
- process_net(groups, cur_group, pn->object());
- }
- }
-
- // setup the solvers
- SOLVER_VERBOSE_OUT(("Found %d net groups in %d nets\n", cur_group + 1, m_nets.count()));
- for (int i = 0; i <= cur_group; i++)
- {
- netlist_matrix_solver_t *ms = new netlist_matrix_solver_t();
- ms->m_accuracy = m_accuracy.Value();
- ms->m_convergence_factor = m_convergence.Value();
- ms->setup(groups[i], *this);
- m_mat_solvers.add(ms);
- SOLVER_VERBOSE_OUT(("%d ==> %d nets %s\n", i, groups[i].count(), groups[i].first()->object()->m_head->name().cstr()));
- SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_dynamic() ? "dynamic" : "no dynamic"));
- }
+ netlist_net_t::list_t groups[100];
+ int cur_group = -1;
+
+ SOLVER_VERBOSE_OUT(("Scanning net groups ...\n"));
+ // determine net groups
+ for (netlist_net_t::list_t::entry_t *pn = netlist().m_nets.first(); pn != NULL; pn = netlist().m_nets.next(pn))
+ {
+ if (!already_processed(groups, cur_group, pn->object()))
+ {
+ cur_group++;
+ process_net(groups, cur_group, pn->object());
+ }
+ }
+
+ // setup the solvers
+ SOLVER_VERBOSE_OUT(("Found %d net groups in %d nets\n", cur_group + 1, m_nets.count()));
+ for (int i = 0; i <= cur_group; i++)
+ {
+ netlist_matrix_solver_t *ms = new netlist_matrix_solver_t();
+ ms->m_accuracy = m_accuracy.Value();
+ ms->m_convergence_factor = m_convergence.Value();
+ ms->setup(groups[i], *this);
+ m_mat_solvers.add(ms);
+ SOLVER_VERBOSE_OUT(("%d ==> %d nets %s\n", i, groups[i].count(), groups[i].first()->object()->m_head->name().cstr()));
+ SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_dynamic() ? "dynamic" : "no dynamic"));
+ }
}
NETLIB_UPDATE(solver)
{
- //m_Q.setToNoCheck(!m_Q.new_Q(), m_inc );
- //OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc );
-
- bool resched = false;
- int resched_cnt = 0;
- netlist_time now = netlist().time();
- netlist_time delta = now - m_last_step;
-
- if (delta >= m_inc)
- {
- NL_VERBOSE_OUT(("Step!\n"));
- /* update all terminals for new time step */
- m_last_step = now;
- for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
- {
- e->object()->step(delta);
- }
- }
- bool global_resched = false;
- for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
- {
- resched_cnt = (e->object()->is_dynamic() ? 0 : 1);
- do {
- resched = e->object()->solve();
- resched_cnt++;
- } while ((resched && (resched_cnt < 5)) || (resched_cnt <= 1));
- global_resched = global_resched || resched;
- }
- //if (global_resched)
- // printf("rescheduled\n");
- if (global_resched)
- {
- schedule();
- }
- else
- {
- /* update all inputs connected */
- for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
- {
- e->object()->update_inputs();
- }
-
- /* step circuit */
- if (!m_Q_step.net().is_queued())
- m_Q_step.net().push_to_queue(m_inc);
- }
+ //m_Q.setToNoCheck(!m_Q.new_Q(), m_inc );
+ //OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc );
+
+ bool resched = false;
+ int resched_cnt = 0;
+ netlist_time now = netlist().time();
+ netlist_time delta = now - m_last_step;
+
+ if (delta >= m_inc)
+ {
+ NL_VERBOSE_OUT(("Step!\n"));
+ /* update all terminals for new time step */
+ m_last_step = now;
+ for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
+ {
+ e->object()->step(delta);
+ }
+ }
+ bool global_resched = false;
+ for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
+ {
+ resched_cnt = (e->object()->is_dynamic() ? 0 : 1);
+ do {
+ resched = e->object()->solve();
+ resched_cnt++;
+ } while ((resched && (resched_cnt < 5)) || (resched_cnt <= 1));
+ global_resched = global_resched || resched;
+ }
+ //if (global_resched)
+ // printf("rescheduled\n");
+ if (global_resched)
+ {
+ schedule();
+ }
+ else
+ {
+ /* update all inputs connected */
+ for (netlist_matrix_solver_t::list_t::entry_t *e = m_mat_solvers.first(); e != NULL; e = m_mat_solvers.next(e))
+ {
+ e->object()->update_inputs();
+ }
+
+ /* step circuit */
+ if (!m_Q_step.net().is_queued())
+ m_Q_step.net().push_to_queue(m_inc);
+ }
}
-
diff --git a/src/emu/netlist/devices/nld_solver.h b/src/emu/netlist/devices/nld_solver.h
index 55216f70143..0f9d0f54c28 100644
--- a/src/emu/netlist/devices/nld_solver.h
+++ b/src/emu/netlist/devices/nld_solver.h
@@ -14,7 +14,7 @@
// ----------------------------------------------------------------------------------------
#define NETDEV_SOLVER(_name) \
- NET_REGISTER_DEV(solver, _name)
+ NET_REGISTER_DEV(solver, _name)
// ----------------------------------------------------------------------------------------
// solver
@@ -25,70 +25,70 @@ class NETLIB_NAME(solver);
class netlist_matrix_solver_t
{
public:
- typedef netlist_list_t<netlist_matrix_solver_t *> list_t;
- typedef netlist_core_device_t::list_t dev_list_t;
+ typedef netlist_list_t<netlist_matrix_solver_t *> list_t;
+ typedef netlist_core_device_t::list_t dev_list_t;
- ATTR_COLD void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner);
+ ATTR_COLD void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner);
- // return true if a reschedule is needed ...
- ATTR_HOT bool solve();
- ATTR_HOT void step(const netlist_time delta);
- ATTR_HOT void update_inputs();
+ // return true if a reschedule is needed ...
+ ATTR_HOT bool solve();
+ ATTR_HOT void step(const netlist_time delta);
+ ATTR_HOT void update_inputs();
- ATTR_HOT inline bool is_dynamic() { return m_dynamic.count() > 0; }
+ ATTR_HOT inline bool is_dynamic() { return m_dynamic.count() > 0; }
- inline const NETLIB_NAME(solver) &owner() const;
+ inline const NETLIB_NAME(solver) &owner() const;
- double m_accuracy;
- double m_convergence_factor;
+ double m_accuracy;
+ double m_convergence_factor;
private:
- netlist_net_t::list_t m_nets;
- dev_list_t m_dynamic;
- dev_list_t m_inps;
- dev_list_t m_steps;
+ netlist_net_t::list_t m_nets;
+ dev_list_t m_dynamic;
+ dev_list_t m_inps;
+ dev_list_t m_steps;
- NETLIB_NAME(solver) *m_owner;
+ NETLIB_NAME(solver) *m_owner;
};
NETLIB_DEVICE_WITH_PARAMS(solver,
- typedef netlist_core_device_t::list_t dev_list_t;
+ typedef netlist_core_device_t::list_t dev_list_t;
- netlist_ttl_input_t m_fb_sync;
- netlist_ttl_output_t m_Q_sync;
+ netlist_ttl_input_t m_fb_sync;
+ netlist_ttl_output_t m_Q_sync;
- netlist_ttl_input_t m_fb_step;
- netlist_ttl_output_t m_Q_step;
+ netlist_ttl_input_t m_fb_step;
+ netlist_ttl_output_t m_Q_step;
- netlist_param_double_t m_freq;
- netlist_param_double_t m_sync_delay;
- netlist_param_double_t m_accuracy;
- netlist_param_double_t m_convergence;
+ netlist_param_double_t m_freq;
+ netlist_param_double_t m_sync_delay;
+ netlist_param_double_t m_accuracy;
+ netlist_param_double_t m_convergence;
- netlist_time m_inc;
- netlist_time m_last_step;
- netlist_time m_nt_sync_delay;
+ netlist_time m_inc;
+ netlist_time m_last_step;
+ netlist_time m_nt_sync_delay;
- netlist_matrix_solver_t::list_t m_mat_solvers;
+ netlist_matrix_solver_t::list_t m_mat_solvers;
public:
- ~NETLIB_NAME(solver)();
+ ~NETLIB_NAME(solver)();
- ATTR_HOT inline void schedule();
+ ATTR_HOT inline void schedule();
- ATTR_COLD void post_start();
+ ATTR_COLD void post_start();
);
inline void NETLIB_NAME(solver)::schedule()
{
- // FIXME: time should be parameter;
- if (!m_Q_sync.net().is_queued())
- m_Q_sync.net().push_to_queue(m_nt_sync_delay);
+ // FIXME: time should be parameter;
+ if (!m_Q_sync.net().is_queued())
+ m_Q_sync.net().push_to_queue(m_nt_sync_delay);
}
inline const NETLIB_NAME(solver) &netlist_matrix_solver_t::owner() const
{
- return *m_owner;
+ return *m_owner;
}
diff --git a/src/emu/netlist/devices/nld_system.c b/src/emu/netlist/devices/nld_system.c
index f1ab75e9f8e..33bef136082 100644
--- a/src/emu/netlist/devices/nld_system.c
+++ b/src/emu/netlist/devices/nld_system.c
@@ -12,8 +12,8 @@
NETLIB_START(ttl_const)
{
- register_output("Q", m_Q);
- register_param("CONST", m_const, 0);
+ register_output("Q", m_Q);
+ register_param("CONST", m_const, 0);
}
NETLIB_UPDATE(ttl_const)
@@ -22,13 +22,13 @@ NETLIB_UPDATE(ttl_const)
NETLIB_UPDATE_PARAM(ttl_const)
{
- OUTLOGIC(m_Q, m_const.Value(), NLTIME_IMMEDIATE);
+ OUTLOGIC(m_Q, m_const.Value(), NLTIME_IMMEDIATE);
}
NETLIB_START(analog_const)
{
- register_output("Q", m_Q);
- register_param("CONST", m_const, 0.0);
+ register_output("Q", m_Q);
+ register_param("CONST", m_const, 0.0);
}
NETLIB_UPDATE(analog_const)
@@ -37,7 +37,7 @@ NETLIB_UPDATE(analog_const)
NETLIB_UPDATE_PARAM(analog_const)
{
- m_Q.initial(m_const.Value());
+ m_Q.initial(m_const.Value());
}
// ----------------------------------------------------------------------------------------
@@ -46,24 +46,24 @@ NETLIB_UPDATE_PARAM(analog_const)
NETLIB_START(clock)
{
- register_output("Q", m_Q);
- //register_input("FB", m_feedback);
+ register_output("Q", m_Q);
+ //register_input("FB", m_feedback);
- register_param("FREQ", m_freq, 7159000.0 * 5.0);
- m_inc = netlist_time::from_hz(m_freq.Value()*2);
+ register_param("FREQ", m_freq, 7159000.0 * 5.0);
+ m_inc = netlist_time::from_hz(m_freq.Value()*2);
- register_link_internal(m_feedback, m_Q, netlist_input_t::STATE_INP_ACTIVE);
+ register_link_internal(m_feedback, m_Q, netlist_input_t::STATE_INP_ACTIVE);
}
NETLIB_UPDATE_PARAM(clock)
{
- m_inc = netlist_time::from_hz(m_freq.Value()*2);
+ m_inc = netlist_time::from_hz(m_freq.Value()*2);
}
NETLIB_UPDATE(clock)
{
- OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc );
+ OUTLOGIC(m_Q, !m_Q.net().new_Q(), m_inc );
}
// ----------------------------------------------------------------------------------------
@@ -72,7 +72,7 @@ NETLIB_UPDATE(clock)
NETLIB_START(logic_input)
{
- register_output("Q", m_Q);
+ register_output("Q", m_Q);
}
NETLIB_UPDATE(logic_input)
@@ -85,7 +85,7 @@ NETLIB_UPDATE(logic_input)
NETLIB_START(analog_input)
{
- register_output("Q", m_Q);
+ register_output("Q", m_Q);
}
NETLIB_UPDATE(analog_input)
diff --git a/src/emu/netlist/devices/nld_system.h b/src/emu/netlist/devices/nld_system.h
index 0859d9cddef..323a10b4196 100644
--- a/src/emu/netlist/devices/nld_system.h
+++ b/src/emu/netlist/devices/nld_system.h
@@ -25,16 +25,16 @@
NETDEV_PARAM(_name.CONST, _v)
#define NETDEV_MAINCLOCK(_name) \
- NET_REGISTER_DEV(mainclock, _name)
+ NET_REGISTER_DEV(mainclock, _name)
#define NETDEV_CLOCK(_name) \
- NET_REGISTER_DEV(clock, _name)
+ NET_REGISTER_DEV(clock, _name)
#define NETDEV_LOGIC_INPUT(_name) \
- NET_REGISTER_DEV(logic_input, _name)
+ NET_REGISTER_DEV(logic_input, _name)
#define NETDEV_ANALOG_INPUT(_name) \
- NET_REGISTER_DEV(analog_input, _name)
+ NET_REGISTER_DEV(analog_input, _name)
// ----------------------------------------------------------------------------------------
// netdev_*_const
@@ -56,7 +56,7 @@ NETLIB_DEVICE_WITH_PARAMS(analog_const,
NETLIB_DEVICE_WITH_PARAMS(mainclock,
public:
- netlist_ttl_output_t m_Q;
+ netlist_ttl_output_t m_Q;
netlist_param_double_t m_freq;
netlist_time m_inc;
@@ -69,11 +69,11 @@ public:
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE_WITH_PARAMS(clock,
- netlist_ttl_input_t m_feedback;
- netlist_ttl_output_t m_Q;
+ netlist_ttl_input_t m_feedback;
+ netlist_ttl_output_t m_Q;
- netlist_param_double_t m_freq;
- netlist_time m_inc;
+ netlist_param_double_t m_freq;
+ netlist_time m_inc;
);
@@ -82,11 +82,11 @@ NETLIB_DEVICE_WITH_PARAMS(clock,
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE(logic_input,
- netlist_ttl_output_t m_Q;
+ netlist_ttl_output_t m_Q;
);
NETLIB_DEVICE(analog_input,
- netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_Q;
);
diff --git a/src/emu/netlist/devices/nld_twoterm.c b/src/emu/netlist/devices/nld_twoterm.c
index ddf7fc128cd..67262ea0cdd 100644
--- a/src/emu/netlist/devices/nld_twoterm.c
+++ b/src/emu/netlist/devices/nld_twoterm.c
@@ -12,10 +12,10 @@
// ----------------------------------------------------------------------------------------
ATTR_COLD NETLIB_NAME(twoterm)::NETLIB_NAME(twoterm)(const family_t afamily) :
- netlist_device_t(afamily)
+ netlist_device_t(afamily)
{
- m_P.m_otherterm = &m_N;
- m_N.m_otherterm = &m_P;
+ m_P.m_otherterm = &m_N;
+ m_N.m_otherterm = &m_P;
}
NETLIB_START(twoterm)
@@ -24,8 +24,8 @@ NETLIB_START(twoterm)
NETLIB_UPDATE(twoterm)
{
- /* only called if connected to a rail net ==> notify the solver to recalculate */
- netlist().solver()->schedule();
+ /* only called if connected to a rail net ==> notify the solver to recalculate */
+ netlist().solver()->schedule();
}
// ----------------------------------------------------------------------------------------
@@ -34,29 +34,29 @@ NETLIB_UPDATE(twoterm)
NETLIB_START(R_base)
{
- register_terminal("1", m_P);
- register_terminal("2", m_N);
+ register_terminal("1", m_P);
+ register_terminal("2", m_N);
}
NETLIB_UPDATE(R_base)
{
- NETLIB_NAME(twoterm)::update();
+ NETLIB_NAME(twoterm)::update();
}
NETLIB_START(R)
{
- NETLIB_NAME(R_base)::start();
- register_param("R", m_R, 1.0 / NETLIST_GMIN);
+ NETLIB_NAME(R_base)::start();
+ register_param("R", m_R, 1.0 / NETLIST_GMIN);
}
NETLIB_UPDATE(R)
{
- NETLIB_NAME(twoterm)::update();
+ NETLIB_NAME(twoterm)::update();
}
NETLIB_UPDATE_PARAM(R)
{
- set_R(m_R.Value());
+ set_R(m_R.Value());
}
// ----------------------------------------------------------------------------------------
@@ -65,30 +65,30 @@ NETLIB_UPDATE_PARAM(R)
NETLIB_START(POT)
{
- register_sub(m_R1, "R1");
- register_sub(m_R2, "R2");
+ register_sub(m_R1, "R1");
+ register_sub(m_R2, "R2");
- register_subalias("1", m_R1.m_P);
- register_subalias("2", m_R1.m_N);
- register_subalias("3", m_R2.m_N);
+ register_subalias("1", m_R1.m_P);
+ register_subalias("2", m_R1.m_N);
+ register_subalias("3", m_R2.m_N);
- setup().connect(m_R2.m_P, m_R1.m_N);
+ setup().connect(m_R2.m_P, m_R1.m_N);
- register_param("R", m_R, 1.0 / NETLIST_GMIN);
- register_param("DIAL", m_Dial, 0.5);
+ register_param("R", m_R, 1.0 / NETLIST_GMIN);
+ register_param("DIAL", m_Dial, 0.5);
}
NETLIB_UPDATE(POT)
{
- m_R1.update_dev();
- m_R2.update_dev();
+ m_R1.update_dev();
+ m_R2.update_dev();
}
NETLIB_UPDATE_PARAM(POT)
{
- m_R1.set_R(MAX(m_R.Value() * m_Dial.Value(), NETLIST_GMIN));
- m_R2.set_R(MAX(m_R.Value() * (1.0 - m_Dial.Value()), NETLIST_GMIN));
+ m_R1.set_R(MAX(m_R.Value() * m_Dial.Value(), NETLIST_GMIN));
+ m_R2.set_R(MAX(m_R.Value() * (1.0 - m_Dial.Value()), NETLIST_GMIN));
}
// ----------------------------------------------------------------------------------------
// nld_C
@@ -96,21 +96,21 @@ NETLIB_UPDATE_PARAM(POT)
NETLIB_START(C)
{
- register_terminal("1", m_P);
- register_terminal("2", m_N);
+ register_terminal("1", m_P);
+ register_terminal("2", m_N);
- register_param("C", m_C, 1e-6);
+ register_param("C", m_C, 1e-6);
}
NETLIB_UPDATE_PARAM(C)
{
- // set to some very small step time for now
- step_time(1e-9);
+ // set to some very small step time for now
+ step_time(1e-9);
}
NETLIB_UPDATE(C)
{
- NETLIB_NAME(twoterm)::update();
+ NETLIB_NAME(twoterm)::update();
}
// ----------------------------------------------------------------------------------------
@@ -119,59 +119,59 @@ NETLIB_UPDATE(C)
NETLIB_START(D)
{
- register_terminal("A", m_P);
- register_terminal("K", m_N);
- register_param("model", m_model, "");
+ register_terminal("A", m_P);
+ register_terminal("K", m_N);
+ register_param("model", m_model, "");
- m_Vd = 0.7;
+ m_Vd = 0.7;
- save(NAME(m_Vd));
+ save(NAME(m_Vd));
}
NETLIB_UPDATE_PARAM(D)
{
- m_Is = m_model.dValue("Is", 1e-15);
- m_n = m_model.dValue("N", 1);
+ m_Is = m_model.dValue("Is", 1e-15);
+ m_n = m_model.dValue("N", 1);
- m_Vt = 0.0258 * m_n;
+ m_Vt = 0.0258 * m_n;
- m_Vcrit = m_Vt * log(m_Vt / m_Is / sqrt(2.0));
- m_VtInv = 1.0 / m_Vt;
- NL_VERBOSE_OUT(("VCutoff: %f\n", m_Vcrit));
+ m_Vcrit = m_Vt * log(m_Vt / m_Is / sqrt(2.0));
+ m_VtInv = 1.0 / m_Vt;
+ NL_VERBOSE_OUT(("VCutoff: %f\n", m_Vcrit));
}
NETLIB_UPDATE(D)
{
- NETLIB_NAME(twoterm)::update();
+ NETLIB_NAME(twoterm)::update();
}
class diode
{
public:
- diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {}
- diode(const double Is, const double n)
- {
- m_Is = Is;
- m_VT = 0.0258 * n;
- m_VT_inv = 1.0 / m_VT;
- }
- void set(const double Is, const double n)
- {
- m_Is = Is;
- m_VT = 0.0258 * n;
- m_VT_inv = 1.0 / m_VT;
- }
- double I(const double V) const { return m_Is * exp(V * m_VT_inv) - m_Is; }
- double g(const double V) const { return m_Is * m_VT_inv * exp(V * m_VT_inv); }
- double V(const double I) const { return log(1.0 + I / m_Is) * m_VT; }
- double gI(const double I) const { return m_VT_inv * (I + m_Is); }
+ diode() : m_Is(1e-15), m_VT(0.0258), m_VT_inv(1.0 / m_VT) {}
+ diode(const double Is, const double n)
+ {
+ m_Is = Is;
+ m_VT = 0.0258 * n;
+ m_VT_inv = 1.0 / m_VT;
+ }
+ void set(const double Is, const double n)
+ {
+ m_Is = Is;
+ m_VT = 0.0258 * n;
+ m_VT_inv = 1.0 / m_VT;
+ }
+ double I(const double V) const { return m_Is * exp(V * m_VT_inv) - m_Is; }
+ double g(const double V) const { return m_Is * m_VT_inv * exp(V * m_VT_inv); }
+ double V(const double I) const { return log(1.0 + I / m_Is) * m_VT; }
+ double gI(const double I) const { return m_VT_inv * (I + m_Is); }
private:
- double m_Is;
- double m_VT;
- double m_VT_inv;
+ double m_Is;
+ double m_VT;
+ double m_VT_inv;
};
// ----------------------------------------------------------------------------------------
@@ -180,61 +180,61 @@ private:
NETLIB_START(Q)
{
- register_param("model", m_model, "");
+ register_param("model", m_model, "");
}
template <NETLIB_NAME(Q)::q_type _type>
NETLIB_START(QBJT_switch<_type>)
{
- NETLIB_NAME(Q)::start();
+ NETLIB_NAME(Q)::start();
- register_sub(m_RB, "RB");
- register_sub(m_RC, "RC");
- register_input("BV", m_BV);
- register_input("EV", m_EV);
+ register_sub(m_RB, "RB");
+ register_sub(m_RC, "RC");
+ register_input("BV", m_BV);
+ register_input("EV", m_EV);
- register_subalias("B", m_RB.m_P);
- register_subalias("E", m_RB.m_N);
- register_subalias("C", m_RC.m_P);
+ register_subalias("B", m_RB.m_P);
+ register_subalias("E", m_RB.m_N);
+ register_subalias("C", m_RC.m_P);
- setup().connect(m_RB.m_N, m_RC.m_N);
- setup().connect(m_RB.m_P, m_BV);
- setup().connect(m_RB.m_N, m_EV);
+ setup().connect(m_RB.m_N, m_RC.m_N);
+ setup().connect(m_RB.m_P, m_BV);
+ setup().connect(m_RB.m_N, m_EV);
- save(NAME(m_state_on));
+ save(NAME(m_state_on));
}
NETLIB_UPDATE(Q)
{
- netlist().solver()->schedule();
+ netlist().solver()->schedule();
}
template <NETLIB_NAME(Q)::q_type _type>
NETLIB_UPDATE_PARAM(QBJT_switch<_type>)
{
- double IS = m_model.dValue("IS", 1e-15);
- double BF = m_model.dValue("BF", 100);
- double NF = m_model.dValue("NF", 1);
- //double VJE = m_model.dValue("VJE", 0.75);
+ double IS = m_model.dValue("IS", 1e-15);
+ double BF = m_model.dValue("BF", 100);
+ double NF = m_model.dValue("NF", 1);
+ //double VJE = m_model.dValue("VJE", 0.75);
- double alpha = BF / (1.0 + BF);
+ double alpha = BF / (1.0 + BF);
- diode d(IS, NF);
+ diode d(IS, NF);
- // Assume 5mA Collector current for switch operation
+ // Assume 5mA Collector current for switch operation
- if (_type == BJT_NPN)
- m_V = d.V(0.005 / alpha);
- else
- m_V = - d.V(0.005 / alpha);
+ if (_type == BJT_NPN)
+ m_V = d.V(0.005 / alpha);
+ else
+ m_V = - d.V(0.005 / alpha);
- m_gB = d.gI(0.005 / alpha);
- if (m_gB < NETLIST_GMIN)
- m_gB = NETLIST_GMIN;
- m_gC = BF * m_gB; // very rough estimate
- //printf("%f %f \n", m_V, m_gB);
- m_RB.set(NETLIST_GMIN, 0.0, 0.0);
- m_RC.set(NETLIST_GMIN, 0.0, 0.0);
+ m_gB = d.gI(0.005 / alpha);
+ if (m_gB < NETLIST_GMIN)
+ m_gB = NETLIST_GMIN;
+ m_gC = BF * m_gB; // very rough estimate
+ //printf("%f %f \n", m_V, m_gB);
+ m_RB.set(NETLIST_GMIN, 0.0, 0.0);
+ m_RC.set(NETLIST_GMIN, 0.0, 0.0);
}
template NETLIB_START(QBJT_switch<NETLIB_NAME(Q)::BJT_NPN>);
@@ -248,40 +248,39 @@ template NETLIB_UPDATE_PARAM(QBJT_switch<NETLIB_NAME(Q)::BJT_PNP>);
NETLIB_START(VCCS)
{
- configure(1.0, NETLIST_GMIN);
+ configure(1.0, NETLIST_GMIN);
}
ATTR_COLD void NETLIB_NAME(VCCS)::configure(const double Gfac, const double GI)
{
-
- register_param("G", m_G, 1.0);
-
- register_terminal("IP", m_IP);
- register_terminal("IN", m_IN);
- register_terminal("OP", m_OP);
- register_terminal("ON", m_ON);
-
- m_OP1.init_object(*this, name() + ".OP1", netlist_core_terminal_t::STATE_INP_ACTIVE);
- m_ON1.init_object(*this, name() + ".ON1", netlist_core_terminal_t::STATE_INP_ACTIVE);
-
- const double m_mult = m_G.Value() * Gfac; // 1.0 ==> 1V ==> 1A
- m_IP.set(GI);
- m_IP.m_otherterm = &m_IN; // <= this should be NULL and terminal be filtered out prior to solving...
- m_IN.set(GI);
- m_IN.m_otherterm = &m_IP; // <= this should be NULL and terminal be filtered out prior to solving...
-
- m_OP.set(m_mult, 0.0);
- m_OP.m_otherterm = &m_IP;
- m_OP1.set(-m_mult, 0.0);
- m_OP1.m_otherterm = &m_IN;
-
- m_ON.set(-m_mult, 0.0);
- m_ON.m_otherterm = &m_IP;
- m_ON1.set(m_mult, 0.0);
- m_ON1.m_otherterm = &m_IN;
-
- setup().connect(m_OP, m_OP1);
- setup().connect(m_ON, m_ON1);
+ register_param("G", m_G, 1.0);
+
+ register_terminal("IP", m_IP);
+ register_terminal("IN", m_IN);
+ register_terminal("OP", m_OP);
+ register_terminal("ON", m_ON);
+
+ m_OP1.init_object(*this, name() + ".OP1", netlist_core_terminal_t::STATE_INP_ACTIVE);
+ m_ON1.init_object(*this, name() + ".ON1", netlist_core_terminal_t::STATE_INP_ACTIVE);
+
+ const double m_mult = m_G.Value() * Gfac; // 1.0 ==> 1V ==> 1A
+ m_IP.set(GI);
+ m_IP.m_otherterm = &m_IN; // <= this should be NULL and terminal be filtered out prior to solving...
+ m_IN.set(GI);
+ m_IN.m_otherterm = &m_IP; // <= this should be NULL and terminal be filtered out prior to solving...
+
+ m_OP.set(m_mult, 0.0);
+ m_OP.m_otherterm = &m_IP;
+ m_OP1.set(-m_mult, 0.0);
+ m_OP1.m_otherterm = &m_IN;
+
+ m_ON.set(-m_mult, 0.0);
+ m_ON.m_otherterm = &m_IP;
+ m_ON1.set(m_mult, 0.0);
+ m_ON1.m_otherterm = &m_IN;
+
+ setup().connect(m_OP, m_OP1);
+ setup().connect(m_ON, m_ON1);
}
NETLIB_UPDATE_PARAM(VCCS)
@@ -290,8 +289,8 @@ NETLIB_UPDATE_PARAM(VCCS)
NETLIB_UPDATE(VCCS)
{
- /* only called if connected to a rail net ==> notify the solver to recalculate */
- netlist().solver()->schedule();
+ /* only called if connected to a rail net ==> notify the solver to recalculate */
+ netlist().solver()->schedule();
}
// ----------------------------------------------------------------------------------------
@@ -300,25 +299,24 @@ NETLIB_UPDATE(VCCS)
NETLIB_START(VCVS)
{
- register_param("RO", m_RO, 1.0);
+ register_param("RO", m_RO, 1.0);
- const double gRO = 1.0 / m_RO.Value();
+ const double gRO = 1.0 / m_RO.Value();
- configure(gRO, NETLIST_GMIN);
+ configure(gRO, NETLIST_GMIN);
- m_OP2.init_object(*this, "OP2", netlist_core_terminal_t::STATE_INP_ACTIVE);
- m_ON2.init_object(*this, "ON2", netlist_core_terminal_t::STATE_INP_ACTIVE);
+ m_OP2.init_object(*this, "OP2", netlist_core_terminal_t::STATE_INP_ACTIVE);
+ m_ON2.init_object(*this, "ON2", netlist_core_terminal_t::STATE_INP_ACTIVE);
- m_OP2.set(gRO);
- m_ON2.set(gRO);
- m_OP2.m_otherterm = &m_ON2;
- m_ON2.m_otherterm = &m_OP2;
+ m_OP2.set(gRO);
+ m_ON2.set(gRO);
+ m_OP2.m_otherterm = &m_ON2;
+ m_ON2.m_otherterm = &m_OP2;
- setup().connect(m_OP2, m_OP1);
- setup().connect(m_ON2, m_ON1);
+ setup().connect(m_OP2, m_OP1);
+ setup().connect(m_ON2, m_ON1);
}
NETLIB_UPDATE_PARAM(VCVS)
{
}
-
diff --git a/src/emu/netlist/devices/nld_twoterm.h b/src/emu/netlist/devices/nld_twoterm.h
index 49b6ca3c629..6ebebf36903 100644
--- a/src/emu/netlist/devices/nld_twoterm.h
+++ b/src/emu/netlist/devices/nld_twoterm.h
@@ -40,30 +40,30 @@
// ----------------------------------------------------------------------------------------
#define NETDEV_R(_name, _R) \
- NET_REGISTER_DEV(R, _name) \
- NETDEV_PARAMI(_name, R, _R)
+ NET_REGISTER_DEV(R, _name) \
+ NETDEV_PARAMI(_name, R, _R)
#define NETDEV_POT(_name, _R) \
- NET_REGISTER_DEV(POT, _name) \
- NETDEV_PARAMI(_name, R, _R)
+ NET_REGISTER_DEV(POT, _name) \
+ NETDEV_PARAMI(_name, R, _R)
#define NETDEV_C(_name, _C) \
- NET_REGISTER_DEV(C, _name) \
- NETDEV_PARAMI(_name, C, _C)
+ NET_REGISTER_DEV(C, _name) \
+ NETDEV_PARAMI(_name, C, _C)
/* Generic Diode */
#define NETDEV_D(_name, _model) \
- NET_REGISTER_DEV(D, _name) \
- NETDEV_PARAMI(_name, model, # _model)
+ NET_REGISTER_DEV(D, _name) \
+ NETDEV_PARAMI(_name, model, # _model)
#define NETDEV_QPNP(_name, _model) \
- NET_REGISTER_DEV(QPNP_switch, _name) \
- NETDEV_PARAMI(_name, model, # _model)
+ NET_REGISTER_DEV(QPNP_switch, _name) \
+ NETDEV_PARAMI(_name, model, # _model)
#define NETDEV_QNPN(_name, _model) \
- NET_REGISTER_DEV(QNPN_switch, _name) \
- NETDEV_PARAMI(_name, model, # _model)
+ NET_REGISTER_DEV(QNPN_switch, _name) \
+ NETDEV_PARAMI(_name, model, # _model)
// ----------------------------------------------------------------------------------------
// Implementation
@@ -76,24 +76,24 @@
class NETLIB_NAME(twoterm) : public netlist_device_t
{
public:
- ATTR_COLD NETLIB_NAME(twoterm)(const family_t afamily);
+ ATTR_COLD NETLIB_NAME(twoterm)(const family_t afamily);
- netlist_terminal_t m_P;
- netlist_terminal_t m_N;
+ netlist_terminal_t m_P;
+ netlist_terminal_t m_N;
- virtual NETLIB_UPDATE_TERMINALS()
- {
- }
+ virtual NETLIB_UPDATE_TERMINALS()
+ {
+ }
- ATTR_HOT inline void set(const double G, const double V, const double I)
- {
- m_P.m_go = m_N.m_go = m_P.m_gt = m_N.m_gt = G;
- m_N.m_Idr = ( -V) * G + I;
- m_P.m_Idr = ( V) * G - I;
- }
+ ATTR_HOT inline void set(const double G, const double V, const double I)
+ {
+ m_P.m_go = m_N.m_go = m_P.m_gt = m_N.m_gt = G;
+ m_N.m_Idr = ( -V) * G + I;
+ m_P.m_Idr = ( V) * G - I;
+ }
protected:
- ATTR_COLD virtual void start();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_HOT ATTR_ALIGN void update();
private:
};
@@ -105,17 +105,17 @@ private:
class NETLIB_NAME(R_base) : public NETLIB_NAME(twoterm)
{
public:
- ATTR_COLD NETLIB_NAME(R_base)() : NETLIB_NAME(twoterm)(RESISTOR) { }
+ ATTR_COLD NETLIB_NAME(R_base)() : NETLIB_NAME(twoterm)(RESISTOR) { }
- inline void set_R(const double R) { set(1.0 / R, 0.0, 0.0); }
+ inline void set_R(const double R) { set(1.0 / R, 0.0, 0.0); }
protected:
- ATTR_COLD virtual void start();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_HOT ATTR_ALIGN void update();
};
NETLIB_DEVICE_WITH_PARAMS_DERIVED(R, R_base,
- netlist_param_double_t m_R;
+ netlist_param_double_t m_R;
);
// ----------------------------------------------------------------------------------------
@@ -123,11 +123,11 @@ NETLIB_DEVICE_WITH_PARAMS_DERIVED(R, R_base,
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE_WITH_PARAMS(POT,
- NETLIB_NAME(R_base) m_R1;
- NETLIB_NAME(R_base) m_R2;
+ NETLIB_NAME(R_base) m_R1;
+ NETLIB_NAME(R_base) m_R2;
- netlist_param_double_t m_R;
- netlist_param_double_t m_Dial;
+ netlist_param_double_t m_R;
+ netlist_param_double_t m_Dial;
);
@@ -138,21 +138,21 @@ NETLIB_DEVICE_WITH_PARAMS(POT,
class NETLIB_NAME(C) : public NETLIB_NAME(twoterm)
{
public:
- ATTR_COLD NETLIB_NAME(C)() : NETLIB_NAME(twoterm)(CAPACITOR) { }
+ ATTR_COLD NETLIB_NAME(C)() : NETLIB_NAME(twoterm)(CAPACITOR) { }
- ATTR_HOT void step_time(const double st)
- {
- double G = m_C.Value() / st;
- double I = -G * (m_P.net().Q_Analog()- m_N.net().Q_Analog());
- set(G, 0.0, I);
- }
+ ATTR_HOT void step_time(const double st)
+ {
+ double G = m_C.Value() / st;
+ double I = -G * (m_P.net().Q_Analog()- m_N.net().Q_Analog());
+ set(G, 0.0, I);
+ }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void update_param();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void update_param();
+ ATTR_HOT ATTR_ALIGN void update();
- netlist_param_double_t m_C;
+ netlist_param_double_t m_C;
};
@@ -167,87 +167,87 @@ protected:
#if 0
inline double fastexp_h(const double x)
{
- static const double ln2r = 1.442695040888963387;
- static const double ln2 = 0.693147180559945286;
- //static const double c3 = 0.166666666666666667;
+ static const double ln2r = 1.442695040888963387;
+ static const double ln2 = 0.693147180559945286;
+ //static const double c3 = 0.166666666666666667;
- const double y = x * ln2r;
- const unsigned int t = y;
- const double z = (x - ln2 * (double) t);
- const double zz = z * z;
- //const double zzz = zz * z;
+ const double y = x * ln2r;
+ const unsigned int t = y;
+ const double z = (x - ln2 * (double) t);
+ const double zz = z * z;
+ //const double zzz = zz * z;
- return (double)(1 << t)*(1.0 + z + 0.5 * zz); // + c3*zzz;
+ return (double)(1 << t)*(1.0 + z + 0.5 * zz); // + c3*zzz;
}
inline double fastexp(const double x)
{
- if (x<0)
- return 1.0 / fastexp_h(-x);
- else
- return fastexp_h(x);
+ if (x<0)
+ return 1.0 / fastexp_h(-x);
+ else
+ return fastexp_h(x);
}
#endif
class NETLIB_NAME(D) : public NETLIB_NAME(twoterm)
{
public:
- ATTR_COLD NETLIB_NAME(D)() : NETLIB_NAME(twoterm)(DIODE) { }
-
- NETLIB_UPDATE_TERMINALS()
- {
- const double nVd = m_P.net().Q_Analog()- m_N.net().Q_Analog();
-
- //FIXME: Optimize cutoff case
-
- double Id;
- double G;
-
- if (nVd < -5.0 * m_Vt)
- {
- m_Vd = nVd;
- G = NETLIST_GMIN;
- Id = - m_Is;
- }
- else if (nVd < m_Vcrit)
- {
- m_Vd = nVd;
-
- const double eVDVt = exp(m_Vd * m_VtInv);
- Id = m_Is * (eVDVt - 1.0);
- G = m_Is * m_VtInv * eVDVt;
- }
- else
- {
+ ATTR_COLD NETLIB_NAME(D)() : NETLIB_NAME(twoterm)(DIODE) { }
+
+ NETLIB_UPDATE_TERMINALS()
+ {
+ const double nVd = m_P.net().Q_Analog()- m_N.net().Q_Analog();
+
+ //FIXME: Optimize cutoff case
+
+ double Id;
+ double G;
+
+ if (nVd < -5.0 * m_Vt)
+ {
+ m_Vd = nVd;
+ G = NETLIST_GMIN;
+ Id = - m_Is;
+ }
+ else if (nVd < m_Vcrit)
+ {
+ m_Vd = nVd;
+
+ const double eVDVt = exp(m_Vd * m_VtInv);
+ Id = m_Is * (eVDVt - 1.0);
+ G = m_Is * m_VtInv * eVDVt;
+ }
+ else
+ {
#if defined(_MSC_VER) && _MSC_VER < 1800
- m_Vd = m_Vd + log((nVd - m_Vd) * m_VtInv + 1.0) * m_Vt;
+ m_Vd = m_Vd + log((nVd - m_Vd) * m_VtInv + 1.0) * m_Vt;
#else
- m_Vd = m_Vd + log1p((nVd - m_Vd) * m_VtInv) * m_Vt;
+ m_Vd = m_Vd + log1p((nVd - m_Vd) * m_VtInv) * m_Vt;
#endif
- const double eVDVt = exp(m_Vd * m_VtInv);
- Id = m_Is * (eVDVt - 1.0);
+ const double eVDVt = exp(m_Vd * m_VtInv);
+ Id = m_Is * (eVDVt - 1.0);
- G = m_Is * m_VtInv * eVDVt;
- }
+ G = m_Is * m_VtInv * eVDVt;
+ }
- double I = (Id - m_Vd * G);
- set(G, 0.0, I);
- }
+ double I = (Id - m_Vd * G);
+ set(G, 0.0, I);
+ }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void update_param();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void update_param();
+ ATTR_HOT ATTR_ALIGN void update();
- netlist_param_model_t m_model;
+ netlist_param_model_t m_model;
- double m_Vt;
- double m_Is;
- double m_n;
+ double m_Vt;
+ double m_Is;
+ double m_n;
- double m_VtInv;
- double m_Vcrit;
- double m_Vd;
+ double m_VtInv;
+ double m_Vcrit;
+ double m_Vd;
};
@@ -269,32 +269,32 @@ protected:
class NETLIB_NAME(Q) : public netlist_device_t
{
public:
- enum q_type {
- BJT_NPN,
- BJT_PNP
- };
+ enum q_type {
+ BJT_NPN,
+ BJT_PNP
+ };
- ATTR_COLD NETLIB_NAME(Q)(const q_type atype, const family_t afamily)
- : netlist_device_t(afamily)
- , m_qtype(atype) { }
+ ATTR_COLD NETLIB_NAME(Q)(const q_type atype, const family_t afamily)
+ : netlist_device_t(afamily)
+ , m_qtype(atype) { }
- inline q_type qtype() const { return m_qtype; }
- inline bool is_qtype(q_type atype) const { return m_qtype == atype; }
+ inline q_type qtype() const { return m_qtype; }
+ inline bool is_qtype(q_type atype) const { return m_qtype == atype; }
protected:
- ATTR_COLD virtual void start();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_HOT ATTR_ALIGN void update();
- netlist_param_model_t m_model;
+ netlist_param_model_t m_model;
private:
- q_type m_qtype;
+ q_type m_qtype;
};
class NETLIB_NAME(QBJT) : public NETLIB_NAME(Q)
{
public:
- ATTR_COLD NETLIB_NAME(QBJT)(const q_type atype, const family_t afamily)
- : NETLIB_NAME(Q)(atype, afamily) { }
+ ATTR_COLD NETLIB_NAME(QBJT)(const q_type atype, const family_t afamily)
+ : NETLIB_NAME(Q)(atype, afamily) { }
protected:
@@ -306,51 +306,51 @@ template <NETLIB_NAME(Q)::q_type _type>
class NETLIB_NAME(QBJT_switch) : public NETLIB_NAME(QBJT)
{
public:
- ATTR_COLD NETLIB_NAME(QBJT_switch)()
- : NETLIB_NAME(QBJT)(_type, BJT_SWITCH), m_gB(NETLIST_GMIN), m_gC(NETLIST_GMIN), m_V(0.0), m_state_on(0) { }
-
- NETLIB_UPDATEI()
- {
- double vE = INPANALOG(m_EV);
- double vB = INPANALOG(m_BV);
-
- int new_state = (vB - vE > m_V ) ? 1 : 0;
- if (m_state_on ^ new_state)
- {
- double gb = m_gB;
- double gc = m_gC;
- double v = m_V;
- if (!new_state )
- {
- // not conducting
- gb = NETLIST_GMIN;
- v = 0;
- gc = NETLIST_GMIN;
- }
- m_RB.set(gb, v, 0.0);
- m_RC.set(gc, 0.0, 0.0);
- m_state_on = new_state;
- m_RB.update_dev();
- m_RC.update_dev();
- }
-
- }
-
- NETLIB_NAME(R) m_RB;
- NETLIB_NAME(R) m_RC;
-
- netlist_analog_input_t m_BV;
- netlist_analog_input_t m_EV;
+ ATTR_COLD NETLIB_NAME(QBJT_switch)()
+ : NETLIB_NAME(QBJT)(_type, BJT_SWITCH), m_gB(NETLIST_GMIN), m_gC(NETLIST_GMIN), m_V(0.0), m_state_on(0) { }
+
+ NETLIB_UPDATEI()
+ {
+ double vE = INPANALOG(m_EV);
+ double vB = INPANALOG(m_BV);
+
+ int new_state = (vB - vE > m_V ) ? 1 : 0;
+ if (m_state_on ^ new_state)
+ {
+ double gb = m_gB;
+ double gc = m_gC;
+ double v = m_V;
+ if (!new_state )
+ {
+ // not conducting
+ gb = NETLIST_GMIN;
+ v = 0;
+ gc = NETLIST_GMIN;
+ }
+ m_RB.set(gb, v, 0.0);
+ m_RC.set(gc, 0.0, 0.0);
+ m_state_on = new_state;
+ m_RB.update_dev();
+ m_RC.update_dev();
+ }
+
+ }
+
+ NETLIB_NAME(R) m_RB;
+ NETLIB_NAME(R) m_RC;
+
+ netlist_analog_input_t m_BV;
+ netlist_analog_input_t m_EV;
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD void update_param();
+ ATTR_COLD virtual void start();
+ ATTR_COLD void update_param();
- double m_gB; // base conductance / switch on
- double m_gC; // collector conductance / switch on
- double m_V; // internal voltage source
- UINT8 m_state_on;
+ double m_gB; // base conductance / switch on
+ double m_gC; // collector conductance / switch on
+ double m_V; // internal voltage source
+ UINT8 m_state_on;
private:
};
@@ -380,35 +380,34 @@ typedef NETLIB_NAME(QBJT_switch)<NETLIB_NAME(Q)::BJT_NPN> NETLIB_NAME(QNPN_switc
*/
#define NETDEV_VCCS(_name) \
- NET_REGISTER_DEV(VCCS, _name) \
-
+ NET_REGISTER_DEV(VCCS, _name)
//NETDEV_PARAMI(_name, model, _model)
class NETLIB_NAME(VCCS) : public netlist_device_t
{
public:
- ATTR_COLD NETLIB_NAME(VCCS)()
- : netlist_device_t(VCCS) { }
- ATTR_COLD NETLIB_NAME(VCCS)(const family_t afamily)
- : netlist_device_t(afamily) { }
+ ATTR_COLD NETLIB_NAME(VCCS)()
+ : netlist_device_t(VCCS) { }
+ ATTR_COLD NETLIB_NAME(VCCS)(const family_t afamily)
+ : netlist_device_t(afamily) { }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void update_param();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void update_param();
+ ATTR_HOT ATTR_ALIGN void update();
- ATTR_COLD void configure(const double Gfac, const double GI);
+ ATTR_COLD void configure(const double Gfac, const double GI);
- netlist_terminal_t m_OP;
- netlist_terminal_t m_ON;
+ netlist_terminal_t m_OP;
+ netlist_terminal_t m_ON;
- netlist_terminal_t m_IP;
- netlist_terminal_t m_IN;
+ netlist_terminal_t m_IP;
+ netlist_terminal_t m_IN;
- netlist_terminal_t m_OP1;
- netlist_terminal_t m_ON1;
+ netlist_terminal_t m_OP1;
+ netlist_terminal_t m_ON1;
- netlist_param_double_t m_G;
+ netlist_param_double_t m_G;
};
// ----------------------------------------------------------------------------------------
@@ -439,28 +438,27 @@ protected:
*/
#define NETDEV_VCVS(_name) \
- NET_REGISTER_DEV(VCVS, _name) \
-
+ NET_REGISTER_DEV(VCVS, _name)
//NETDEV_PARAMI(_name, model, _model)
class NETLIB_NAME(VCVS) : public NETLIB_NAME(VCCS)
{
public:
- ATTR_COLD NETLIB_NAME(VCVS)()
- : NETLIB_NAME(VCCS)(VCVS) { }
+ ATTR_COLD NETLIB_NAME(VCVS)()
+ : NETLIB_NAME(VCCS)(VCVS) { }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void update_param();
- //ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void update_param();
+ //ATTR_HOT ATTR_ALIGN void update();
- netlist_terminal_t m_OP2;
- netlist_terminal_t m_ON2;
+ netlist_terminal_t m_OP2;
+ netlist_terminal_t m_ON2;
- double m_mult;
+ double m_mult;
- netlist_param_double_t m_RO;
+ netlist_param_double_t m_RO;
};