summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist')
-rw-r--r--src/emu/netlist/analog/nld_bjt.c175
-rw-r--r--src/emu/netlist/analog/nld_bjt.h234
-rw-r--r--src/emu/netlist/analog/nld_fourterm.c95
-rw-r--r--src/emu/netlist/analog/nld_fourterm.h56
-rw-r--r--src/emu/netlist/analog/nld_solver.c1318
-rw-r--r--src/emu/netlist/analog/nld_solver.h112
-rw-r--r--src/emu/netlist/analog/nld_switches.c50
-rw-r--r--src/emu/netlist/analog/nld_switches.h2
-rw-r--r--src/emu/netlist/analog/nld_twoterm.c60
-rw-r--r--src/emu/netlist/analog/nld_twoterm.h124
-rw-r--r--src/emu/netlist/devices/net_lib.c86
-rw-r--r--src/emu/netlist/devices/nld_4066.c90
-rw-r--r--src/emu/netlist/devices/nld_4066.h18
-rw-r--r--src/emu/netlist/devices/nld_7400.c59
-rw-r--r--src/emu/netlist/devices/nld_7400.h2
-rw-r--r--src/emu/netlist/devices/nld_7402.c59
-rw-r--r--src/emu/netlist/devices/nld_7402.h10
-rw-r--r--src/emu/netlist/devices/nld_7404.c62
-rw-r--r--src/emu/netlist/devices/nld_7404.h14
-rw-r--r--src/emu/netlist/devices/nld_7410.c51
-rw-r--r--src/emu/netlist/devices/nld_7410.h8
-rw-r--r--src/emu/netlist/devices/nld_74107.c56
-rw-r--r--src/emu/netlist/devices/nld_74107.h6
-rw-r--r--src/emu/netlist/devices/nld_74153.c93
-rw-r--r--src/emu/netlist/devices/nld_74153.h20
-rw-r--r--src/emu/netlist/devices/nld_7420.c35
-rw-r--r--src/emu/netlist/devices/nld_7420.h6
-rw-r--r--src/emu/netlist/devices/nld_7425.c39
-rw-r--r--src/emu/netlist/devices/nld_7425.h6
-rw-r--r--src/emu/netlist/devices/nld_7427.c51
-rw-r--r--src/emu/netlist/devices/nld_7427.h8
-rw-r--r--src/emu/netlist/devices/nld_7430.c27
-rw-r--r--src/emu/netlist/devices/nld_7430.h4
-rw-r--r--src/emu/netlist/devices/nld_7448.c225
-rw-r--r--src/emu/netlist/devices/nld_7448.h54
-rw-r--r--src/emu/netlist/devices/nld_7450.c107
-rw-r--r--src/emu/netlist/devices/nld_7450.h22
-rw-r--r--src/emu/netlist/devices/nld_7474.c66
-rw-r--r--src/emu/netlist/devices/nld_7474.h6
-rw-r--r--src/emu/netlist/devices/nld_7483.c40
-rw-r--r--src/emu/netlist/devices/nld_7483.h2
-rw-r--r--src/emu/netlist/devices/nld_7486.c51
-rw-r--r--src/emu/netlist/devices/nld_7486.h10
-rw-r--r--src/emu/netlist/devices/nld_7490.c69
-rw-r--r--src/emu/netlist/devices/nld_7490.h6
-rw-r--r--src/emu/netlist/devices/nld_7493.c58
-rw-r--r--src/emu/netlist/devices/nld_7493.h2
-rw-r--r--src/emu/netlist/devices/nld_74ls629.c194
-rw-r--r--src/emu/netlist/devices/nld_74ls629.h26
-rw-r--r--src/emu/netlist/devices/nld_9316.c93
-rw-r--r--src/emu/netlist/devices/nld_9316.h14
-rw-r--r--src/emu/netlist/devices/nld_legacy.c4
-rw-r--r--src/emu/netlist/devices/nld_ne555.c40
-rw-r--r--src/emu/netlist/devices/nld_ne555.h2
-rw-r--r--src/emu/netlist/devices/nld_signal.h172
-rw-r--r--src/emu/netlist/devices/nld_system.c10
-rw-r--r--src/emu/netlist/devices/nld_system.h256
-rw-r--r--src/emu/netlist/nl_base.c590
-rw-r--r--src/emu/netlist/nl_base.h1236
-rw-r--r--src/emu/netlist/nl_dice_compat.h52
-rw-r--r--src/emu/netlist/nl_lists.h596
-rw-r--r--src/emu/netlist/nl_parser.c600
-rw-r--r--src/emu/netlist/nl_parser.h424
-rw-r--r--src/emu/netlist/nl_setup.c238
-rw-r--r--src/emu/netlist/nl_setup.h20
-rw-r--r--src/emu/netlist/pstate.c38
-rw-r--r--src/emu/netlist/pstate.h38
-rw-r--r--src/emu/netlist/pstring.h16
68 files changed, 4195 insertions, 4218 deletions
diff --git a/src/emu/netlist/analog/nld_bjt.c b/src/emu/netlist/analog/nld_bjt.c
index 93893a97d10..c5feca26848 100644
--- a/src/emu/netlist/analog/nld_bjt.c
+++ b/src/emu/netlist/analog/nld_bjt.c
@@ -10,28 +10,28 @@
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;
};
@@ -42,7 +42,7 @@ private:
NETLIB_START(Q)
{
- register_param("model", m_model, "");
+ register_param("model", m_model, "");
}
NETLIB_RESET(Q)
@@ -60,56 +60,56 @@ NETLIB_UPDATE(Q)
NETLIB_START(QBJT_switch)
{
- NETLIB_NAME(Q)::start();
+ NETLIB_NAME(Q)::start();
- register_terminal("B", m_RB.m_P);
- register_terminal("E", m_RB.m_N);
- register_terminal("C", m_RC.m_P);
- register_terminal("_E1", m_RC.m_N);
+ register_terminal("B", m_RB.m_P);
+ register_terminal("E", m_RB.m_N);
+ register_terminal("C", m_RC.m_P);
+ register_terminal("_E1", m_RC.m_N);
- register_terminal("_B1", m_BC_dummy.m_P);
- register_terminal("_C1", m_BC_dummy.m_N);
+ register_terminal("_B1", m_BC_dummy.m_P);
+ register_terminal("_C1", m_BC_dummy.m_N);
- connect(m_RB.m_N, m_RC.m_N);
+ connect(m_RB.m_N, m_RC.m_N);
- connect(m_RB.m_P, m_BC_dummy.m_P);
- connect(m_RC.m_P, m_BC_dummy.m_N);
+ connect(m_RB.m_P, m_BC_dummy.m_P);
+ connect(m_RC.m_P, m_BC_dummy.m_N);
- save(NAME(m_state_on));
+ save(NAME(m_state_on));
- m_RB.set(netlist().gmin(), 0.0, 0.0);
- m_RC.set(netlist().gmin(), 0.0, 0.0);
+ m_RB.set(netlist().gmin(), 0.0, 0.0);
+ m_RC.set(netlist().gmin(), 0.0, 0.0);
- m_BC_dummy.set(netlist().gmin(), 0.0, 0.0);
+ m_BC_dummy.set(netlist().gmin(), 0.0, 0.0);
- m_state_on = 0;
+ m_state_on = 0;
- {
- double IS = m_model.model_value("IS", 1e-15);
- double BF = m_model.model_value("BF", 100);
- double NF = m_model.model_value("NF", 1);
- //double VJE = m_model.dValue("VJE", 0.75);
+ {
+ double IS = m_model.model_value("IS", 1e-15);
+ double BF = m_model.model_value("BF", 100);
+ double NF = m_model.model_value("NF", 1);
+ //double VJE = m_model.dValue("VJE", 0.75);
- set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
+ set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
- 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
- m_V = d.V(0.005 / alpha);
+ m_V = d.V(0.005 / alpha);
- /* Base current is 0.005 / beta
- * as a rough estimate, we just scale the conductance down */
+ /* Base current is 0.005 / beta
+ * as a rough estimate, we just scale the conductance down */
- m_gB = d.gI(0.005 / alpha);
+ m_gB = d.gI(0.005 / alpha);
- if (m_gB < netlist().gmin())
- m_gB = netlist().gmin();
- m_gC = d.gI(0.005); // very rough estimate
- //printf("%f %f \n", m_V, m_gB);
- }
+ if (m_gB < netlist().gmin())
+ m_gB = netlist().gmin();
+ m_gC = d.gI(0.005); // very rough estimate
+ //printf("%f %f \n", m_V, m_gB);
+ }
}
@@ -125,56 +125,56 @@ NETLIB_UPDATE_PARAM(QBJT_switch)
NETLIB_START(QBJT_EB)
{
- NETLIB_NAME(Q)::start();
+ NETLIB_NAME(Q)::start();
- register_terminal("E", m_D_EB.m_P); // Cathode
- register_terminal("B", m_D_EB.m_N); // Anode
+ register_terminal("E", m_D_EB.m_P); // Cathode
+ register_terminal("B", m_D_EB.m_N); // Anode
- register_terminal("C", m_D_CB.m_P); // Cathode
- register_terminal("_B1", m_D_CB.m_N); // Anode
+ register_terminal("C", m_D_CB.m_P); // Cathode
+ register_terminal("_B1", m_D_CB.m_N); // Anode
- register_terminal("_E1", m_D_EC.m_P);
- register_terminal("_C1", m_D_EC.m_N);
+ register_terminal("_E1", m_D_EC.m_P);
+ register_terminal("_C1", m_D_EC.m_N);
- connect(m_D_EB.m_P, m_D_EC.m_P);
- connect(m_D_EB.m_N, m_D_CB.m_N);
- connect(m_D_CB.m_P, m_D_EC.m_N);
+ connect(m_D_EB.m_P, m_D_EC.m_P);
+ connect(m_D_EB.m_N, m_D_CB.m_N);
+ connect(m_D_CB.m_P, m_D_EC.m_N);
- m_gD_BE.save("m_D_BE", *this);
- m_gD_BC.save("m_D_BC", *this);
+ m_gD_BE.save("m_D_BE", *this);
+ m_gD_BC.save("m_D_BC", *this);
- {
- double IS = m_model.model_value("IS", 1e-15);
- double BF = m_model.model_value("BF", 100);
- double NF = m_model.model_value("NF", 1);
- double BR = m_model.model_value("BR", 1);
- double NR = m_model.model_value("NR", 1);
- //double VJE = m_model.dValue("VJE", 0.75);
+ {
+ double IS = m_model.model_value("IS", 1e-15);
+ double BF = m_model.model_value("BF", 100);
+ double NF = m_model.model_value("NF", 1);
+ double BR = m_model.model_value("BR", 1);
+ double NR = m_model.model_value("NR", 1);
+ //double VJE = m_model.dValue("VJE", 0.75);
- set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
- //printf("type %s\n", m_model.model_type().cstr());
+ set_qtype((m_model.model_type() == "NPN") ? BJT_NPN : BJT_PNP);
+ //printf("type %s\n", m_model.model_type().cstr());
- m_alpha_f = BF / (1.0 + BF);
- m_alpha_r = BR / (1.0 + BR);
+ m_alpha_f = BF / (1.0 + BF);
+ m_alpha_r = BR / (1.0 + BR);
- m_gD_BE.set_param(IS / m_alpha_f, NF, netlist().gmin());
- m_gD_BC.set_param(IS / m_alpha_r, NR, netlist().gmin());
- }
+ m_gD_BE.set_param(IS / m_alpha_f, NF, netlist().gmin());
+ m_gD_BC.set_param(IS / m_alpha_r, NR, netlist().gmin());
+ }
}
NETLIB_UPDATE(QBJT_EB)
{
- if (!m_D_EB.m_P.net().isRailNet())
- m_D_EB.m_P.net().solve(); // Basis
- else if (!m_D_EB.m_N.net().isRailNet())
- m_D_EB.m_N.net().solve(); // Emitter
- else
- m_D_CB.m_N.net().solve(); // Collector
+ if (!m_D_EB.m_P.net().isRailNet())
+ m_D_EB.m_P.net().solve(); // Basis
+ else if (!m_D_EB.m_N.net().isRailNet())
+ m_D_EB.m_N.net().solve(); // Emitter
+ else
+ m_D_CB.m_N.net().solve(); // Collector
}
NETLIB_RESET(QBJT_EB)
{
- NETLIB_NAME(Q)::reset();
+ NETLIB_NAME(Q)::reset();
}
@@ -182,4 +182,3 @@ NETLIB_RESET(QBJT_EB)
NETLIB_UPDATE_PARAM(QBJT_EB)
{
}
-
diff --git a/src/emu/netlist/analog/nld_bjt.h b/src/emu/netlist/analog/nld_bjt.h
index 317a390bef4..78306f80ad9 100644
--- a/src/emu/netlist/analog/nld_bjt.h
+++ b/src/emu/netlist/analog/nld_bjt.h
@@ -14,12 +14,12 @@
// ----------------------------------------------------------------------------------------
#define QBJT_SW(_name, _model) \
- NET_REGISTER_DEV(QBJT_switch, _name) \
- NETDEV_PARAMI(_name, model, _model)
+ NET_REGISTER_DEV(QBJT_switch, _name) \
+ NETDEV_PARAMI(_name, model, _model)
#define QBJT_EB(_name, _model) \
- NET_REGISTER_DEV(QBJT_EB, _name) \
- NETDEV_PARAMI(_name, model, _model)
+ NET_REGISTER_DEV(QBJT_EB, _name) \
+ NETDEV_PARAMI(_name, model, _model)
// ----------------------------------------------------------------------------------------
@@ -31,34 +31,34 @@
class NETLIB_NAME(Q) : public netlist_device_t
{
public:
- enum q_type {
- BJT_NPN,
- BJT_PNP
- };
-
- ATTR_COLD NETLIB_NAME(Q)(const family_t afamily)
- : netlist_device_t(afamily)
- , m_qtype(BJT_NPN) { }
-
- inline q_type qtype() const { return m_qtype; }
- inline bool is_qtype(q_type atype) const { return m_qtype == atype; }
- inline void set_qtype(q_type atype) { m_qtype = atype; }
+ enum q_type {
+ BJT_NPN,
+ BJT_PNP
+ };
+
+ ATTR_COLD NETLIB_NAME(Q)(const family_t afamily)
+ : netlist_device_t(afamily)
+ , m_qtype(BJT_NPN) { }
+
+ inline q_type qtype() const { return m_qtype; }
+ inline bool is_qtype(q_type atype) const { return m_qtype == atype; }
+ inline void set_qtype(q_type atype) { m_qtype = atype; }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void reset();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void reset();
+ 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 family_t afamily)
- : NETLIB_NAME(Q)(afamily) { }
+ ATTR_COLD NETLIB_NAME(QBJT)(const family_t afamily)
+ : NETLIB_NAME(Q)(afamily) { }
protected:
@@ -89,63 +89,63 @@ private:
class NETLIB_NAME(QBJT_switch) : public NETLIB_NAME(QBJT)
{
public:
- ATTR_COLD NETLIB_NAME(QBJT_switch)()
- : NETLIB_NAME(QBJT)(BJT_SWITCH),
- m_RB(netlist_object_t::ANALOG),
- m_RC(netlist_object_t::ANALOG),
- m_BC_dummy(netlist_object_t::ANALOG),
- m_gB(NETLIST_GMIN_DEFAULT), m_gC(NETLIST_GMIN_DEFAULT), m_V(0.0), m_state_on(0) { }
-
- NETLIB_UPDATE_TERMINALS()
- {
- double m = (is_qtype( BJT_NPN) ? 1 : -1);
-
- int new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0;
- if (m_state_on ^ new_state)
- {
- double gb = m_gB;
- double gc = m_gC;
- double v = m_V * m;
- 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;
- }
- }
-
- ATTR_HOT ATTR_ALIGN void virtual update()
- {
- if (!m_RB.m_P.net().isRailNet())
- m_RB.m_P.net().solve(); // Basis
- else if (!m_RB.m_N.net().isRailNet())
- m_RB.m_N.net().solve(); // Emitter
- else if (!m_RC.m_P.net().isRailNet())
- m_RB.m_P.net().solve(); // Collector
- }
-
- nld_twoterm m_RB;
- nld_twoterm m_RC;
-
- // FIXME: the matrix solvers should be devices so we can properly
- // schedule them. This is a workaround and blows netgroup size
-
- nld_twoterm m_BC_dummy;
+ ATTR_COLD NETLIB_NAME(QBJT_switch)()
+ : NETLIB_NAME(QBJT)(BJT_SWITCH),
+ m_RB(netlist_object_t::ANALOG),
+ m_RC(netlist_object_t::ANALOG),
+ m_BC_dummy(netlist_object_t::ANALOG),
+ m_gB(NETLIST_GMIN_DEFAULT), m_gC(NETLIST_GMIN_DEFAULT), m_V(0.0), m_state_on(0) { }
+
+ NETLIB_UPDATE_TERMINALS()
+ {
+ double m = (is_qtype( BJT_NPN) ? 1 : -1);
+
+ int new_state = (m_RB.deltaV() * m > m_V ) ? 1 : 0;
+ if (m_state_on ^ new_state)
+ {
+ double gb = m_gB;
+ double gc = m_gC;
+ double v = m_V * m;
+ 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;
+ }
+ }
+
+ ATTR_HOT ATTR_ALIGN void virtual update()
+ {
+ if (!m_RB.m_P.net().isRailNet())
+ m_RB.m_P.net().solve(); // Basis
+ else if (!m_RB.m_N.net().isRailNet())
+ m_RB.m_N.net().solve(); // Emitter
+ else if (!m_RC.m_P.net().isRailNet())
+ m_RB.m_P.net().solve(); // Collector
+ }
+
+ nld_twoterm m_RB;
+ nld_twoterm m_RC;
+
+ // FIXME: the matrix solvers should be devices so we can properly
+ // schedule them. This is a workaround and blows netgroup size
+
+ nld_twoterm m_BC_dummy;
protected:
- ATTR_COLD virtual void start();
- ATTR_HOT void update_param();
+ ATTR_COLD virtual void start();
+ ATTR_HOT 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:
};
@@ -158,53 +158,53 @@ private:
class NETLIB_NAME(QBJT_EB) : public NETLIB_NAME(QBJT)
{
public:
- ATTR_COLD NETLIB_NAME(QBJT_EB)()
- : NETLIB_NAME(QBJT)(BJT_EB),
- m_D_CB(netlist_object_t::ANALOG),
- m_D_EB(netlist_object_t::ANALOG),
- m_D_EC(netlist_object_t::ANALOG)
- { }
-
- NETLIB_UPDATE_TERMINALS()
- {
- double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0);
-
- m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity);
- m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity);
-
- double gee = m_gD_BE.G();
- double gcc = m_gD_BC.G();
- double gec = m_alpha_r * gcc;
- double gce = m_alpha_f * gee;
- double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I();
- double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I();
- double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity;
- double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity;
- //double Ie = sIe + gee * -m_D_EB.deltaV() - gec * -m_D_CB.deltaV();
- //double Ic = sIc - gce * -m_D_EB.deltaV() + gcc * -m_D_CB.deltaV();
- //printf("EB %f sIe %f sIc %f\n", m_D_BE.deltaV(), sIe, sIc);
-
- m_D_EB.set_mat(gee, gec - gee, gce - gee, gee - gec, Ie, -Ie);
- m_D_CB.set_mat(gcc, gce - gcc, gec - gcc, gcc - gce, Ic, -Ic);
- m_D_EC.set_mat( 0, -gec, -gce, 0, 0, 0);
- }
+ ATTR_COLD NETLIB_NAME(QBJT_EB)()
+ : NETLIB_NAME(QBJT)(BJT_EB),
+ m_D_CB(netlist_object_t::ANALOG),
+ m_D_EB(netlist_object_t::ANALOG),
+ m_D_EC(netlist_object_t::ANALOG)
+ { }
+
+ NETLIB_UPDATE_TERMINALS()
+ {
+ double polarity = (qtype() == BJT_NPN ? 1.0 : -1.0);
+
+ m_gD_BE.update_diode(-m_D_EB.deltaV() * polarity);
+ m_gD_BC.update_diode(-m_D_CB.deltaV() * polarity);
+
+ double gee = m_gD_BE.G();
+ double gcc = m_gD_BC.G();
+ double gec = m_alpha_r * gcc;
+ double gce = m_alpha_f * gee;
+ double sIe = -m_gD_BE.I() + m_alpha_r * m_gD_BC.I();
+ double sIc = m_alpha_f * m_gD_BE.I() - m_gD_BC.I();
+ double Ie = (sIe + gee * m_gD_BE.Vd() - gec * m_gD_BC.Vd()) * polarity;
+ double Ic = (sIc - gce * m_gD_BE.Vd() + gcc * m_gD_BC.Vd()) * polarity;
+ //double Ie = sIe + gee * -m_D_EB.deltaV() - gec * -m_D_CB.deltaV();
+ //double Ic = sIc - gce * -m_D_EB.deltaV() + gcc * -m_D_CB.deltaV();
+ //printf("EB %f sIe %f sIc %f\n", m_D_BE.deltaV(), sIe, sIc);
+
+ m_D_EB.set_mat(gee, gec - gee, gce - gee, gee - gec, Ie, -Ie);
+ m_D_CB.set_mat(gcc, gce - gcc, gec - gcc, gcc - gce, Ic, -Ic);
+ m_D_EC.set_mat( 0, -gec, -gce, 0, 0, 0);
+ }
protected:
- ATTR_COLD virtual void start();
- ATTR_COLD virtual void reset();
- ATTR_HOT void update_param();
- ATTR_HOT ATTR_ALIGN void virtual update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void reset();
+ ATTR_HOT void update_param();
+ ATTR_HOT ATTR_ALIGN void virtual update();
- netlist_generic_diode m_gD_BC;
- netlist_generic_diode m_gD_BE;
+ netlist_generic_diode m_gD_BC;
+ netlist_generic_diode m_gD_BE;
- nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic
- nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie
- nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0
+ nld_twoterm m_D_CB; // gcc, gce - gcc, gec - gcc, gcc - gce | Ic
+ nld_twoterm m_D_EB; // gee, gec - gee, gce - gee, gee - gec | Ie
+ nld_twoterm m_D_EC; // 0, -gec, -gcc, 0 | 0
- double m_alpha_f;
- double m_alpha_r;
+ double m_alpha_f;
+ double m_alpha_r;
private:
};
diff --git a/src/emu/netlist/analog/nld_fourterm.c b/src/emu/netlist/analog/nld_fourterm.c
index 301aca9a4e7..61579e50bfb 100644
--- a/src/emu/netlist/analog/nld_fourterm.c
+++ b/src/emu/netlist/analog/nld_fourterm.c
@@ -13,45 +13,45 @@
NETLIB_START(VCCS)
{
- register_param("G", m_G, 1.0);
- register_param("RI", m_RI, 1.0 / netlist().gmin());
+ register_param("G", m_G, 1.0);
+ register_param("RI", m_RI, 1.0 / netlist().gmin());
- register_terminal("IP", m_IP);
- register_terminal("IN", m_IN);
- register_terminal("OP", m_OP);
- register_terminal("ON", m_ON);
+ register_terminal("IP", m_IP);
+ register_terminal("IN", m_IN);
+ register_terminal("OP", m_OP);
+ register_terminal("ON", m_ON);
- register_terminal("_OP1", m_OP1);
- register_terminal("_ON1", m_ON1);
+ register_terminal("_OP1", m_OP1);
+ register_terminal("_ON1", m_ON1);
- m_IP.m_otherterm = &m_IN; // <= this should be NULL and terminal be filtered out prior to solving...
- m_IN.m_otherterm = &m_IP; // <= this should be NULL and terminal be filtered out prior to solving...
+ m_IP.m_otherterm = &m_IN; // <= this should be NULL and terminal be filtered out prior to solving...
+ m_IN.m_otherterm = &m_IP; // <= this should be NULL and terminal be filtered out prior to solving...
- m_OP.m_otherterm = &m_IP;
- m_OP1.m_otherterm = &m_IN;
+ m_OP.m_otherterm = &m_IP;
+ m_OP1.m_otherterm = &m_IN;
- m_ON.m_otherterm = &m_IP;
- m_ON1.m_otherterm = &m_IN;
+ m_ON.m_otherterm = &m_IP;
+ m_ON1.m_otherterm = &m_IN;
- connect(m_OP, m_OP1);
- connect(m_ON, m_ON1);
+ connect(m_OP, m_OP1);
+ connect(m_ON, m_ON1);
- m_gfac = 1.0;
+ m_gfac = 1.0;
}
NETLIB_RESET(VCCS)
{
- const double m_mult = m_G.Value() * m_gfac; // 1.0 ==> 1V ==> 1A
- const double GI = 1.0 / m_RI.Value();
+ const double m_mult = m_G.Value() * m_gfac; // 1.0 ==> 1V ==> 1A
+ const double GI = 1.0 / m_RI.Value();
- m_IP.set(GI);
- m_IN.set(GI);
+ m_IP.set(GI);
+ m_IN.set(GI);
- m_OP.set(m_mult, 0.0);
- m_OP1.set(-m_mult, 0.0);
+ m_OP.set(m_mult, 0.0);
+ m_OP1.set(-m_mult, 0.0);
- m_ON.set(-m_mult, 0.0);
- m_ON1.set(m_mult, 0.0);
+ m_ON.set(-m_mult, 0.0);
+ m_ON1.set(m_mult, 0.0);
}
NETLIB_UPDATE_PARAM(VCCS)
@@ -60,16 +60,16 @@ NETLIB_UPDATE_PARAM(VCCS)
NETLIB_UPDATE(VCCS)
{
- /* only called if connected to a rail net ==> notify the solver to recalculate */
- /* Big FIXME ... */
- if (!m_IP.net().isRailNet())
- m_IP.net().solve();
- else if (!m_IN.net().isRailNet())
- m_IN.net().solve();
- else if (!m_OP.net().isRailNet())
- m_OP.net().solve();
- else if (!m_ON.net().isRailNet())
- m_ON.net().solve();
+ /* only called if connected to a rail net ==> notify the solver to recalculate */
+ /* Big FIXME ... */
+ if (!m_IP.net().isRailNet())
+ m_IP.net().solve();
+ else if (!m_IN.net().isRailNet())
+ m_IN.net().solve();
+ else if (!m_OP.net().isRailNet())
+ m_OP.net().solve();
+ else if (!m_ON.net().isRailNet())
+ m_ON.net().solve();
}
// ----------------------------------------------------------------------------------------
@@ -78,30 +78,29 @@ NETLIB_UPDATE(VCCS)
NETLIB_START(VCVS)
{
- NETLIB_NAME(VCCS)::start();
+ NETLIB_NAME(VCCS)::start();
- register_param("RO", m_RO, 1.0);
+ register_param("RO", m_RO, 1.0);
- register_terminal("_OP2", m_OP2);
- register_terminal("_ON2", m_ON2);
+ register_terminal("_OP2", m_OP2);
+ register_terminal("_ON2", m_ON2);
- m_OP2.m_otherterm = &m_ON2;
- m_ON2.m_otherterm = &m_OP2;
+ m_OP2.m_otherterm = &m_ON2;
+ m_ON2.m_otherterm = &m_OP2;
- connect(m_OP2, m_OP1);
- connect(m_ON2, m_ON1);
+ connect(m_OP2, m_OP1);
+ connect(m_ON2, m_ON1);
}
NETLIB_RESET(VCVS)
{
- m_gfac = 1.0 / m_RO.Value();
- NETLIB_NAME(VCCS)::reset();
+ m_gfac = 1.0 / m_RO.Value();
+ NETLIB_NAME(VCCS)::reset();
- m_OP2.set(1.0 / m_RO.Value());
- m_ON2.set(1.0 / m_RO.Value());
+ m_OP2.set(1.0 / m_RO.Value());
+ m_ON2.set(1.0 / m_RO.Value());
}
NETLIB_UPDATE_PARAM(VCVS)
{
}
-
diff --git a/src/emu/netlist/analog/nld_fourterm.h b/src/emu/netlist/analog/nld_fourterm.h
index 0f330333bcd..56d307a653f 100644
--- a/src/emu/netlist/analog/nld_fourterm.h
+++ b/src/emu/netlist/analog/nld_fourterm.h
@@ -15,10 +15,10 @@
// ----------------------------------------------------------------------------------------
#define VCCS(_name) \
- NET_REGISTER_DEV(VCCS, _name)
+ NET_REGISTER_DEV(VCCS, _name)
#define VCVS(_name) \
- NET_REGISTER_DEV(VCVS, _name)
+ NET_REGISTER_DEV(VCVS, _name)
// ----------------------------------------------------------------------------------------
// nld_CCCS
@@ -70,30 +70,30 @@
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 reset();
- ATTR_COLD virtual void update_param();
- ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void update_param();
+ ATTR_HOT ATTR_ALIGN void update();
- 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_RI;
+ netlist_param_double_t m_G;
+ netlist_param_double_t m_RI;
- double m_gfac;
+ double m_gfac;
};
// ----------------------------------------------------------------------------------------
@@ -127,19 +127,19 @@ protected:
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 reset();
- ATTR_COLD virtual void update_param();
- //ATTR_HOT ATTR_ALIGN void update();
+ ATTR_COLD virtual void start();
+ ATTR_COLD virtual void reset();
+ 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;
- netlist_param_double_t m_RO;
+ netlist_param_double_t m_RO;
};
diff --git a/src/emu/netlist/analog/nld_solver.c b/src/emu/netlist/analog/nld_solver.c
index df70766d589..6e4d02c9667 100644
--- a/src/emu/netlist/analog/nld_solver.c
+++ b/src/emu/netlist/analog/nld_solver.c
@@ -20,157 +20,157 @@
ATTR_COLD void netlist_matrix_solver_t::setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &aowner)
{
- m_owner = &aowner;
-
- NL_VERBOSE_OUT(("New solver setup\n"));
-
- for (netlist_net_t * const * pn = nets.first(); pn != NULL; pn = nets.next(pn))
- {
- NL_VERBOSE_OUT(("setting up net\n"));
-
- m_nets.add(*pn);
-
- (*pn)->m_solver = this;
-
- for (netlist_core_terminal_t *p = (*pn)->m_list.first(); p != NULL; p = (*pn)->m_list.next(p))
- {
- NL_VERBOSE_OUT(("%s %s %d\n", p->name().cstr(), (*pn)->name().cstr(), (int) (*pn)->isRailNet()));
- 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::BJT_EB:
- case netlist_device_t::DIODE:
- //case netlist_device_t::VCVS:
- case netlist_device_t::BJT_SWITCH:
- NL_VERBOSE_OUT(("found BJT/Diode\n"));
- if (!m_dynamic.contains(&p->netdev()))
- m_dynamic.add(&p->netdev());
- break;
- default:
- break;
- }
- {
- netlist_terminal_t *pterm = static_cast<netlist_terminal_t *>(p);
- if (pterm->m_otherterm->net().isRailNet())
- (*pn)->m_rails.add(pterm);
- else
- (*pn)->m_terms.add(pterm);
- }
- NL_VERBOSE_OUT(("Added terminal\n"));
- break;
- case netlist_terminal_t::INPUT:
- if (!m_inps.contains(p))
- m_inps.add(p);
- NL_VERBOSE_OUT(("Added input\n"));
- break;
- default:
- owner().netlist().error("unhandled element found\n");
- break;
- }
- }
- NL_VERBOSE_OUT(("added net with %d populated connections (%d railnets)\n", (*pn)->m_terms.count(), (*pn)->m_rails.count()));
- }
+ m_owner = &aowner;
+
+ NL_VERBOSE_OUT(("New solver setup\n"));
+
+ for (netlist_net_t * const * pn = nets.first(); pn != NULL; pn = nets.next(pn))
+ {
+ NL_VERBOSE_OUT(("setting up net\n"));
+
+ m_nets.add(*pn);
+
+ (*pn)->m_solver = this;
+
+ for (netlist_core_terminal_t *p = (*pn)->m_list.first(); p != NULL; p = (*pn)->m_list.next(p))
+ {
+ NL_VERBOSE_OUT(("%s %s %d\n", p->name().cstr(), (*pn)->name().cstr(), (int) (*pn)->isRailNet()));
+ 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::BJT_EB:
+ case netlist_device_t::DIODE:
+ //case netlist_device_t::VCVS:
+ case netlist_device_t::BJT_SWITCH:
+ NL_VERBOSE_OUT(("found BJT/Diode\n"));
+ if (!m_dynamic.contains(&p->netdev()))
+ m_dynamic.add(&p->netdev());
+ break;
+ default:
+ break;
+ }
+ {
+ netlist_terminal_t *pterm = static_cast<netlist_terminal_t *>(p);
+ if (pterm->m_otherterm->net().isRailNet())
+ (*pn)->m_rails.add(pterm);
+ else
+ (*pn)->m_terms.add(pterm);
+ }
+ NL_VERBOSE_OUT(("Added terminal\n"));
+ break;
+ case netlist_terminal_t::INPUT:
+ if (!m_inps.contains(p))
+ m_inps.add(p);
+ NL_VERBOSE_OUT(("Added input\n"));
+ break;
+ default:
+ owner().netlist().error("unhandled element found\n");
+ break;
+ }
+ }
+ NL_VERBOSE_OUT(("added net with %d populated connections (%d railnets)\n", (*pn)->m_terms.count(), (*pn)->m_rails.count()));
+ }
}
ATTR_HOT void netlist_matrix_solver_t::update_inputs()
{
- for (netlist_core_terminal_t * const *p = m_inps.first(); p != NULL; p = m_inps.next(p))
- {
- if ((*p)->net().m_last_Analog != (*p)->net().m_cur_Analog)
- {
- (*p)->netdev().update_dev();
- }
- }
- for (netlist_core_terminal_t * const *p = m_inps.first(); p != NULL; p = m_inps.next(p))
- {
- (*p)->net().m_last_Analog = (*p)->net().m_cur_Analog;
- }
+ for (netlist_core_terminal_t * const *p = m_inps.first(); p != NULL; p = m_inps.next(p))
+ {
+ if ((*p)->net().m_last_Analog != (*p)->net().m_cur_Analog)
+ {
+ (*p)->netdev().update_dev();
+ }
+ }
+ for (netlist_core_terminal_t * const *p = m_inps.first(); p != NULL; p = m_inps.next(p))
+ {
+ (*p)->net().m_last_Analog = (*p)->net().m_cur_Analog;
+ }
}
ATTR_HOT void netlist_matrix_solver_t::update_dynamic()
{
- /* update all non-linear devices */
- for (netlist_core_device_t * const *p = m_dynamic.first(); p != NULL; p = m_dynamic.next(p))
- switch ((*p)->family())
- {
- case netlist_device_t::DIODE:
- static_cast<NETLIB_NAME(D) *>((*p))->update_terminals();
- break;
- default:
- (*p)->update_terminals();
- break;
- }
+ /* update all non-linear devices */
+ for (netlist_core_device_t * const *p = m_dynamic.first(); p != NULL; p = m_dynamic.next(p))
+ switch ((*p)->family())
+ {
+ case netlist_device_t::DIODE:
+ static_cast<NETLIB_NAME(D) *>((*p))->update_terminals();
+ break;
+ default:
+ (*p)->update_terminals();
+ break;
+ }
}
ATTR_HOT void netlist_matrix_solver_t::schedule()
{
- if (!solve())
- {
- // NL_VERBOSE_OUT(("update_inputs\n");
- update_inputs();
- }
- else
- {
- m_owner->netlist().warning("Matrix solver reschedule .. Consider increasing RESCHED_LOOPS");
- if (m_owner != NULL)
- this->m_owner->schedule();
- }
- //solve();
- // update_inputs();
+ if (!solve())
+ {
+ // NL_VERBOSE_OUT(("update_inputs\n");
+ update_inputs();
+ }
+ else
+ {
+ m_owner->netlist().warning("Matrix solver reschedule .. Consider increasing RESCHED_LOOPS");
+ if (m_owner != NULL)
+ this->m_owner->schedule();
+ }
+ //solve();
+ // update_inputs();
}
ATTR_COLD void netlist_matrix_solver_t::reset()
{
- m_last_step = netlist_time::zero;
+ m_last_step = netlist_time::zero;
}
ATTR_HOT void netlist_matrix_solver_t::step(const netlist_time delta)
{
- const double dd = delta.as_double();
- for (int k=0; k < m_steps.count(); k++)
- m_steps[k]->step_time(dd);
+ const double dd = delta.as_double();
+ for (int k=0; k < m_steps.count(); k++)
+ m_steps[k]->step_time(dd);
}
ATTR_HOT bool netlist_matrix_solver_t::solve()
{
- int resched_cnt = 0;
-
- netlist_time now = owner().netlist().time();
- netlist_time delta = now - m_last_step;
-
- if (delta < netlist_time::from_nsec(1)) // always update capacitors
- delta = netlist_time::from_nsec(1);
- {
- NL_VERBOSE_OUT(("Step!\n"));
- /* update all terminals for new time step */
- m_last_step = now;
- step(delta);
- }
-
- if (is_dynamic())
- {
- int this_resched;
- do
- {
- update_dynamic();
- this_resched = solve_non_dynamic();
- resched_cnt += this_resched;
- } while (this_resched > 1 && resched_cnt < m_params.m_resched_loops);
- }
- else
- {
- resched_cnt = solve_non_dynamic();
- //printf("resched_cnt %d %d\n", resched_cnt, m_resched_loops);
- }
- return (resched_cnt >= m_params.m_resched_loops);
+ int resched_cnt = 0;
+
+ netlist_time now = owner().netlist().time();
+ netlist_time delta = now - m_last_step;
+
+ if (delta < netlist_time::from_nsec(1)) // always update capacitors
+ delta = netlist_time::from_nsec(1);
+ {
+ NL_VERBOSE_OUT(("Step!\n"));
+ /* update all terminals for new time step */
+ m_last_step = now;
+ step(delta);
+ }
+
+ if (is_dynamic())
+ {
+ int this_resched;
+ do
+ {
+ update_dynamic();
+ this_resched = solve_non_dynamic();
+ resched_cnt += this_resched;
+ } while (this_resched > 1 && resched_cnt < m_params.m_resched_loops);
+ }
+ else
+ {
+ resched_cnt = solve_non_dynamic();
+ //printf("resched_cnt %d %d\n", resched_cnt, m_resched_loops);
+ }
+ return (resched_cnt >= m_params.m_resched_loops);
}
// ----------------------------------------------------------------------------------------
@@ -181,241 +181,239 @@ ATTR_HOT bool netlist_matrix_solver_t::solve()
template <int m_N, int _storage_N>
ATTR_COLD int netlist_matrix_solver_direct_t<m_N, _storage_N>::get_net_idx(netlist_net_t *net)
{
- for (int k = 0; k < N(); k++)
- if (m_nets[k] == net)
- return k;
- return -1;
+ for (int k = 0; k < N(); k++)
+ if (m_nets[k] == net)
+ return k;
+ return -1;
}
template <int m_N, int _storage_N>
ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner)
{
- netlist_matrix_solver_t::setup(nets, owner);
-
- m_term_num = 0;
- m_rail_start = 0;
- for (int k = 0; k < N(); k++)
- {
- netlist_net_t *net = m_nets[k];
- const netlist_net_t::terminal_list_t &terms = net->m_terms;
- for (int i = 0; i < terms.count(); i++)
- {
- m_terms[m_term_num].net_this = k;
- int ot = get_net_idx(&terms[i]->m_otherterm->net());
- m_terms[m_term_num].net_other = ot;
- m_terms[m_term_num].term = terms[i];
- if (ot>=0)
- {
- m_term_num++;
- SOLVER_VERBOSE_OUT(("Net %d Term %s %f %f\n", k, terms[i]->name().cstr(), terms[i]->m_gt, terms[i]->m_go));
- }
- }
- }
- m_rail_start = m_term_num;
- for (int k = 0; k < N(); k++)
- {
- netlist_net_t *net = m_nets[k];
- const netlist_net_t::terminal_list_t &terms = net->m_terms;
- const netlist_net_t::terminal_list_t &rails = net->m_rails;
- for (int i = 0; i < terms.count(); i++)
- {
- m_terms[m_term_num].net_this = k;
- int ot = get_net_idx(&terms[i]->m_otherterm->net());
- m_terms[m_term_num].net_other = ot;
- m_terms[m_term_num].term = terms[i];
- if (ot<0)
- {
- m_term_num++;
- SOLVER_VERBOSE_OUT(("found term with missing othernet %s\n", terms[i]->name().cstr()));
- }
- }
- for (int i = 0; i < rails.count(); i++)
- {
- m_terms[m_term_num].net_this = k;
- m_terms[m_term_num].net_other = -1; //get_net_idx(&rails[i]->m_otherterm->net());
- m_terms[m_term_num].term = rails[i];
- m_term_num++;
- SOLVER_VERBOSE_OUT(("Net %d Rail %s %f %f\n", k, rails[i]->name().cstr(), rails[i]->m_gt, rails[i]->m_go));
- }
- }
+ netlist_matrix_solver_t::setup(nets, owner);
+
+ m_term_num = 0;
+ m_rail_start = 0;
+ for (int k = 0; k < N(); k++)
+ {
+ netlist_net_t *net = m_nets[k];
+ const netlist_net_t::terminal_list_t &terms = net->m_terms;
+ for (int i = 0; i < terms.count(); i++)
+ {
+ m_terms[m_term_num].net_this = k;
+ int ot = get_net_idx(&terms[i]->m_otherterm->net());
+ m_terms[m_term_num].net_other = ot;
+ m_terms[m_term_num].term = terms[i];
+ if (ot>=0)
+ {
+ m_term_num++;
+ SOLVER_VERBOSE_OUT(("Net %d Term %s %f %f\n", k, terms[i]->name().cstr(), terms[i]->m_gt, terms[i]->m_go));
+ }
+ }
+ }
+ m_rail_start = m_term_num;
+ for (int k = 0; k < N(); k++)
+ {
+ netlist_net_t *net = m_nets[k];
+ const netlist_net_t::terminal_list_t &terms = net->m_terms;
+ const netlist_net_t::terminal_list_t &rails = net->m_rails;
+ for (int i = 0; i < terms.count(); i++)
+ {
+ m_terms[m_term_num].net_this = k;
+ int ot = get_net_idx(&terms[i]->m_otherterm->net());
+ m_terms[m_term_num].net_other = ot;
+ m_terms[m_term_num].term = terms[i];
+ if (ot<0)
+ {
+ m_term_num++;
+ SOLVER_VERBOSE_OUT(("found term with missing othernet %s\n", terms[i]->name().cstr()));
+ }
+ }
+ for (int i = 0; i < rails.count(); i++)
+ {
+ m_terms[m_term_num].net_this = k;
+ m_terms[m_term_num].net_other = -1; //get_net_idx(&rails[i]->m_otherterm->net());
+ m_terms[m_term_num].term = rails[i];
+ m_term_num++;
+ SOLVER_VERBOSE_OUT(("Net %d Rail %s %f %f\n", k, rails[i]->name().cstr(), rails[i]->m_gt, rails[i]->m_go));
+ }
+ }
}
template <int m_N, int _storage_N>
ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::build_LE(
- double (* RESTRICT A)[_storage_N],
- double (* RESTRICT RHS))
+ double (* RESTRICT A)[_storage_N],
+ double (* RESTRICT RHS))
{
-
#if 0
- for (int i = 0; i < m_term_num; i++)
- {
- terms_t &t = m_terms[i];
- m_RHS[t.net_this] += t.term->m_Idr;
- m_A[t.net_this][t.net_this] += t.term->m_gt;
- if (t.net_other >= 0)
- {
- //m_A[t.net_other][t.net_other] += t.term->m_otherterm->m_gt;
- m_A[t.net_this][t.net_other] += -t.term->m_go;
- //m_A[t.net_other][t.net_this] += -t.term->m_otherterm->m_go;
- }
- else
- m_RHS[t.net_this] += t.term->m_go * t.term->m_otherterm->net().Q_Analog();
- }
+ for (int i = 0; i < m_term_num; i++)
+ {
+ terms_t &t = m_terms[i];
+ m_RHS[t.net_this] += t.term->m_Idr;
+ m_A[t.net_this][t.net_this] += t.term->m_gt;
+ if (t.net_other >= 0)
+ {
+ //m_A[t.net_other][t.net_other] += t.term->m_otherterm->m_gt;
+ m_A[t.net_this][t.net_other] += -t.term->m_go;
+ //m_A[t.net_other][t.net_this] += -t.term->m_otherterm->m_go;
+ }
+ else
+ m_RHS[t.net_this] += t.term->m_go * t.term->m_otherterm->net().Q_Analog();
+ }
#else
- for (int i = 0; i < m_rail_start; i++)
- {
- terms_t &t = m_terms[i];
- //printf("A %d %d %s %f %f\n",t.net_this, t.net_other, t.term->name().cstr(), t.term->m_gt, t.term->m_go);
- RHS[t.net_this] += t.term->m_Idr;
- A[t.net_this][t.net_this] += t.term->m_gt;
-
- A[t.net_this][t.net_other] += -t.term->m_go;
- }
- for (int i = m_rail_start; i < m_term_num; i++)
- {
- terms_t &t = m_terms[i];
- RHS[t.net_this] += t.term->m_Idr;
- A[t.net_this][t.net_this] += t.term->m_gt;
-
- RHS[t.net_this] += t.term->m_go * t.term->m_otherterm->net().Q_Analog();
- }
+ for (int i = 0; i < m_rail_start; i++)
+ {
+ terms_t &t = m_terms[i];
+ //printf("A %d %d %s %f %f\n",t.net_this, t.net_other, t.term->name().cstr(), t.term->m_gt, t.term->m_go);
+ RHS[t.net_this] += t.term->m_Idr;
+ A[t.net_this][t.net_this] += t.term->m_gt;
+
+ A[t.net_this][t.net_other] += -t.term->m_go;
+ }
+ for (int i = m_rail_start; i < m_term_num; i++)
+ {
+ terms_t &t = m_terms[i];
+ RHS[t.net_this] += t.term->m_Idr;
+ A[t.net_this][t.net_this] += t.term->m_gt;
+
+ RHS[t.net_this] += t.term->m_go * t.term->m_otherterm->net().Q_Analog();
+ }
#endif
}
template <int m_N, int _storage_N>
ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::gauss_LE(
- double (* RESTRICT A)[_storage_N],
- double (* RESTRICT RHS),
- double (* RESTRICT x))
+ double (* RESTRICT A)[_storage_N],
+ double (* RESTRICT RHS),
+ double (* RESTRICT x))
{
#if 0
- for (int i = 0; i < N(); i++)
- {
- for (int k = 0; k < N(); k++)
- printf("%f ", A[i][k]);
- printf("| %f = %f \n", x[i], RHS[i]);
- }
- printf("\n");
+ for (int i = 0; i < N(); i++)
+ {
+ for (int k = 0; k < N(); k++)
+ printf("%f ", A[i][k]);
+ printf("| %f = %f \n", x[i], RHS[i]);
+ }
+ printf("\n");
#endif
- for (int i = 0; i < N(); i++) {
-
+ for (int i = 0; i < N(); i++) {
#if 0
- /* Find the row with the largest first value */
- maxrow = i;
- for (j=i+1;j<n;j++) {
- if (ABS(a[i][j]) > ABS(a[i][maxrow]))
- maxrow = j;
- }
-
- /* Swap the maxrow and ith row */
- for (k=i;k<n+1;k++) {
- tmp = a[k][i];
- a[k][i] = a[k][maxrow];
- a[k][maxrow] = tmp;
- }
+ /* Find the row with the largest first value */
+ maxrow = i;
+ for (j=i+1;j<n;j++) {
+ if (ABS(a[i][j]) > ABS(a[i][maxrow]))
+ maxrow = j;
+ }
+
+ /* Swap the maxrow and ith row */
+ for (k=i;k<n+1;k++) {
+ tmp = a[k][i];
+ a[k][i] = a[k][maxrow];
+ a[k][maxrow] = tmp;
+ }
#endif
- /* Singular matrix? */
- double f = A[i][i];
- //if (fabs(f) < 1e-20) printf("Singular!");
- f = 1.0 / f;
-
- /* Eliminate column i from row j */
- for (int j = i + 1; j < N(); j++)
- {
- double f1 = A[j][i] * f;
-
- if (f1 != 0.0)
- {
- for (int k = i; k < N(); k++)
- {
- A[j][k] -= A[i][k] * f1;
- }
- RHS[j] -= RHS[i] * f1;
- }
- }
- }
- /* back substitution */
- for (int j = N() - 1; j >= 0; j--)
- {
- double tmp = 0;
- for (int k = j + 1; k < N(); k++)
- tmp += A[j][k] * x[k];
- x[j] = (RHS[j] - tmp) / A[j][j];
- }
+ /* Singular matrix? */
+ double f = A[i][i];
+ //if (fabs(f) < 1e-20) printf("Singular!");
+ f = 1.0 / f;
+
+ /* Eliminate column i from row j */
+ for (int j = i + 1; j < N(); j++)
+ {
+ double f1 = A[j][i] * f;
+
+ if (f1 != 0.0)
+ {
+ for (int k = i; k < N(); k++)
+ {
+ A[j][k] -= A[i][k] * f1;
+ }
+ RHS[j] -= RHS[i] * f1;
+ }
+ }
+ }
+ /* back substitution */
+ for (int j = N() - 1; j >= 0; j--)
+ {
+ double tmp = 0;
+ for (int k = j + 1; k < N(); k++)
+ tmp += A[j][k] * x[k];
+ x[j] = (RHS[j] - tmp) / A[j][j];
+ }
#if 0
- printf("Solution:\n");
- for (int i = 0; i < N(); i++)
- {
- for (int k = 0; k < N(); k++)
- printf("%f ", A[i][k]);
- printf("| %f = %f \n", x[i], RHS[i]);
- }
- printf("\n");
+ printf("Solution:\n");
+ for (int i = 0; i < N(); i++)
+ {
+ for (int k = 0; k < N(); k++)
+ printf("%f ", A[i][k]);
+ printf("| %f = %f \n", x[i], RHS[i]);
+ }
+ printf("\n");
#endif
}
template <int m_N, int _storage_N>
ATTR_HOT double netlist_matrix_solver_direct_t<m_N, _storage_N>::delta(
- const double (* RESTRICT RHS),
- const double (* RESTRICT V))
+ const double (* RESTRICT RHS),
+ const double (* RESTRICT V))
{
- double cerr = 0;
- double cerr2 = 0;
- for (int i = 0; i < this->N(); i++)
- {
- double e = (V[i] - this->m_nets[i]->m_cur_Analog);
- double e2 = (RHS[i] - this->m_RHS[i]);
- cerr += e * e;
- cerr2 += e2 * e2;
- }
- return (cerr + cerr2*(100000.0 * 100000.0)) / this->N();
+ double cerr = 0;
+ double cerr2 = 0;
+ for (int i = 0; i < this->N(); i++)
+ {
+ double e = (V[i] - this->m_nets[i]->m_cur_Analog);
+ double e2 = (RHS[i] - this->m_RHS[i]);
+ cerr += e * e;
+ cerr2 += e2 * e2;
+ }
+ return (cerr + cerr2*(100000.0 * 100000.0)) / this->N();
}
template <int m_N, int _storage_N>
ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::store(
- const double (* RESTRICT RHS),
- const double (* RESTRICT V))
+ const double (* RESTRICT RHS),
+ const double (* RESTRICT V))
{
- for (int i = 0; i < this->N(); i++)
- {
- this->m_nets[i]->m_cur_Analog = this->m_nets[i]->m_new_Analog = V[i];
- }
- if (RHS != NULL)
- {
- for (int i = 0; i < this->N(); i++)
- {
- this->m_RHS[i] = RHS[i];
- }
- }
+ for (int i = 0; i < this->N(); i++)
+ {
+ this->m_nets[i]->m_cur_Analog = this->m_nets[i]->m_new_Analog = V[i];
+ }
+ if (RHS != NULL)
+ {
+ for (int i = 0; i < this->N(); i++)
+ {
+ this->m_RHS[i] = RHS[i];
+ }
+ }
}
template <int m_N, int _storage_N>
ATTR_HOT int netlist_matrix_solver_direct_t<m_N, _storage_N>::solve_non_dynamic()
{
- double A[_storage_N][_storage_N] = { { 0.0 } };
- double RHS[_storage_N] = { 0.0 };
- double new_v[_storage_N] = { 0.0 };
+ double A[_storage_N][_storage_N] = { { 0.0 } };
+ double RHS[_storage_N] = { 0.0 };
+ double new_v[_storage_N] = { 0.0 };
- this->build_LE(A, RHS);
+ this->build_LE(A, RHS);
- this->gauss_LE(A, RHS, new_v);
+ this->gauss_LE(A, RHS, new_v);
- if (this->is_dynamic())
- {
- double err = delta(RHS, new_v);
+ if (this->is_dynamic())
+ {
+ double err = delta(RHS, new_v);
- store(RHS, new_v);
+ store(RHS, new_v);
- if (err > this->m_params.m_accuracy * this->m_params.m_accuracy)
- {
- return 2;
- }
- return 1;
- }
- store(NULL, new_v); // ==> No need to store RHS
- return 1;
+ if (err > this->m_params.m_accuracy * this->m_params.m_accuracy)
+ {
+ return 2;
+ }
+ return 1;
+ }
+ store(NULL, new_v); // ==> No need to store RHS
+ return 1;
}
@@ -427,43 +425,43 @@ ATTR_HOT int netlist_matrix_solver_direct1_t::solve_non_dynamic()
{
#if 1
- double gtot_t = 0.0;
- double RHS_t = 0.0;
+ double gtot_t = 0.0;
+ double RHS_t = 0.0;
- netlist_net_t *net = m_nets[0];
- const netlist_net_t::terminal_list_t &rails = net->m_rails;
- int rail_count = rails.count();
+ netlist_net_t *net = m_nets[0];
+ const netlist_net_t::terminal_list_t &rails = net->m_rails;
+ int rail_count = rails.count();
- for (int i = 0; i < rail_count; i++)
- {
- gtot_t += rails[i]->m_gt;
- RHS_t += rails[i]->m_Idr;
- RHS_t += rails[i]->m_go * rails[i]->m_otherterm->net().Q_Analog();
- }
+ for (int i = 0; i < rail_count; i++)
+ {
+ gtot_t += rails[i]->m_gt;
+ RHS_t += rails[i]->m_Idr;
+ RHS_t += rails[i]->m_go * rails[i]->m_otherterm->net().Q_Analog();
+ }
- double iIdr = RHS_t;
- double new_val = iIdr / gtot_t;
+ double iIdr = RHS_t;
+ double new_val = iIdr / gtot_t;
#else
- netlist_net_t *net = m_nets[0];
- double m_A[1][1] = { {0.0} };
- double m_RHS[1] = { 0.0 };
- build_LE(m_A, m_RHS);
- //NL_VERBOSE_OUT(("%f %f\n", new_val, m_RHS[0] / m_A[0][0]);
+ netlist_net_t *net = m_nets[0];
+ double m_A[1][1] = { {0.0} };
+ double m_RHS[1] = { 0.0 };
+ build_LE(m_A, m_RHS);
+ //NL_VERBOSE_OUT(("%f %f\n", new_val, m_RHS[0] / m_A[0][0]);
- double new_val = m_RHS[0] / m_A[0][0];
+ double new_val = m_RHS[0] / m_A[0][0];
#endif
- double e = (new_val - net->m_cur_Analog);
- double cerr = e * e;
+ double e = (new_val - net->m_cur_Analog);
+ double cerr = e * e;
- net->m_cur_Analog = net->m_new_Analog = new_val;
+ net->m_cur_Analog = net->m_new_Analog = new_val;
- if (is_dynamic() && (cerr > m_params.m_accuracy * m_params.m_accuracy))
- {
- return 2;
- }
- else
- return 1;
+ if (is_dynamic() && (cerr > m_params.m_accuracy * m_params.m_accuracy))
+ {
+ return 2;
+ }
+ else
+ return 1;
}
@@ -475,33 +473,33 @@ ATTR_HOT int netlist_matrix_solver_direct1_t::solve_non_dynamic()
ATTR_HOT int netlist_matrix_solver_direct2_t::solve_non_dynamic()
{
- double A[2][2] = { { 0.0 } };
- double RHS[2] = { 0.0 };
-
- build_LE(A, RHS);
-
- //NL_VERBOSE_OUT(("%f %f\n", new_val, m_RHS[0] / m_A[0][0]);
-
- const double a = A[0][0];
- const double b = A[0][1];
- const double c = A[1][0];
- const double d = A[1][1];
-
- double new_val[2];
- new_val[1] = a / (a*d - b*c) * (RHS[1] - c / a * RHS[0]);
- new_val[0] = (RHS[0] - b * new_val[1]) / a;
-
- if (is_dynamic())
- {
- double err = delta(RHS, new_val);
- store(RHS, new_val);
- if (err > m_params.m_accuracy * m_params.m_accuracy)
- return 2;
- else
- return 1;
- }
- store(NULL, new_val);
- return 1;
+ double A[2][2] = { { 0.0 } };
+ double RHS[2] = { 0.0 };
+
+ build_LE(A, RHS);
+
+ //NL_VERBOSE_OUT(("%f %f\n", new_val, m_RHS[0] / m_A[0][0]);
+
+ const double a = A[0][0];
+ const double b = A[0][1];
+ const double c = A[1][0];
+ const double d = A[1][1];
+
+ double new_val[2];
+ new_val[1] = a / (a*d - b*c) * (RHS[1] - c / a * RHS[0]);
+ new_val[0] = (RHS[0] - b * new_val[1]) / a;
+
+ if (is_dynamic())
+ {
+ double err = delta(RHS, new_val);
+ store(RHS, new_val);
+ if (err > m_params.m_accuracy * m_params.m_accuracy)
+ return 2;
+ else
+ return 1;
+ }
+ store(NULL, new_val);
+ return 1;
}
// ----------------------------------------------------------------------------------------
@@ -511,100 +509,100 @@ ATTR_HOT int netlist_matrix_solver_direct2_t::solve_non_dynamic()
template <int m_N, int _storage_N>
ATTR_HOT int netlist_matrix_solver_gauss_seidel_t<m_N, _storage_N>::solve_non_dynamic()
{
- bool resched = false;
-
- int resched_cnt = 0;
- ATTR_UNUSED netlist_net_t *last_resched_net = NULL;
-
- /* over-relaxation not really works on these matrices */
- //const double w = 1.0; //2.0 / (1.0 + sin(3.14159 / (m_nets.count()+1)));
- //const double w1 = 1.0 - w;
-
- double w[_storage_N];
- double one_m_w[_storage_N];
- double RHS[_storage_N];
-
- for (int k = 0; k < N(); k++)
- {
- double gtot_t = 0.0;
- double gabs_t = 0.0;
- double RHS_t = 0.0;
-
- netlist_net_t *net = m_nets[k];
- const netlist_net_t::terminal_list_t &terms = net->m_terms;
- const netlist_net_t::terminal_list_t &rails = net->m_rails;
- const int term_count = terms.count();
- const int rail_count = rails.count();
-
- for (int i = 0; i < rail_count; i++)
- {
- gtot_t += rails[i]->m_gt;
- gabs_t += fabs(rails[i]->m_go);
- RHS_t += rails[i]->m_Idr;
- RHS_t += rails[i]->m_go * rails[i]->m_otherterm->net().Q_Analog();
- }
-
- for (int i = 0; i < term_count; i++)
- {
- gtot_t += terms[i]->m_gt;
- gabs_t += fabs(terms[i]->m_go);
- RHS_t += terms[i]->m_Idr;
- }
-
- gabs_t *= m_params.m_convergence_factor;
- if (gabs_t > gtot_t)
- {
- // Actually 1.0 / g_tot * g_tot / (gtot_t + gabs_t)
- w[k] = 1.0 / (gtot_t + gabs_t);
- one_m_w[k] = gabs_t / (gtot_t + gabs_t);
- }
- else
- {
- w[k] = 1.0 / gtot_t;
- one_m_w[k] = 0.0;
- }
-
- RHS[k] = RHS_t;
- }
-
- //NL_VERBOSE_OUT(("%f %d\n", w, m_nets.count());
- do {
- resched = false;
- double cerr = 0.0;
-
- for (int k = 0; k < N(); k++)
- {
- netlist_net_t *net = m_nets[k];
- const netlist_net_t::terminal_list_t &terms = net->m_terms;
- const int term_count = terms.count();
-
- double iIdr = RHS[k];
-
- for (int i = 0; i < term_count; i++)
- {
- iIdr += terms[i]->m_go * terms[i]->m_otherterm->net().Q_Analog();
- }
-
- //double new_val = (net->m_cur_Analog * gabs[k] + iIdr) / (gtot[k]);
- double new_val = net->m_cur_Analog * one_m_w[k] + iIdr * w[k];
-
- double e = (new_val - net->m_cur_Analog);
- cerr += e * e;
-
- net->m_cur_Analog = net->m_new_Analog = new_val;
- }
- if (resched || cerr / m_nets.count() > m_params.m_accuracy * m_params.m_accuracy)
- {
- resched = true;
- //last_resched_net = net;
- }
- resched_cnt++;
- } while (resched && (resched_cnt < m_params.m_resched_loops / 3 ));
-
- if (resched)
- return m_fallback.solve_non_dynamic();
-
- return resched_cnt;
+ bool resched = false;
+
+ int resched_cnt = 0;
+ ATTR_UNUSED netlist_net_t *last_resched_net = NULL;
+
+ /* over-relaxation not really works on these matrices */
+ //const double w = 1.0; //2.0 / (1.0 + sin(3.14159 / (m_nets.count()+1)));
+ //const double w1 = 1.0 - w;
+
+ double w[_storage_N];
+ double one_m_w[_storage_N];
+ double RHS[_storage_N];
+
+ for (int k = 0; k < N(); k++)
+ {
+ double gtot_t = 0.0;
+ double gabs_t = 0.0;
+ double RHS_t = 0.0;
+
+ netlist_net_t *net = m_nets[k];
+ const netlist_net_t::terminal_list_t &terms = net->m_terms;
+ const netlist_net_t::terminal_list_t &rails = net->m_rails;
+ const int term_count = terms.count();
+ const int rail_count = rails.count();
+
+ for (int i = 0; i < rail_count; i++)
+ {
+ gtot_t += rails[i]->m_gt;
+ gabs_t += fabs(rails[i]->m_go);
+ RHS_t += rails[i]->m_Idr;
+ RHS_t += rails[i]->m_go * rails[i]->m_otherterm->net().Q_Analog();
+ }
+
+ for (int i = 0; i < term_count; i++)
+ {
+ gtot_t += terms[i]->m_gt;
+ gabs_t += fabs(terms[i]->m_go);
+ RHS_t += terms[i]->m_Idr;
+ }
+
+ gabs_t *= m_params.m_convergence_factor;
+ if (gabs_t > gtot_t)
+ {
+ // Actually 1.0 / g_tot * g_tot / (gtot_t + gabs_t)
+ w[k] = 1.0 / (gtot_t + gabs_t);
+ one_m_w[k] = gabs_t / (gtot_t + gabs_t);
+ }
+ else
+ {
+ w[k] = 1.0 / gtot_t;
+ one_m_w[k] = 0.0;
+ }
+
+ RHS[k] = RHS_t;
+ }
+
+ //NL_VERBOSE_OUT(("%f %d\n", w, m_nets.count());
+ do {
+ resched = false;
+ double cerr = 0.0;
+
+ for (int k = 0; k < N(); k++)
+ {
+ netlist_net_t *net = m_nets[k];
+ const netlist_net_t::terminal_list_t &terms = net->m_terms;
+ const int term_count = terms.count();
+
+ double iIdr = RHS[k];
+
+ for (int i = 0; i < term_count; i++)
+ {
+ iIdr += terms[i]->m_go * terms[i]->m_otherterm->net().Q_Analog();
+ }
+
+ //double new_val = (net->m_cur_Analog * gabs[k] + iIdr) / (gtot[k]);
+ double new_val = net->m_cur_Analog * one_m_w[k] + iIdr * w[k];
+
+ double e = (new_val - net->m_cur_Analog);
+ cerr += e * e;
+
+ net->m_cur_Analog = net->m_new_Analog = new_val;
+ }
+ if (resched || cerr / m_nets.count() > m_params.m_accuracy * m_params.m_accuracy)
+ {
+ resched = true;
+ //last_resched_net = net;
+ }
+ resched_cnt++;
+ } while (resched && (resched_cnt < m_params.m_resched_loops / 3 ));
+
+ if (resched)
+ return m_fallback.solve_non_dynamic();
+
+ return resched_cnt;
}
// ----------------------------------------------------------------------------------------
@@ -615,251 +613,251 @@ typedef netlist_net_t::list_t *net_groups_t;
ATTR_COLD 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;
}
ATTR_COLD static void process_net(net_groups_t groups, int &cur_group, netlist_net_t *net)
{
- if (net->m_list.is_empty())
- return;
- /* add the net */
- SOLVER_VERBOSE_OUT(("add %d - %s\n", cur_group, net->name().cstr()));
- groups[cur_group].add(net);
- for (netlist_core_terminal_t *p = net->m_list.first(); p != NULL; p = net->m_list.next(p))
- {
- SOLVER_VERBOSE_OUT(("terminal %s\n", p->name().cstr()));
- if (p->isType(netlist_terminal_t::TERMINAL))
- {
- SOLVER_VERBOSE_OUT(("isterminal\n"));
- netlist_terminal_t *pt = static_cast<netlist_terminal_t *>(p);
- netlist_net_t *other_net = &pt->m_otherterm->net();
- if (!already_processed(groups, cur_group, other_net))
- process_net(groups, cur_group, other_net);
- }
- }
+ if (net->m_list.is_empty())
+ return;
+ /* add the net */
+ SOLVER_VERBOSE_OUT(("add %d - %s\n", cur_group, net->name().cstr()));
+ groups[cur_group].add(net);
+ for (netlist_core_terminal_t *p = net->m_list.first(); p != NULL; p = net->m_list.next(p))
+ {
+ SOLVER_VERBOSE_OUT(("terminal %s\n", p->name().cstr()));
+ if (p->isType(netlist_terminal_t::TERMINAL))
+ {
+ SOLVER_VERBOSE_OUT(("isterminal\n"));
+ netlist_terminal_t *pt = static_cast<netlist_terminal_t *>(p);
+ netlist_net_t *other_net = &pt->m_otherterm->net();
+ if (!already_processed(groups, cur_group, other_net))
+ process_net(groups, cur_group, other_net);
+ }
+ }
}
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(5).as_double());
- m_nt_sync_delay = m_sync_delay.Value();
+ register_param("SYNC_DELAY", m_sync_delay, NLTIME_FROM_NS(5).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-7);
- register_param("CONVERG", m_convergence, 0.3);
- register_param("RESCHED_LOOPS", m_resched_loops, 35);
- register_param("PARALLEL", m_parallel, 0);
- register_param("GMIN", m_gmin, NETLIST_GMIN_DEFAULT);
+ register_param("ACCURACY", m_accuracy, 1e-7);
+ register_param("CONVERG", m_convergence, 0.3);
+ register_param("RESCHED_LOOPS", m_resched_loops, 35);
+ register_param("PARALLEL", m_parallel, 0);
+ register_param("GMIN", m_gmin, NETLIST_GMIN_DEFAULT);
- // internal staff
+ // internal staff
- register_input("FB_sync", m_fb_sync);
- register_input("FB_step", m_fb_step);
+ register_input("FB_sync", m_fb_sync);
+ register_input("FB_step", m_fb_step);
- connect(m_fb_sync, m_Q_sync);
- connect(m_fb_step, m_Q_step);
+ connect(m_fb_sync, m_Q_sync);
+ connect(m_fb_step, m_Q_step);
- save(NAME(m_last_step));
+ save(NAME(m_last_step));
}
NETLIB_RESET(solver)
{
- m_last_step = netlist_time::zero;
- for (int i = 0; i < m_mat_solvers.count(); i++)
- m_mat_solvers[i]->reset();
+ m_last_step = netlist_time::zero;
+ for (int i = 0; i < m_mat_solvers.count(); i++)
+ m_mat_solvers[i]->reset();
}
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 * const *e = m_mat_solvers.first();
- while (e != NULL)
- {
- netlist_matrix_solver_t * const *en = m_mat_solvers.next(e);
- delete *e;
- e = en;
- }
+ netlist_matrix_solver_t * const *e = m_mat_solvers.first();
+ while (e != NULL)
+ {
+ netlist_matrix_solver_t * const *en = m_mat_solvers.next(e);
+ delete *e;
+ e = en;
+ }
}
NETLIB_UPDATE(solver)
{
- netlist_time now = netlist().time();
- netlist_time delta = now - m_last_step;
- bool do_full = false;
- bool global_resched = false;
- bool this_resched[100];
- int t_cnt = m_mat_solvers.count();
+ netlist_time now = netlist().time();
+ netlist_time delta = now - m_last_step;
+ bool do_full = false;
+ bool global_resched = false;
+ bool this_resched[100];
+ int t_cnt = m_mat_solvers.count();
- if (delta < m_inc)
- do_full = true; // we have been called between updates
+ if (delta < m_inc)
+ do_full = true; // we have been called between updates
- m_last_step = now;
+ m_last_step = now;
#if HAS_OPENMP && USE_OPENMP
- if (m_parallel.Value())
- {
- omp_set_num_threads(4);
- omp_set_dynamic(0);
- #pragma omp parallel
- {
- #pragma omp for nowait
- for (int i = 0; i < t_cnt; i++)
- {
- this_resched[i] = m_mat_solvers[i]->solve();
- }
- }
- }
- else
- for (int i = 0; i < t_cnt; i++)
- {
- if (do_full || (m_mat_solvers[i]->is_timestep()))
- this_resched[i] = m_mat_solvers[i]->solve();
- }
+ if (m_parallel.Value())
+ {
+ omp_set_num_threads(4);
+ omp_set_dynamic(0);
+ #pragma omp parallel
+ {
+ #pragma omp for nowait
+ for (int i = 0; i < t_cnt; i++)
+ {
+ this_resched[i] = m_mat_solvers[i]->solve();
+ }
+ }
+ }
+ else
+ for (int i = 0; i < t_cnt; i++)
+ {
+ if (do_full || (m_mat_solvers[i]->is_timestep()))
+ this_resched[i] = m_mat_solvers[i]->solve();
+ }
#else
- for (int i = 0; i < t_cnt; i++)
- {
- if (do_full || (m_mat_solvers[i]->is_timestep()))
- this_resched[i] = m_mat_solvers[i]->solve();
- }
+ for (int i = 0; i < t_cnt; i++)
+ {
+ if (do_full || (m_mat_solvers[i]->is_timestep()))
+ this_resched[i] = m_mat_solvers[i]->solve();
+ }
#endif
- for (int i = 0; i < t_cnt; i++)
- {
- if (do_full || m_mat_solvers[i]->is_timestep())
- {
- global_resched = global_resched || this_resched[i];
- if (!this_resched[i])
- m_mat_solvers[i]->update_inputs();
- }
- }
-
- if (global_resched)
- {
- netlist().warning("Gobal reschedule .. Consider increasing RESCHED_LOOPS");
- schedule();
- }
- else
- {
- /* step circuit */
- if (!m_Q_step.net().is_queued())
- m_Q_step.net().push_to_queue(m_inc);
- }
+ for (int i = 0; i < t_cnt; i++)
+ {
+ if (do_full || m_mat_solvers[i]->is_timestep())
+ {
+ global_resched = global_resched || this_resched[i];
+ if (!this_resched[i])
+ m_mat_solvers[i]->update_inputs();
+ }
+ }
+
+ if (global_resched)
+ {
+ netlist().warning("Gobal reschedule .. Consider increasing RESCHED_LOOPS");
+ schedule();
+ }
+ else
+ {
+ /* step circuit */
+ if (!m_Q_step.net().is_queued())
+ m_Q_step.net().push_to_queue(m_inc);
+ }
}
ATTR_COLD void NETLIB_NAME(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 * const *pn = netlist().m_nets.first(); pn != NULL; pn = netlist().m_nets.next(pn))
- {
- NL_VERBOSE_OUT(("proc %s\n", (*pn)->name().cstr()));
- if (!already_processed(groups, cur_group, *pn))
- {
- cur_group++;
- process_net(groups, cur_group, *pn);
- }
- }
-
- // setup the solvers
- SOLVER_VERBOSE_OUT(("Found %d net groups in %d nets\n", cur_group + 1, netlist().m_nets.count()));
- for (int i = 0; i <= cur_group; i++)
- {
- netlist_matrix_solver_t *ms;
- int net_count = groups[i].count();
-
- switch (net_count)
- {
- case 1:
- ms = new netlist_matrix_solver_direct1_t();
- break;
- case 2:
- ms = new netlist_matrix_solver_direct2_t();
- break;
- case 3:
- ms = new netlist_matrix_solver_direct_t<3,3>();
- //ms = new netlist_matrix_solver_gauss_seidel_t<3,3>();
- break;
- case 4:
- ms = new netlist_matrix_solver_direct_t<4,4>();
- //ms = new netlist_matrix_solver_gauss_seidel_t<4,4>();
- break;
+ 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 * const *pn = netlist().m_nets.first(); pn != NULL; pn = netlist().m_nets.next(pn))
+ {
+ NL_VERBOSE_OUT(("proc %s\n", (*pn)->name().cstr()));
+ if (!already_processed(groups, cur_group, *pn))
+ {
+ cur_group++;
+ process_net(groups, cur_group, *pn);
+ }
+ }
+
+ // setup the solvers
+ SOLVER_VERBOSE_OUT(("Found %d net groups in %d nets\n", cur_group + 1, netlist().m_nets.count()));
+ for (int i = 0; i <= cur_group; i++)
+ {
+ netlist_matrix_solver_t *ms;
+ int net_count = groups[i].count();
+
+ switch (net_count)
+ {
+ case 1:
+ ms = new netlist_matrix_solver_direct1_t();
+ break;
+ case 2:
+ ms = new netlist_matrix_solver_direct2_t();
+ break;
+ case 3:
+ ms = new netlist_matrix_solver_direct_t<3,3>();
+ //ms = new netlist_matrix_solver_gauss_seidel_t<3,3>();
+ break;
+ case 4:
+ ms = new netlist_matrix_solver_direct_t<4,4>();
+ //ms = new netlist_matrix_solver_gauss_seidel_t<4,4>();
+ break;
#if 0
- case 5:
- //ms = new netlist_matrix_solver_direct_t<5,5>();
- ms = new netlist_matrix_solver_gauss_seidel_t<5,5>();
- break;
- case 6:
- //ms = new netlist_matrix_solver_direct_t<6,6>();
- ms = new netlist_matrix_solver_gauss_seidel_t<6,6>();
- break;
+ case 5:
+ //ms = new netlist_matrix_solver_direct_t<5,5>();
+ ms = new netlist_matrix_solver_gauss_seidel_t<5,5>();
+ break;
+ case 6:
+ //ms = new netlist_matrix_solver_direct_t<6,6>();
+ ms = new netlist_matrix_solver_gauss_seidel_t<6,6>();
+ break;
#endif
- default:
- if (net_count <= 16)
- {
- //ms = new netlist_matrix_solver_direct_t<0,16>();
- ms = new netlist_matrix_solver_gauss_seidel_t<0,16>();
- }
- else if (net_count <= 32)
- {
- //ms = new netlist_matrix_solver_direct_t<0,16>();
- ms = new netlist_matrix_solver_gauss_seidel_t<0,32>();
- }
- else if (net_count <= 64)
- {
- //ms = new netlist_matrix_solver_direct_t<0,16>();
- ms = new netlist_matrix_solver_gauss_seidel_t<0,64>();
- }
- else
- {
- netlist().error("Encountered netgroup with > 64 nets");
- ms = NULL; /* tease compilers */
- }
-
- break;
- }
-
- ms->m_params.m_accuracy = m_accuracy.Value();
- ms->m_params.m_convergence_factor = m_convergence.Value();
- ms->m_params.m_resched_loops = m_resched_loops.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())->m_head->name().cstr()));
- SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_dynamic() ? "dynamic" : "no dynamic"));
- SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_timestep() ? "timestep" : "no timestep"));
- for (int j=0; j<groups[i].count(); j++)
- {
- SOLVER_VERBOSE_OUT(("Net %d: %s\n", j, groups[i][j]->name().cstr()));
- netlist_net_t *n = groups[i][j];
- for (netlist_core_terminal_t *p = n->m_list.first(); p != NULL; p = n->m_list.next(p))
- {
- SOLVER_VERBOSE_OUT((" %s\n", p->name().cstr()));
- }
- }
- }
+ default:
+ if (net_count <= 16)
+ {
+ //ms = new netlist_matrix_solver_direct_t<0,16>();
+ ms = new netlist_matrix_solver_gauss_seidel_t<0,16>();
+ }
+ else if (net_count <= 32)
+ {
+ //ms = new netlist_matrix_solver_direct_t<0,16>();
+ ms = new netlist_matrix_solver_gauss_seidel_t<0,32>();
+ }
+ else if (net_count <= 64)
+ {
+ //ms = new netlist_matrix_solver_direct_t<0,16>();
+ ms = new netlist_matrix_solver_gauss_seidel_t<0,64>();
+ }
+ else
+ {
+ netlist().error("Encountered netgroup with > 64 nets");
+ ms = NULL; /* tease compilers */
+ }
+
+ break;
+ }
+
+ ms->m_params.m_accuracy = m_accuracy.Value();
+ ms->m_params.m_convergence_factor = m_convergence.Value();
+ ms->m_params.m_resched_loops = m_resched_loops.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())->m_head->name().cstr()));
+ SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_dynamic() ? "dynamic" : "no dynamic"));
+ SOLVER_VERBOSE_OUT((" has %s elements\n", ms->is_timestep() ? "timestep" : "no timestep"));
+ for (int j=0; j<groups[i].count(); j++)
+ {
+ SOLVER_VERBOSE_OUT(("Net %d: %s\n", j, groups[i][j]->name().cstr()));
+ netlist_net_t *n = groups[i][j];
+ for (netlist_core_terminal_t *p = n->m_list.first(); p != NULL; p = n->m_list.next(p))
+ {
+ SOLVER_VERBOSE_OUT((" %s\n", p->name().cstr()));
+ }
+ }
+ }
}
diff --git a/src/emu/netlist/analog/nld_solver.h b/src/emu/netlist/analog/nld_solver.h
index 99bb45d7e5b..ca8129bf207 100644
--- a/src/emu/netlist/analog/nld_solver.h
+++ b/src/emu/netlist/analog/nld_solver.h
@@ -15,7 +15,7 @@
#define SOLVER(_name, _freq) \
NET_REGISTER_DEV(solver, _name) \
- PARAM(_name.FREQ, _freq)
+ PARAM(_name.FREQ, _freq)
// ----------------------------------------------------------------------------------------
// solver
@@ -27,9 +27,9 @@ class NETLIB_NAME(solver);
struct netlist_solver_parameters_t
{
- double m_accuracy;
- double m_convergence_factor;
- int m_resched_loops;
+ double m_accuracy;
+ double m_convergence_factor;
+ int m_resched_loops;
};
class netlist_matrix_solver_t
@@ -39,23 +39,23 @@ public:
typedef netlist_core_device_t::list_t dev_list_t;
netlist_matrix_solver_t() : m_owner(NULL) {}
- virtual ~netlist_matrix_solver_t() {}
+ virtual ~netlist_matrix_solver_t() {}
ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner);
// return true if a reschedule is needed ...
- ATTR_HOT virtual int solve_non_dynamic() = 0;
+ ATTR_HOT virtual int solve_non_dynamic() = 0;
ATTR_HOT virtual void step(const netlist_time delta);
- ATTR_HOT bool solve();
+ ATTR_HOT bool solve();
ATTR_HOT void update_inputs();
- ATTR_HOT void update_dynamic();
+ ATTR_HOT void update_dynamic();
ATTR_HOT void schedule();
ATTR_HOT inline bool is_dynamic() { return m_dynamic.count() > 0; }
- ATTR_HOT inline bool is_timestep() { return m_steps.count() > 0; }
+ ATTR_HOT inline bool is_timestep() { return m_steps.count() > 0; }
ATTR_HOT inline const NETLIB_NAME(solver) &owner() const;
ATTR_COLD virtual void reset();
@@ -67,9 +67,9 @@ protected:
dev_list_t m_dynamic;
netlist_core_terminal_t::list_t m_inps;
dev_list_t m_steps;
- netlist_time m_last_step;
+ netlist_time m_last_step;
- NETLIB_NAME(solver) *m_owner;
+ NETLIB_NAME(solver) *m_owner;
};
template <int m_N, int _storage_N>
@@ -77,40 +77,40 @@ class netlist_matrix_solver_direct_t: public netlist_matrix_solver_t
{
public:
- netlist_matrix_solver_direct_t() : netlist_matrix_solver_t() {}
+ netlist_matrix_solver_direct_t() : netlist_matrix_solver_t() {}
- virtual ~netlist_matrix_solver_direct_t() {}
+ virtual ~netlist_matrix_solver_direct_t() {}
- ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner);
- ATTR_COLD virtual void reset() { netlist_matrix_solver_t::reset(); }
- ATTR_HOT virtual int solve_non_dynamic();
+ ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner);
+ ATTR_COLD virtual void reset() { netlist_matrix_solver_t::reset(); }
+ ATTR_HOT virtual int solve_non_dynamic();
- ATTR_HOT inline const int N() const { return (m_N == 0) ? m_nets.count() : m_N; }
+ ATTR_HOT inline const int N() const { return (m_N == 0) ? m_nets.count() : m_N; }
protected:
- ATTR_HOT inline void build_LE(double (* RESTRICT A)[_storage_N], double (* RESTRICT RHS));
- ATTR_HOT inline void gauss_LE(double (* RESTRICT A)[_storage_N],
- double (* RESTRICT RHS),
- double (* RESTRICT x));
- ATTR_HOT inline double delta(
- const double (* RESTRICT RHS),
- const double (* RESTRICT V));
- ATTR_HOT inline void store(const double (* RESTRICT RHS), const double (* RESTRICT V));
+ ATTR_HOT inline void build_LE(double (* RESTRICT A)[_storage_N], double (* RESTRICT RHS));
+ ATTR_HOT inline void gauss_LE(double (* RESTRICT A)[_storage_N],
+ double (* RESTRICT RHS),
+ double (* RESTRICT x));
+ ATTR_HOT inline double delta(
+ const double (* RESTRICT RHS),
+ const double (* RESTRICT V));
+ ATTR_HOT inline void store(const double (* RESTRICT RHS), const double (* RESTRICT V));
- double m_RHS[_storage_N]; // right hand side - contains currents
+ double m_RHS[_storage_N]; // right hand side - contains currents
private:
- ATTR_COLD int get_net_idx(netlist_net_t *net);
+ ATTR_COLD int get_net_idx(netlist_net_t *net);
- struct terms_t{
- int net_this;
- int net_other;
- netlist_terminal_t *term;
- };
- int m_term_num;
- int m_rail_start;
- terms_t m_terms[100];
+ struct terms_t{
+ int net_this;
+ int net_other;
+ netlist_terminal_t *term;
+ };
+ int m_term_num;
+ int m_rail_start;
+ terms_t m_terms[100];
};
template <int m_N, int _storage_N>
@@ -118,42 +118,42 @@ class netlist_matrix_solver_gauss_seidel_t: public netlist_matrix_solver_t
{
public:
- netlist_matrix_solver_gauss_seidel_t() : netlist_matrix_solver_t() {}
+ netlist_matrix_solver_gauss_seidel_t() : netlist_matrix_solver_t() {}
- virtual ~netlist_matrix_solver_gauss_seidel_t() {}
+ virtual ~netlist_matrix_solver_gauss_seidel_t() {}
- ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner)
- {
- netlist_matrix_solver_t::setup(nets, owner);
- m_fallback.m_params = m_params;
- m_fallback.setup(nets, owner);
- }
+ ATTR_COLD virtual void setup(netlist_net_t::list_t &nets, NETLIB_NAME(solver) &owner)
+ {
+ netlist_matrix_solver_t::setup(nets, owner);
+ m_fallback.m_params = m_params;
+ m_fallback.setup(nets, owner);
+ }
- ATTR_HOT int solve_non_dynamic();
+ ATTR_HOT int solve_non_dynamic();
- ATTR_HOT inline const int N() const { if (m_N == 0) return m_nets.count(); else return m_N; }
+ ATTR_HOT inline const int N() const { if (m_N == 0) return m_nets.count(); else return m_N; }
- ATTR_COLD virtual void reset()
- {
- netlist_matrix_solver_t::reset();
- m_fallback.reset();
- }
+ ATTR_COLD virtual void reset()
+ {
+ netlist_matrix_solver_t::reset();
+ m_fallback.reset();
+ }
private:
- netlist_matrix_solver_direct_t<m_N, _storage_N> m_fallback;
+ netlist_matrix_solver_direct_t<m_N, _storage_N> m_fallback;
};
class netlist_matrix_solver_direct1_t: public netlist_matrix_solver_direct_t<1,1>
{
public:
- ATTR_HOT int solve_non_dynamic();
+ ATTR_HOT int solve_non_dynamic();
private:
};
class netlist_matrix_solver_direct2_t: public netlist_matrix_solver_direct_t<2,2>
{
public:
- ATTR_HOT int solve_non_dynamic();
+ ATTR_HOT int solve_non_dynamic();
private:
};
@@ -170,9 +170,9 @@ NETLIB_DEVICE_WITH_PARAMS(solver,
netlist_param_double_t m_sync_delay;
netlist_param_double_t m_accuracy;
netlist_param_double_t m_convergence;
- netlist_param_double_t m_gmin;
- netlist_param_int_t m_resched_loops;
- netlist_param_int_t m_parallel;
+ netlist_param_double_t m_gmin;
+ netlist_param_int_t m_resched_loops;
+ netlist_param_int_t m_parallel;
netlist_time m_inc;
netlist_time m_last_step;
diff --git a/src/emu/netlist/analog/nld_switches.c b/src/emu/netlist/analog/nld_switches.c
index e1f5bf0c0b0..340808c3c46 100644
--- a/src/emu/netlist/analog/nld_switches.c
+++ b/src/emu/netlist/analog/nld_switches.c
@@ -11,46 +11,46 @@
NETLIB_START(switch2)
{
- register_sub(m_R[0], "R1");
- register_sub(m_R[1], "R2");
+ register_sub(m_R[0], "R1");
+ register_sub(m_R[1], "R2");
- register_param("POS", m_POS, 0);
+ register_param("POS", m_POS, 0);
- connect(m_R[0].m_N, m_R[1].m_N);
+ connect(m_R[0].m_N, m_R[1].m_N);
- register_subalias("1", m_R[0].m_P);
- register_subalias("2", m_R[1].m_P);
+ register_subalias("1", m_R[0].m_P);
+ register_subalias("2", m_R[1].m_P);
- register_subalias("Q", m_R[0].m_N);
+ register_subalias("Q", m_R[0].m_N);
}
NETLIB_RESET(switch2)
{
- m_R[0].do_reset();
- m_R[1].do_reset();
+ m_R[0].do_reset();
+ m_R[1].do_reset();
- m_R[0].set_R(R_ON);
- m_R[1].set_R(R_OFF);
+ m_R[0].set_R(R_ON);
+ m_R[1].set_R(R_OFF);
}
NETLIB_UPDATE(switch2)
{
- if (m_POS.Value() == 0)
- {
- m_R[0].set_R(R_ON);
- m_R[1].set_R(R_OFF);
- }
- else
- {
- m_R[0].set_R(R_OFF);
- m_R[1].set_R(R_ON);
- }
-
- m_R[0].update_dev();
- m_R[1].update_dev();
+ if (m_POS.Value() == 0)
+ {
+ m_R[0].set_R(R_ON);
+ m_R[1].set_R(R_OFF);
+ }
+ else
+ {
+ m_R[0].set_R(R_OFF);
+ m_R[1].set_R(R_ON);
+ }
+
+ m_R[0].update_dev();
+ m_R[1].update_dev();
}
NETLIB_UPDATE_PARAM(switch2)
{
- update();
+ update();
}
diff --git a/src/emu/netlist/analog/nld_switches.h b/src/emu/netlist/analog/nld_switches.h
index df98738f470..5d8cf535379 100644
--- a/src/emu/netlist/analog/nld_switches.h
+++ b/src/emu/netlist/analog/nld_switches.h
@@ -25,7 +25,7 @@
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE_WITH_PARAMS(switch2,
- NETLIB_NAME(R_base) m_R[2];
+ NETLIB_NAME(R_base) m_R[2];
netlist_param_int_t m_POS;
);
diff --git a/src/emu/netlist/analog/nld_twoterm.c b/src/emu/netlist/analog/nld_twoterm.c
index 0e55f4a39de..fa06c784cdf 100644
--- a/src/emu/netlist/analog/nld_twoterm.c
+++ b/src/emu/netlist/analog/nld_twoterm.c
@@ -12,26 +12,26 @@
ATTR_COLD netlist_generic_diode::netlist_generic_diode()
{
- m_Vd = 0.7;
+ m_Vd = 0.7;
}
ATTR_COLD void netlist_generic_diode::set_param(const double Is, const double n, double gmin)
{
- m_Is = Is;
- m_n = n;
- m_gmin = gmin;
+ m_Is = Is;
+ m_n = n;
+ m_gmin = gmin;
- 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;
+ m_Vcrit = m_Vt * log(m_Vt / m_Is / sqrt(2.0));
+ m_VtInv = 1.0 / m_Vt;
}
ATTR_COLD void netlist_generic_diode::save(pstring name, netlist_object_t &parent)
{
- parent.save(m_Vd, name + ".m_Vd");
- parent.save(m_Id, name + ".m_Id");
- parent.save(m_G, name + ".m_G");
+ parent.save(m_Vd, name + ".m_Vd");
+ parent.save(m_Id, name + ".m_Id");
+ parent.save(m_G, name + ".m_G");
}
// ----------------------------------------------------------------------------------------
@@ -57,11 +57,11 @@ NETLIB_RESET(twoterm)
NETLIB_UPDATE(twoterm)
{
/* only called if connected to a rail net ==> notify the solver to recalculate */
- /* we only need to call the non-rail terminal */
- if (!m_P.net().isRailNet())
- m_P.net().solve();
- else
- m_N.net().solve();
+ /* we only need to call the non-rail terminal */
+ if (!m_P.net().isRailNet())
+ m_P.net().solve();
+ else
+ m_N.net().solve();
}
// ----------------------------------------------------------------------------------------
@@ -76,8 +76,8 @@ NETLIB_START(R_base)
NETLIB_RESET(R_base)
{
- NETLIB_NAME(twoterm)::reset();
- set_R(1.0 / netlist().gmin());
+ NETLIB_NAME(twoterm)::reset();
+ set_R(1.0 / netlist().gmin());
}
NETLIB_UPDATE(R_base)
@@ -93,7 +93,7 @@ NETLIB_START(R)
NETLIB_RESET(R)
{
- NETLIB_NAME(R_base)::reset();
+ NETLIB_NAME(R_base)::reset();
}
NETLIB_UPDATE(R)
@@ -105,10 +105,10 @@ NETLIB_UPDATE_PARAM(R)
{
//printf("updating %s to %f\n", name().cstr(), m_R.Value());
if (m_R.Value() > 1e-9)
- set_R(m_R.Value());
+ set_R(m_R.Value());
else
- set_R(1e-9);
- update_dev();
+ set_R(1e-9);
+ update_dev();
}
// ----------------------------------------------------------------------------------------
@@ -134,8 +134,8 @@ NETLIB_START(POT)
NETLIB_RESET(POT)
{
- m_R1.do_reset();
- m_R2.do_reset();
+ m_R1.do_reset();
+ m_R2.do_reset();
}
NETLIB_UPDATE(POT)
@@ -152,8 +152,8 @@ NETLIB_UPDATE_PARAM(POT)
m_R1.set_R(MAX(m_R.Value() * v, netlist().gmin()));
m_R2.set_R(MAX(m_R.Value() * (1.0 - v), netlist().gmin()));
// force a schedule all
- m_R1.update_dev();
- m_R2.update_dev();
+ m_R1.update_dev();
+ m_R2.update_dev();
}
// ----------------------------------------------------------------------------------------
@@ -168,14 +168,14 @@ NETLIB_START(C)
register_param("C", m_C, 1e-6);
// set up the element
- set(netlist().gmin(), 0.0, -5.0 / netlist().gmin());
- //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
+ set(netlist().gmin(), 0.0, -5.0 / netlist().gmin());
+ //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
}
NETLIB_RESET(C)
{
- set(netlist().gmin(), 0.0, -5.0 / netlist().gmin());
- //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
+ set(netlist().gmin(), 0.0, -5.0 / netlist().gmin());
+ //set(1.0/NETLIST_GMIN, 0.0, -5.0 * NETLIST_GMIN);
}
NETLIB_UPDATE_PARAM(C)
@@ -215,5 +215,3 @@ NETLIB_UPDATE(D)
{
NETLIB_NAME(twoterm)::update();
}
-
-
diff --git a/src/emu/netlist/analog/nld_twoterm.h b/src/emu/netlist/analog/nld_twoterm.h
index 59f95c9983a..d5a2bf7d6f4 100644
--- a/src/emu/netlist/analog/nld_twoterm.h
+++ b/src/emu/netlist/analog/nld_twoterm.h
@@ -84,23 +84,23 @@ public:
m_P.m_Idr = ( V) * G - I;
}
- ATTR_HOT inline double deltaV() { return m_P.net().Q_Analog()- m_N.net().Q_Analog(); }
+ ATTR_HOT inline double deltaV() { return m_P.net().Q_Analog()- m_N.net().Q_Analog(); }
- ATTR_HOT void set_mat(double a11, double a12, double a21, double a22, double r1, double r2)
- {
- m_P.m_gt = a11;
- m_P.m_go = -a12;
- m_N.m_gt = a22;
- m_N.m_go = -a21;
+ ATTR_HOT void set_mat(double a11, double a12, double a21, double a22, double r1, double r2)
+ {
+ m_P.m_gt = a11;
+ m_P.m_go = -a12;
+ m_N.m_gt = a22;
+ m_N.m_go = -a21;
- m_P.m_Idr = -r1;
- m_N.m_Idr = -r2;
+ m_P.m_Idr = -r1;
+ m_N.m_Idr = -r2;
- }
+ }
protected:
ATTR_COLD virtual void start();
- ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void reset();
ATTR_HOT ATTR_ALIGN void update();
private:
@@ -119,7 +119,7 @@ public:
protected:
ATTR_COLD virtual void start();
- ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void reset();
ATTR_HOT ATTR_ALIGN void update();
};
@@ -159,7 +159,7 @@ public:
protected:
ATTR_COLD virtual void start();
- ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void reset();
ATTR_COLD virtual void update_param();
ATTR_HOT ATTR_ALIGN void update();
@@ -175,67 +175,67 @@ protected:
class netlist_generic_diode
{
public:
- ATTR_COLD netlist_generic_diode();
-
- ATTR_HOT inline void update_diode(const double nVd)
- {
- //FIXME: Optimize cutoff case
-
- if (nVd < -5.0 * m_Vt)
- {
- m_Vd = nVd;
- m_G = m_gmin;
- m_Id = - m_Is;
- }
- else if (nVd < m_Vcrit)
- {
- m_Vd = nVd;
-
- const double eVDVt = exp(m_Vd * m_VtInv);
- m_Id = m_Is * (eVDVt - 1.0);
- m_G = m_Is * m_VtInv * eVDVt + m_gmin;
- }
- else
- {
+ ATTR_COLD netlist_generic_diode();
+
+ ATTR_HOT inline void update_diode(const double nVd)
+ {
+ //FIXME: Optimize cutoff case
+
+ if (nVd < -5.0 * m_Vt)
+ {
+ m_Vd = nVd;
+ m_G = m_gmin;
+ m_Id = - m_Is;
+ }
+ else if (nVd < m_Vcrit)
+ {
+ m_Vd = nVd;
+
+ const double eVDVt = exp(m_Vd * m_VtInv);
+ m_Id = m_Is * (eVDVt - 1.0);
+ m_G = m_Is * m_VtInv * eVDVt + m_gmin;
+ }
+ 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
- double a = (nVd - m_Vd) * m_VtInv;
- if (a<1e-12 - 1.0) a = 1e-12 - 1.0;
- m_Vd = m_Vd + log1p(a) * m_Vt;
+ double a = (nVd - m_Vd) * m_VtInv;
+ if (a<1e-12 - 1.0) a = 1e-12 - 1.0;
+ m_Vd = m_Vd + log1p(a) * m_Vt;
#endif
- const double eVDVt = exp(m_Vd * m_VtInv);
- m_Id = m_Is * (eVDVt - 1.0);
+ const double eVDVt = exp(m_Vd * m_VtInv);
+ m_Id = m_Is * (eVDVt - 1.0);
- m_G = m_Is * m_VtInv * eVDVt + m_gmin;
- }
+ m_G = m_Is * m_VtInv * eVDVt + m_gmin;
+ }
- //printf("nVd %f m_Vd %f Vcrit %f\n", nVd, m_Vd, m_Vcrit);
- }
+ //printf("nVd %f m_Vd %f Vcrit %f\n", nVd, m_Vd, m_Vcrit);
+ }
- ATTR_COLD void set_param(const double Is, const double n, double gmin);
+ ATTR_COLD void set_param(const double Is, const double n, double gmin);
- ATTR_HOT inline double I() const { return m_Id; }
- ATTR_HOT inline double G() const { return m_G; }
- ATTR_HOT inline double Ieq() const { return (m_Id - m_Vd * m_G); }
- ATTR_HOT inline double Vd() const { return m_Vd; }
+ ATTR_HOT inline double I() const { return m_Id; }
+ ATTR_HOT inline double G() const { return m_G; }
+ ATTR_HOT inline double Ieq() const { return (m_Id - m_Vd * m_G); }
+ ATTR_HOT inline double Vd() const { return m_Vd; }
- /* owning object must save those ... */
+ /* owning object must save those ... */
- ATTR_COLD void save(pstring name, netlist_object_t &parent);
+ ATTR_COLD void save(pstring name, netlist_object_t &parent);
private:
- double m_Vd;
- double m_Id;
- double m_G;
+ double m_Vd;
+ double m_Id;
+ double m_G;
- double m_Vt;
- double m_Is;
- double m_n;
- double m_gmin;
+ double m_Vt;
+ double m_Is;
+ double m_n;
+ double m_gmin;
- double m_VtInv;
- double m_Vcrit;
+ double m_VtInv;
+ double m_Vcrit;
};
// ----------------------------------------------------------------------------------------
@@ -278,7 +278,7 @@ public:
NETLIB_UPDATE_TERMINALS()
{
- m_D.update_diode(deltaV());
+ m_D.update_diode(deltaV());
set(m_D.G(), 0.0, m_D.Ieq());
}
diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c
index ecc27fc13ab..7834386df31 100644
--- a/src/emu/netlist/devices/net_lib.c
+++ b/src/emu/netlist/devices/net_lib.c
@@ -51,15 +51,15 @@
#include "nld_system.h"
NETLIST_START(diode_models)
- NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
- NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
+ NET_MODEL(".model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
+ NET_MODEL(".model 1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)")
NETLIST_END()
NETLIST_START(bjt_models)
- NET_MODEL(".MODEL BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
- NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
- NET_MODEL(".model 2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
- NET_MODEL(".model 2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
+ NET_MODEL(".MODEL BC237B NPN(IS=1.8E-14 ISE=5.0E-14 ISC=1.72E-13 XTI=3 BF=400 BR=35.5 IKF=0.14 IKR=0.03 XTB=1.5 VAF=80 VAR=12.5 VJE=0.58 VJC=0.54 RE=0.6 RC=0.25 RB=0.56 CJE=13E-12 CJC=4E-12 XCJC=0.75 FC=0.5 NF=0.9955 NR=1.005 NE=1.46 NC=1.27 MJE=0.33 MJC=0.33 TF=0.64E-9 TR=50.72E-9 EG=1.11 KF=0 AF=1 VCEO=45V ICRATING=100M MFG=ZETEX)")
+ NET_MODEL(".model BC556B PNP(IS=3.83E-14 NF=1.008 ISE=1.22E-14 NE=1.528 BF=344.4 IKF=0.08039 VAF=21.11 NR=1.005 ISC=2.85E-13 NC=1.28 BR=14.84 IKR=0.047 VAR=32.02 RB=1 IRB=1.00E-06 RBM=1 RE=0.6202 RC=0.5713 XTB=0 EG=1.11 XTI=3 CJE=1.23E-11 VJE=0.6106 MJE=0.378 TF=5.60E-10 XTF=3.414 VTF=5.23 ITF=0.1483 PTF=0 CJC=1.08E-11 VJC=0.1022 MJC=0.3563 XCJC=0.6288 TR=1.00E-32 CJS=0 VJS=0.75 MJS=0.333 FC=0.8027 Vceo=65 Icrating=100m mfg=Philips)")
+ NET_MODEL(".model 2SA1015 PNP(Is=295.1E-18 Xti=3 Eg=1.11 Vaf=100 Bf=110 Xtb=1.5 Br=10.45 Rc=15 Cjc=66.2p Mjc=1.054 Vjc=.75 Fc=.5 Cje=5p Mje=.3333 Vje=.75 Tr=10n Tf=1.661n VCEO=45V ICrating=150M MFG=Toshiba)")
+ NET_MODEL(".model 2SC1815 NPN(Is=2.04f Xti=3 Eg=1.11 Vaf=6 Bf=400 Ikf=20m Xtb=1.5 Br=3.377 Rc=1 Cjc=1p Mjc=.3333 Vjc=.75 Fc=.5 Cje=25p Mje=.3333 Vje=.75 Tr=450n Tf=20n Itf=0 Vtf=0 Xtf=0 VCEO=45V ICrating=150M MFG=Toshiba)")
NETLIST_END()
@@ -89,7 +89,7 @@ void netlist_factory_t::initialize()
ENTRY(D, DIODE, "model")
ENTRY(VCVS, VCVS, "-") // FIXME: STD parameters ?
ENTRY(VCCS, VCCS, "-")
- ENTRY(QBJT_EB, QBJT_EB, "model")
+ ENTRY(QBJT_EB, QBJT_EB, "model")
ENTRY(QBJT_switch, QBJT_SW, "model")
ENTRY(ttl_input, TTL_INPUT, "IN")
ENTRY(analog_input, ANALOG_INPUT, "IN")
@@ -98,7 +98,7 @@ void netlist_factory_t::initialize()
ENTRY(clock, CLOCK, "FREQ")
ENTRY(mainclock, MAINCLOCK, "FREQ")
ENTRY(solver, SOLVER, "FREQ")
- ENTRY(gnd, GND, "-")
+ ENTRY(gnd, GND, "-")
ENTRY(switch2, SWITCH2, "-")
ENTRY(nicRSFF, NETDEV_RSFF, "+S,R")
ENTRY(7400, TTL_7400_NAND, "+A,B")
@@ -119,30 +119,30 @@ void netlist_factory_t::initialize()
ENTRY(74107, TTL_74107, "+CLK,J,K,CLRQ")
ENTRY(74107A, TTL_74107A, "+CLK,J,K,CLRQ")
ENTRY(74153, TTL_74153, "+C0,C1,C2,C3,A,B,G")
- ENTRY(SN74LS629, SN74LS629, "CAP")
+ ENTRY(SN74LS629, SN74LS629, "CAP")
ENTRY(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D")
ENTRY(NE555, NE555, "-")
- ENTRY(4066_dip, CD_4066_DIP, "-")
- ENTRY(7400_dip, TTL_7400_DIP, "-")
- ENTRY(7402_dip, TTL_7402_DIP, "-")
- ENTRY(7404_dip, TTL_7404_DIP, "-")
- ENTRY(7410_dip, TTL_7410_DIP, "-")
- ENTRY(7420_dip, TTL_7420_DIP, "-")
- ENTRY(7425_dip, TTL_7425_DIP, "-")
- ENTRY(7427_dip, TTL_7427_DIP, "-")
- ENTRY(7430_dip, TTL_7430_DIP, "-")
- ENTRY(7448_dip, TTL_7448_DIP, "-")
- ENTRY(7450_dip, TTL_7450_DIP, "-")
- ENTRY(7474_dip, TTL_7474_DIP, "-")
- ENTRY(7483_dip, TTL_7483_DIP, "-")
- ENTRY(7486_dip, TTL_7486_DIP, "-")
- ENTRY(7490_dip, TTL_7490_DIP, "-")
- ENTRY(7493_dip, TTL_7493_DIP, "-")
- ENTRY(74107_dip, TTL_74107_DIP, "-")
- ENTRY(74153_dip, TTL_74153_DIP, "-")
- ENTRY(9316_dip, TTL_9316_DIP, "-")
- ENTRY(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2")
- ENTRY(NE555_dip, NE555_DIP, "-")
+ ENTRY(4066_dip, CD_4066_DIP, "-")
+ ENTRY(7400_dip, TTL_7400_DIP, "-")
+ ENTRY(7402_dip, TTL_7402_DIP, "-")
+ ENTRY(7404_dip, TTL_7404_DIP, "-")
+ ENTRY(7410_dip, TTL_7410_DIP, "-")
+ ENTRY(7420_dip, TTL_7420_DIP, "-")
+ ENTRY(7425_dip, TTL_7425_DIP, "-")
+ ENTRY(7427_dip, TTL_7427_DIP, "-")
+ ENTRY(7430_dip, TTL_7430_DIP, "-")
+ ENTRY(7448_dip, TTL_7448_DIP, "-")
+ ENTRY(7450_dip, TTL_7450_DIP, "-")
+ ENTRY(7474_dip, TTL_7474_DIP, "-")
+ ENTRY(7483_dip, TTL_7483_DIP, "-")
+ ENTRY(7486_dip, TTL_7486_DIP, "-")
+ ENTRY(7490_dip, TTL_7490_DIP, "-")
+ ENTRY(7493_dip, TTL_7493_DIP, "-")
+ ENTRY(74107_dip, TTL_74107_DIP, "-")
+ ENTRY(74153_dip, TTL_74153_DIP, "-")
+ ENTRY(9316_dip, TTL_9316_DIP, "-")
+ ENTRY(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2")
+ ENTRY(NE555_dip, NE555_DIP, "-")
}
netlist_device_t *netlist_factory_t::new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const
@@ -163,21 +163,21 @@ netlist_device_t *netlist_factory_t::new_device_by_classname(const pstring &clas
netlist_device_t *netlist_factory_t::new_device_by_name(const pstring &name, netlist_setup_t &setup) const
{
- net_device_t_base_factory *f = factory_by_name(name, setup);
- return f->Create();
+ net_device_t_base_factory *f = factory_by_name(name, setup);
+ return f->Create();
}
net_device_t_base_factory * netlist_factory_t::factory_by_name(const pstring &name, netlist_setup_t &setup) const
{
- for (net_device_t_base_factory * const *e = m_list.first(); e != NULL; e = m_list.next(e))
- {
- net_device_t_base_factory *p = *e;
- if (strcmp(p->name(), name) == 0)
- {
- return p;
- }
- p++;
- }
- setup.netlist().error("Class %s not found!\n", name.cstr());
- return NULL; // appease code analysis
+ for (net_device_t_base_factory * const *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = *e;
+ if (strcmp(p->name(), name) == 0)
+ {
+ return p;
+ }
+ p++;
+ }
+ setup.netlist().error("Class %s not found!\n", name.cstr());
+ return NULL; // appease code analysis
}
diff --git a/src/emu/netlist/devices/nld_4066.c b/src/emu/netlist/devices/nld_4066.c
index 9a3b05f55cd..19f67543516 100644
--- a/src/emu/netlist/devices/nld_4066.c
+++ b/src/emu/netlist/devices/nld_4066.c
@@ -25,70 +25,70 @@ NETLIB_START(4066)
NETLIB_RESET(4066)
{
- m_R.do_reset();
+ m_R.do_reset();
}
NETLIB_UPDATE(4066)
{
- double sup = (m_supply->vdd() - m_supply->vss());
- double low = 0.45 * sup;
- double high = 0.55 * sup;
- double in = INPANALOG(m_control) - m_supply->vss();
- double rON = 270.0 * 5.0 / sup;
+ double sup = (m_supply->vdd() - m_supply->vss());
+ double low = 0.45 * sup;
+ double high = 0.55 * sup;
+ double in = INPANALOG(m_control) - m_supply->vss();
+ double rON = 270.0 * 5.0 / sup;
- if (in < low)
- {
- m_R.set_R(1.0 / netlist().gmin());
- m_R.update_dev();
- }
- else if (in > high)
- {
- m_R.set_R(rON);
- m_R.update_dev();
- }
+ if (in < low)
+ {
+ m_R.set_R(1.0 / netlist().gmin());
+ m_R.update_dev();
+ }
+ else if (in > high)
+ {
+ m_R.set_R(rON);
+ m_R.update_dev();
+ }
}
NETLIB_START(4066_dip)
{
- register_sub(m_supply, "supply");
- m_A.m_supply = m_B.m_supply = m_C.m_supply = m_D.m_supply = &m_supply;
- register_sub(m_A, "A");
- register_sub(m_B, "B");
- register_sub(m_C, "C");
- register_sub(m_D, "D");
+ register_sub(m_supply, "supply");
+ m_A.m_supply = m_B.m_supply = m_C.m_supply = m_D.m_supply = &m_supply;
+ register_sub(m_A, "A");
+ register_sub(m_B, "B");
+ register_sub(m_C, "C");
+ register_sub(m_D, "D");
- register_subalias("1", m_A.m_R.m_P);
- register_subalias("2", m_A.m_R.m_N);
- register_subalias("3", m_B.m_R.m_P);
- register_subalias("4", m_B.m_R.m_N);
- register_subalias("5", m_B.m_control);
- register_subalias("6", m_C.m_control);
- register_input("7", m_supply.m_vss);
+ register_subalias("1", m_A.m_R.m_P);
+ register_subalias("2", m_A.m_R.m_N);
+ register_subalias("3", m_B.m_R.m_P);
+ register_subalias("4", m_B.m_R.m_N);
+ register_subalias("5", m_B.m_control);
+ register_subalias("6", m_C.m_control);
+ register_input("7", m_supply.m_vss);
- register_subalias("8", m_C.m_R.m_P);
- register_subalias("9", m_C.m_R.m_N);
- register_subalias("10", m_D.m_R.m_P);
- register_subalias("11", m_D.m_R.m_N);
- register_subalias("12", m_D.m_control);
- register_subalias("13", m_A.m_control);
- register_input("14", m_supply.m_vdd);
+ register_subalias("8", m_C.m_R.m_P);
+ register_subalias("9", m_C.m_R.m_N);
+ register_subalias("10", m_D.m_R.m_P);
+ register_subalias("11", m_D.m_R.m_N);
+ register_subalias("12", m_D.m_control);
+ register_subalias("13", m_A.m_control);
+ register_input("14", m_supply.m_vdd);
}
NETLIB_RESET(4066_dip)
{
- m_A.do_reset();
- m_B.do_reset();
- m_C.do_reset();
- m_D.do_reset();
+ m_A.do_reset();
+ m_B.do_reset();
+ m_C.do_reset();
+ m_D.do_reset();
}
NETLIB_UPDATE(4066_dip)
{
- /* only called during startup */
- m_A.update_dev();
- m_B.update_dev();
- m_C.update_dev();
- m_D.update_dev();
+ /* only called during startup */
+ m_A.update_dev();
+ m_B.update_dev();
+ m_C.update_dev();
+ m_D.update_dev();
}
diff --git a/src/emu/netlist/devices/nld_4066.h b/src/emu/netlist/devices/nld_4066.h
index a2bfff2c3c6..ddd12ef0a50 100644
--- a/src/emu/netlist/devices/nld_4066.h
+++ b/src/emu/netlist/devices/nld_4066.h
@@ -28,15 +28,15 @@
#include "../analog/nld_twoterm.h"
#define CD_4066_DIP(_name) \
- NET_REGISTER_DEV(4066_dip, _name)
+ NET_REGISTER_DEV(4066_dip, _name)
NETLIB_SUBDEVICE(vdd_vss,
netlist_analog_input_t m_vdd;
- netlist_analog_input_t m_vss;
+ netlist_analog_input_t m_vss;
public:
- ATTR_HOT inline double vdd() { return INPANALOG(m_vdd); }
- ATTR_HOT inline double vss() { return INPANALOG(m_vss); }
+ ATTR_HOT inline double vdd() { return INPANALOG(m_vdd); }
+ ATTR_HOT inline double vss() { return INPANALOG(m_vss); }
);
NETLIB_SUBDEVICE(4066,
@@ -50,11 +50,11 @@ public:
NETLIB_DEVICE(4066_dip,
- NETLIB_NAME(4066) m_A;
- NETLIB_NAME(4066) m_B;
- NETLIB_NAME(4066) m_C;
- NETLIB_NAME(4066) m_D;
- NETLIB_NAME(vdd_vss) m_supply;
+ NETLIB_NAME(4066) m_A;
+ NETLIB_NAME(4066) m_B;
+ NETLIB_NAME(4066) m_C;
+ NETLIB_NAME(4066) m_D;
+ NETLIB_NAME(vdd_vss) m_supply;
);
#endif /* NLD_4066_H_ */
diff --git a/src/emu/netlist/devices/nld_7400.c b/src/emu/netlist/devices/nld_7400.c
index e4a3731cd49..e6025c3bdcb 100644
--- a/src/emu/netlist/devices/nld_7400.c
+++ b/src/emu/netlist/devices/nld_7400.c
@@ -7,42 +7,41 @@
NETLIB_START(7400_dip)
{
- 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("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("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
- register_subalias("11", m_4.m_Q);
+ 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("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("12", m_4.m_i[0]);
+ register_subalias("13", m_4.m_i[1]);
+ register_subalias("11", m_4.m_Q);
}
NETLIB_UPDATE(7400_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
- m_4.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
+ m_4.update_dev();
}
NETLIB_RESET(7400_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
- m_4.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
+ m_4.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7400.h b/src/emu/netlist/devices/nld_7400.h
index e5b356eecb2..3e30bba7c58 100644
--- a/src/emu/netlist/devices/nld_7400.h
+++ b/src/emu/netlist/devices/nld_7400.h
@@ -42,7 +42,7 @@
NETLIB_SIGNAL(7400, 2, 0, 0);
#define TTL_7400_DIP(_name) \
- NET_REGISTER_DEV(7400_dip, _name)
+ NET_REGISTER_DEV(7400_dip, _name)
NETLIB_DEVICE(7400_dip,
diff --git a/src/emu/netlist/devices/nld_7402.c b/src/emu/netlist/devices/nld_7402.c
index cf744f70ba2..3a01e083336 100644
--- a/src/emu/netlist/devices/nld_7402.c
+++ b/src/emu/netlist/devices/nld_7402.c
@@ -7,42 +7,41 @@
NETLIB_START(7402_dip)
{
- 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_Q);
- register_subalias("2", m_1.m_i[0]);
- register_subalias("3", m_1.m_i[1]);
-
- register_subalias("4", m_2.m_Q);
- register_subalias("5", m_2.m_i[0]);
- register_subalias("6", m_2.m_i[1]);
-
- register_subalias("8", m_3.m_i[0]);
- register_subalias("9", m_3.m_i[1]);
- register_subalias("10", m_3.m_Q);
-
- register_subalias("11", m_4.m_i[0]);
- register_subalias("12", m_4.m_i[1]);
- register_subalias("13", m_4.m_Q);
+ 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_Q);
+ register_subalias("2", m_1.m_i[0]);
+ register_subalias("3", m_1.m_i[1]);
+
+ register_subalias("4", m_2.m_Q);
+ register_subalias("5", m_2.m_i[0]);
+ register_subalias("6", m_2.m_i[1]);
+
+ register_subalias("8", m_3.m_i[0]);
+ register_subalias("9", m_3.m_i[1]);
+ register_subalias("10", m_3.m_Q);
+
+ register_subalias("11", m_4.m_i[0]);
+ register_subalias("12", m_4.m_i[1]);
+ register_subalias("13", m_4.m_Q);
}
NETLIB_UPDATE(7402_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
- m_4.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
+ m_4.update_dev();
}
NETLIB_RESET(7402_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
- m_4.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
+ m_4.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7402.h b/src/emu/netlist/devices/nld_7402.h
index 4f050514633..c8e45c7f59b 100644
--- a/src/emu/netlist/devices/nld_7402.h
+++ b/src/emu/netlist/devices/nld_7402.h
@@ -40,17 +40,17 @@
NET_CONNECT(_name, B, _I2)
#define TTL_7402_DIP(_name) \
- NET_REGISTER_DEV(7402_dip, _name)
+ NET_REGISTER_DEV(7402_dip, _name)
NETLIB_SIGNAL(7402, 2, 1, 0);
NETLIB_DEVICE(7402_dip,
- NETLIB_NAME(7402) m_1;
- NETLIB_NAME(7402) m_2;
- NETLIB_NAME(7402) m_3;
- NETLIB_NAME(7402) m_4;
+ NETLIB_NAME(7402) m_1;
+ NETLIB_NAME(7402) m_2;
+ NETLIB_NAME(7402) m_3;
+ NETLIB_NAME(7402) m_4;
);
#endif /* NLD_7402_H_ */
diff --git a/src/emu/netlist/devices/nld_7404.c b/src/emu/netlist/devices/nld_7404.c
index 99591d961f8..e0f1dd59e19 100644
--- a/src/emu/netlist/devices/nld_7404.c
+++ b/src/emu/netlist/devices/nld_7404.c
@@ -24,50 +24,50 @@ NETLIB_UPDATE(7404)
NETLIB_START(7404_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
- register_sub(m_3, "3");
- register_sub(m_4, "4");
- register_sub(m_5, "5");
- register_sub(m_6, "6");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+ register_sub(m_3, "3");
+ register_sub(m_4, "4");
+ register_sub(m_5, "5");
+ register_sub(m_6, "6");
- register_subalias("1", m_1.m_I);
- register_subalias("2", m_1.m_Q);
+ register_subalias("1", m_1.m_I);
+ register_subalias("2", m_1.m_Q);
- register_subalias("3", m_2.m_I);
- register_subalias("4", m_2.m_Q);
+ register_subalias("3", m_2.m_I);
+ register_subalias("4", m_2.m_Q);
- register_subalias("5", m_3.m_I);
- register_subalias("6", m_3.m_Q);
+ register_subalias("5", m_3.m_I);
+ register_subalias("6", m_3.m_Q);
- register_subalias("8", m_4.m_Q);
- register_subalias("9", m_4.m_I);
+ register_subalias("8", m_4.m_Q);
+ register_subalias("9", m_4.m_I);
- register_subalias("10", m_5.m_Q);
- register_subalias("11", m_5.m_I);
+ register_subalias("10", m_5.m_Q);
+ register_subalias("11", m_5.m_I);
- register_subalias("12", m_6.m_Q);
- register_subalias("13", m_6.m_I);
+ register_subalias("12", m_6.m_Q);
+ register_subalias("13", m_6.m_I);
}
NETLIB_UPDATE(7404_dip)
{
- /* only called during startup */
+ /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
- m_4.update_dev();
- m_5.update_dev();
- m_6.update_dev();
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
+ m_4.update_dev();
+ m_5.update_dev();
+ m_6.update_dev();
}
NETLIB_RESET(7404_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
- m_4.do_reset();
- m_5.do_reset();
- m_6.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
+ m_4.do_reset();
+ m_5.do_reset();
+ m_6.do_reset();
}
diff --git a/src/emu/netlist/devices/nld_7404.h b/src/emu/netlist/devices/nld_7404.h
index 88151503f8a..f96eb355251 100644
--- a/src/emu/netlist/devices/nld_7404.h
+++ b/src/emu/netlist/devices/nld_7404.h
@@ -43,15 +43,15 @@ public:
NET_CONNECT(_name, A, _A)
#define TTL_7404_DIP(_name) \
- NET_REGISTER_DEV(7402_dip, _name)
+ NET_REGISTER_DEV(7402_dip, _name)
NETLIB_DEVICE(7404_dip,
- NETLIB_NAME(7404) m_1;
- NETLIB_NAME(7404) m_2;
- NETLIB_NAME(7404) m_3;
- NETLIB_NAME(7404) m_4;
- NETLIB_NAME(7404) m_5;
- NETLIB_NAME(7404) m_6;
+ NETLIB_NAME(7404) m_1;
+ NETLIB_NAME(7404) m_2;
+ NETLIB_NAME(7404) m_3;
+ NETLIB_NAME(7404) m_4;
+ NETLIB_NAME(7404) m_5;
+ NETLIB_NAME(7404) m_6;
);
#endif /* NLD_7404_H_ */
diff --git a/src/emu/netlist/devices/nld_7410.c b/src/emu/netlist/devices/nld_7410.c
index 933a2b0fb07..95f477a2b4a 100644
--- a/src/emu/netlist/devices/nld_7410.c
+++ b/src/emu/netlist/devices/nld_7410.c
@@ -7,38 +7,37 @@
NETLIB_START(7410_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
- register_sub(m_3, "3");
-
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_2.m_i[0]);
- register_subalias("4", m_2.m_i[1]);
- register_subalias("5", m_2.m_i[2]);
- register_subalias("6", m_2.m_Q);
-
- 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("11", m_3.m_i[2]);
-
- register_subalias("12", m_1.m_Q);
- register_subalias("13", m_1.m_i[2]);
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+ register_sub(m_3, "3");
+
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
+ register_subalias("3", m_2.m_i[0]);
+ register_subalias("4", m_2.m_i[1]);
+ register_subalias("5", m_2.m_i[2]);
+ register_subalias("6", m_2.m_Q);
+
+ 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("11", m_3.m_i[2]);
+
+ register_subalias("12", m_1.m_Q);
+ register_subalias("13", m_1.m_i[2]);
}
NETLIB_UPDATE(7410_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
}
NETLIB_RESET(7410_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7410.h b/src/emu/netlist/devices/nld_7410.h
index 098ca903fff..82c6c194476 100644
--- a/src/emu/netlist/devices/nld_7410.h
+++ b/src/emu/netlist/devices/nld_7410.h
@@ -43,13 +43,13 @@
NETLIB_SIGNAL(7410, 3, 0, 0);
#define TTL_7410_DIP(_name) \
- NET_REGISTER_DEV(7410_dip, _name)
+ NET_REGISTER_DEV(7410_dip, _name)
NETLIB_DEVICE(7410_dip,
- NETLIB_NAME(7410) m_1;
- NETLIB_NAME(7410) m_2;
- NETLIB_NAME(7410) m_3;
+ NETLIB_NAME(7410) m_1;
+ NETLIB_NAME(7410) m_2;
+ NETLIB_NAME(7410) m_3;
);
#endif /* NLD_7410_H_ */
diff --git a/src/emu/netlist/devices/nld_74107.c b/src/emu/netlist/devices/nld_74107.c
index 7480b9fcd74..b679b2125d7 100644
--- a/src/emu/netlist/devices/nld_74107.c
+++ b/src/emu/netlist/devices/nld_74107.c
@@ -18,13 +18,13 @@ NETLIB_START(74107Asub)
NETLIB_RESET(74107Asub)
{
- m_clk.set_state(netlist_input_t::STATE_INP_HL);
- m_Q.initial(0);
- m_QQ.initial(1);
+ m_clk.set_state(netlist_input_t::STATE_INP_HL);
+ m_Q.initial(0);
+ m_QQ.initial(1);
- m_Q1 = 0;
- m_Q2 = 0;
- m_F = 0;
+ m_Q1 = 0;
+ m_Q2 = 0;
+ m_F = 0;
}
NETLIB_START(74107A)
@@ -42,7 +42,7 @@ NETLIB_START(74107A)
NETLIB_RESET(74107A)
{
- sub.reset();
+ sub.reset();
}
ATTR_HOT inline void NETLIB_NAME(74107Asub)::newstate(const netlist_sig_t state)
@@ -103,39 +103,39 @@ NETLIB_UPDATE(74107A)
NETLIB_START(74107_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
- register_subalias("1", m_1.m_J);
- register_subalias("2", m_1.sub.m_QQ);
- register_subalias("3", m_1.sub.m_Q);
+ register_subalias("1", m_1.m_J);
+ register_subalias("2", m_1.sub.m_QQ);
+ register_subalias("3", m_1.sub.m_Q);
- register_subalias("4", m_1.m_K);
- register_subalias("5", m_2.sub.m_Q);
- register_subalias("6", m_2.sub.m_QQ);
+ register_subalias("4", m_1.m_K);
+ register_subalias("5", m_2.sub.m_Q);
+ register_subalias("6", m_2.sub.m_QQ);
- // register_subalias("7", ); ==> GND
+ // register_subalias("7", ); ==> GND
- register_subalias("8", m_2.m_J);
- register_subalias("9", m_2.sub.m_clk);
- register_subalias("10", m_2.m_clrQ);
+ register_subalias("8", m_2.m_J);
+ register_subalias("9", m_2.sub.m_clk);
+ register_subalias("10", m_2.m_clrQ);
- register_subalias("11", m_2.m_K);
- register_subalias("12", m_1.sub.m_clk);
- register_subalias("13", m_1.m_clrQ);
+ register_subalias("11", m_2.m_K);
+ register_subalias("12", m_1.sub.m_clk);
+ register_subalias("13", m_1.m_clrQ);
- // register_subalias("14", ); ==> VCC
+ // register_subalias("14", ); ==> VCC
}
NETLIB_RESET(74107_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
NETLIB_UPDATE(74107_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
}
diff --git a/src/emu/netlist/devices/nld_74107.h b/src/emu/netlist/devices/nld_74107.h
index 44b0b766372..150516a00c3 100644
--- a/src/emu/netlist/devices/nld_74107.h
+++ b/src/emu/netlist/devices/nld_74107.h
@@ -72,7 +72,7 @@
TTL_74107A(_name, _CLK, _J, _K, _CLRQ)
#define TTL_74107_DIP(_name) \
- NET_REGISTER_DEV(74107_dip, _name)
+ NET_REGISTER_DEV(74107_dip, _name)
NETLIB_SUBDEVICE(74107Asub,
netlist_ttl_input_t m_clk;
@@ -108,8 +108,8 @@ public:
NETLIB_DEVICE(74107_dip,
- NETLIB_NAME(74107) m_1;
- NETLIB_NAME(74107) m_2;
+ NETLIB_NAME(74107) m_1;
+ NETLIB_NAME(74107) m_2;
);
#endif /* NLD_74107_H_ */
diff --git a/src/emu/netlist/devices/nld_74153.c b/src/emu/netlist/devices/nld_74153.c
index f8e16408009..94c51fa85a8 100644
--- a/src/emu/netlist/devices/nld_74153.c
+++ b/src/emu/netlist/devices/nld_74153.c
@@ -12,42 +12,42 @@
NETLIB_START(74153sub)
{
- register_input("C0", m_C[0]);
- register_input("C1", m_C[1]);
- register_input("C2", m_C[2]);
- register_input("C3", m_C[3]);
- register_input("G", m_G);
+ register_input("C0", m_C[0]);
+ register_input("C1", m_C[1]);
+ register_input("C2", m_C[2]);
+ register_input("C3", m_C[3]);
+ register_input("G", m_G);
- register_output("AY", m_Y); //FIXME: Change netlists
+ register_output("AY", m_Y); //FIXME: Change netlists
- m_chan = 0;
+ m_chan = 0;
- save(NAME(m_chan));
+ save(NAME(m_chan));
}
NETLIB_RESET(74153sub)
{
- m_chan = 0;
+ m_chan = 0;
}
NETLIB_UPDATE(74153sub)
{
- const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
- if (!INPLOGIC(m_G))
- {
- UINT8 t = INPLOGIC(m_C[m_chan]);
- OUTLOGIC(m_Y, t, delay[t] );
- }
- else
- {
- OUTLOGIC(m_Y, 0, delay[0]);
- }
+ const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
+ if (!INPLOGIC(m_G))
+ {
+ UINT8 t = INPLOGIC(m_C[m_chan]);
+ OUTLOGIC(m_Y, t, delay[t] );
+ }
+ else
+ {
+ OUTLOGIC(m_Y, 0, delay[0]);
+ }
}
NETLIB_START(74153)
{
- register_sub(m_sub, "SUB");
+ register_sub(m_sub, "SUB");
register_subalias("C0", m_sub.m_C[0]);
register_subalias("C1", m_sub.m_C[1]);
@@ -68,44 +68,43 @@ NETLIB_RESET(74153)
NETLIB_UPDATE(74153)
{
- m_sub.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
- m_sub.update();
+ m_sub.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
+ m_sub.update();
}
NETLIB_START(74153_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
-
- register_subalias("1", m_1.m_G);
- register_input("2", m_B); // m_2.m_B
- register_subalias("3", m_1.m_C[3]);
- register_subalias("4", m_1.m_C[2]);
- register_subalias("5", m_1.m_C[1]);
- register_subalias("6", m_1.m_C[0]);
- register_subalias("7", m_1.m_Y);
-
- register_subalias("9", m_2.m_Y);
- register_subalias("10", m_2.m_C[0]);
- register_subalias("11", m_2.m_C[1]);
- register_subalias("12", m_2.m_C[2]);
- register_subalias("13", m_2.m_C[3]);
-
- register_input("14", m_A); // m_2.m_B
- register_subalias("15", m_2.m_G);
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+
+ register_subalias("1", m_1.m_G);
+ register_input("2", m_B); // m_2.m_B
+ register_subalias("3", m_1.m_C[3]);
+ register_subalias("4", m_1.m_C[2]);
+ register_subalias("5", m_1.m_C[1]);
+ register_subalias("6", m_1.m_C[0]);
+ register_subalias("7", m_1.m_Y);
+
+ register_subalias("9", m_2.m_Y);
+ register_subalias("10", m_2.m_C[0]);
+ register_subalias("11", m_2.m_C[1]);
+ register_subalias("12", m_2.m_C[2]);
+ register_subalias("13", m_2.m_C[3]);
+
+ register_input("14", m_A); // m_2.m_B
+ register_subalias("15", m_2.m_G);
}
NETLIB_UPDATE(74153_dip)
{
- m_2.m_chan = m_1.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
- m_1.update();
- m_2.update();
+ m_2.m_chan = m_1.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
+ m_1.update();
+ m_2.update();
}
NETLIB_RESET(74153_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_74153.h b/src/emu/netlist/devices/nld_74153.h
index 8252dcebabf..03c942f9a70 100644
--- a/src/emu/netlist/devices/nld_74153.h
+++ b/src/emu/netlist/devices/nld_74153.h
@@ -58,30 +58,30 @@
NET_CONNECT(_name, G, _G)
#define TTL_74153_DIP(_name) \
- NET_REGISTER_DEV(74153_dip, _name)
+ NET_REGISTER_DEV(74153_dip, _name)
NETLIB_SUBDEVICE(74153sub,
- netlist_ttl_input_t m_C[4];
- netlist_ttl_input_t m_G;
+ netlist_ttl_input_t m_C[4];
+ netlist_ttl_input_t m_G;
- netlist_ttl_output_t m_Y;
+ netlist_ttl_output_t m_Y;
- int m_chan;
+ int m_chan;
);
NETLIB_DEVICE(74153,
public:
- NETLIB_NAME(74153sub) m_sub;
+ NETLIB_NAME(74153sub) m_sub;
netlist_ttl_input_t m_A;
netlist_ttl_input_t m_B;
);
NETLIB_DEVICE(74153_dip,
- NETLIB_NAME(74153sub) m_1;
- NETLIB_NAME(74153sub) m_2;
- netlist_ttl_input_t m_A;
- netlist_ttl_input_t m_B;
+ NETLIB_NAME(74153sub) m_1;
+ NETLIB_NAME(74153sub) m_2;
+ netlist_ttl_input_t m_A;
+ netlist_ttl_input_t m_B;
);
#endif /* NLD_74153_H_ */
diff --git a/src/emu/netlist/devices/nld_7420.c b/src/emu/netlist/devices/nld_7420.c
index edfb536d3a8..b4bb3f77a1b 100644
--- a/src/emu/netlist/devices/nld_7420.c
+++ b/src/emu/netlist/devices/nld_7420.c
@@ -7,35 +7,34 @@
NETLIB_START(7420_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
- register_subalias("4", m_1.m_i[2]);
- register_subalias("5", m_1.m_i[3]);
- register_subalias("6", m_1.m_Q);
+ register_subalias("4", m_1.m_i[2]);
+ register_subalias("5", m_1.m_i[3]);
+ register_subalias("6", m_1.m_Q);
- register_subalias("8", m_2.m_Q);
- register_subalias("9", m_2.m_i[0]);
- register_subalias("10", m_2.m_i[1]);
+ register_subalias("8", m_2.m_Q);
+ register_subalias("9", m_2.m_i[0]);
+ register_subalias("10", m_2.m_i[1]);
- register_subalias("12", m_2.m_i[2]);
- register_subalias("13", m_2.m_i[3]);
+ register_subalias("12", m_2.m_i[2]);
+ register_subalias("13", m_2.m_i[3]);
}
NETLIB_UPDATE(7420_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
}
NETLIB_RESET(7420_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7420.h b/src/emu/netlist/devices/nld_7420.h
index 3b359fb91d1..04f74c1d91c 100644
--- a/src/emu/netlist/devices/nld_7420.h
+++ b/src/emu/netlist/devices/nld_7420.h
@@ -46,12 +46,12 @@
NETLIB_SIGNAL(7420, 4, 0, 0);
#define TTL_7420_DIP(_name) \
- NET_REGISTER_DEV(7420_dip, _name)
+ NET_REGISTER_DEV(7420_dip, _name)
NETLIB_DEVICE(7420_dip,
- NETLIB_NAME(7420) m_1;
- NETLIB_NAME(7420) m_2;
+ NETLIB_NAME(7420) m_1;
+ NETLIB_NAME(7420) m_2;
);
#endif /* NLD_7420_H_ */
diff --git a/src/emu/netlist/devices/nld_7425.c b/src/emu/netlist/devices/nld_7425.c
index bb903544485..30262a1f181 100644
--- a/src/emu/netlist/devices/nld_7425.c
+++ b/src/emu/netlist/devices/nld_7425.c
@@ -7,39 +7,38 @@
NETLIB_START(7425_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
- //register_subalias("3", ); X1 ==> NC
+ //register_subalias("3", ); X1 ==> NC
- register_subalias("4", m_1.m_i[2]);
- register_subalias("5", m_1.m_i[3]);
- register_subalias("6", m_1.m_Q);
+ register_subalias("4", m_1.m_i[2]);
+ register_subalias("5", m_1.m_i[3]);
+ register_subalias("6", m_1.m_Q);
- register_subalias("8", m_2.m_Q);
- register_subalias("9", m_2.m_i[0]);
- register_subalias("10", m_2.m_i[1]);
+ register_subalias("8", m_2.m_Q);
+ register_subalias("9", m_2.m_i[0]);
+ register_subalias("10", m_2.m_i[1]);
- //register_subalias("11", ); X2 ==> NC
+ //register_subalias("11", ); X2 ==> NC
- register_subalias("12", m_2.m_i[2]);
- register_subalias("13", m_2.m_i[3]);
+ register_subalias("12", m_2.m_i[2]);
+ register_subalias("13", m_2.m_i[3]);
}
NETLIB_UPDATE(7425_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
}
NETLIB_RESET(7425_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7425.h b/src/emu/netlist/devices/nld_7425.h
index 271e59ee49b..f7df8442851 100644
--- a/src/emu/netlist/devices/nld_7425.h
+++ b/src/emu/netlist/devices/nld_7425.h
@@ -49,11 +49,11 @@
NETLIB_SIGNAL(7425, 4, 1, 0);
#define TTL_7425_DIP(_name) \
- NET_REGISTER_DEV(7425_dip, _name)
+ NET_REGISTER_DEV(7425_dip, _name)
NETLIB_DEVICE(7425_dip,
- NETLIB_NAME(7425) m_1;
- NETLIB_NAME(7425) m_2;
+ NETLIB_NAME(7425) m_1;
+ NETLIB_NAME(7425) m_2;
);
#endif /* NLD_7425_H_ */
diff --git a/src/emu/netlist/devices/nld_7427.c b/src/emu/netlist/devices/nld_7427.c
index 7867aa5bad2..49904334d07 100644
--- a/src/emu/netlist/devices/nld_7427.c
+++ b/src/emu/netlist/devices/nld_7427.c
@@ -7,38 +7,37 @@
NETLIB_START(7427_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
- register_sub(m_3, "3");
-
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_2.m_i[0]);
- register_subalias("4", m_2.m_i[1]);
- register_subalias("5", m_2.m_i[2]);
- register_subalias("6", m_2.m_Q);
-
- 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("11", m_3.m_i[2]);
-
- register_subalias("12", m_1.m_Q);
- register_subalias("13", m_1.m_i[2]);
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+ register_sub(m_3, "3");
+
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
+ register_subalias("3", m_2.m_i[0]);
+ register_subalias("4", m_2.m_i[1]);
+ register_subalias("5", m_2.m_i[2]);
+ register_subalias("6", m_2.m_Q);
+
+ 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("11", m_3.m_i[2]);
+
+ register_subalias("12", m_1.m_Q);
+ register_subalias("13", m_1.m_i[2]);
}
NETLIB_UPDATE(7427_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
}
NETLIB_RESET(7427_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7427.h b/src/emu/netlist/devices/nld_7427.h
index ae5f7e65a75..88dc344ea16 100644
--- a/src/emu/netlist/devices/nld_7427.h
+++ b/src/emu/netlist/devices/nld_7427.h
@@ -43,12 +43,12 @@
NETLIB_SIGNAL(7427, 3, 1, 0);
#define TTL_7427_DIP(_name) \
- NET_REGISTER_DEV(7427_dip, _name)
+ NET_REGISTER_DEV(7427_dip, _name)
NETLIB_DEVICE(7427_dip,
- NETLIB_NAME(7427) m_1;
- NETLIB_NAME(7427) m_2;
- NETLIB_NAME(7427) m_3;
+ NETLIB_NAME(7427) m_1;
+ NETLIB_NAME(7427) m_2;
+ NETLIB_NAME(7427) m_3;
);
#endif /* NLD_7427_H_ */
diff --git a/src/emu/netlist/devices/nld_7430.c b/src/emu/netlist/devices/nld_7430.c
index e6ef3624b8b..b9079846325 100644
--- a/src/emu/netlist/devices/nld_7430.c
+++ b/src/emu/netlist/devices/nld_7430.c
@@ -7,29 +7,28 @@
NETLIB_START(7430_dip)
{
- register_sub(m_1, "1");
+ register_sub(m_1, "1");
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_1.m_i[2]);
- register_subalias("4", m_1.m_i[3]);
- register_subalias("5", m_1.m_i[4]);
- register_subalias("6", m_1.m_i[5]);
+ register_subalias("1", m_1.m_i[0]);
+ register_subalias("2", m_1.m_i[1]);
+ register_subalias("3", m_1.m_i[2]);
+ register_subalias("4", m_1.m_i[3]);
+ register_subalias("5", m_1.m_i[4]);
+ register_subalias("6", m_1.m_i[5]);
- register_subalias("8", m_1.m_Q);
+ register_subalias("8", m_1.m_Q);
- register_subalias("11", m_1.m_i[6]);
- register_subalias("12", m_1.m_i[7]);
+ register_subalias("11", m_1.m_i[6]);
+ register_subalias("12", m_1.m_i[7]);
}
NETLIB_UPDATE(7430_dip)
{
- /* only called during startup */
- m_1.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
}
NETLIB_RESET(7430_dip)
{
- m_1.do_reset();
+ m_1.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7430.h b/src/emu/netlist/devices/nld_7430.h
index daba75e4d96..7530380d216 100644
--- a/src/emu/netlist/devices/nld_7430.h
+++ b/src/emu/netlist/devices/nld_7430.h
@@ -54,10 +54,10 @@
NETLIB_SIGNAL(7430, 8, 0, 0);
#define TTL_7430_DIP(_name) \
- NET_REGISTER_DEV(7430_dip, _name)
+ NET_REGISTER_DEV(7430_dip, _name)
NETLIB_DEVICE(7430_dip,
- NETLIB_NAME(7430) m_1;
+ NETLIB_NAME(7430) m_1;
);
#endif /* NLD_7430_H_ */
diff --git a/src/emu/netlist/devices/nld_7448.c b/src/emu/netlist/devices/nld_7448.c
index dfa2a226135..59b00935240 100644
--- a/src/emu/netlist/devices/nld_7448.c
+++ b/src/emu/netlist/devices/nld_7448.c
@@ -9,160 +9,159 @@
NETLIB_START(7448)
{
- register_sub(sub, "sub");
-
- 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_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("A", sub.m_A);
+ register_subalias("B", sub.m_B);
+ register_subalias("C", sub.m_C);
+ register_subalias("D", sub.m_D);
+ 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_RESET(7448)
{
- sub.do_reset();
+ sub.do_reset();
}
NETLIB_UPDATE(7448)
{
- 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_A.inactivate();
- sub.m_B.inactivate();
- sub.m_C.inactivate();
- sub.m_D.inactivate();
- sub.m_RBIQ.inactivate();
- } else {
- sub.m_RBIQ.activate();
- sub.m_D.activate();
- sub.m_C.activate();
- sub.m_B.activate();
- sub.m_A.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_A.inactivate();
+ sub.m_B.inactivate();
+ sub.m_C.inactivate();
+ sub.m_D.inactivate();
+ sub.m_RBIQ.inactivate();
+ } else {
+ sub.m_RBIQ.activate();
+ sub.m_D.activate();
+ sub.m_C.activate();
+ sub.m_B.activate();
+ sub.m_A.activate();
+ sub.update();
+ }
}
NETLIB_START(7448_sub)
{
- register_input("A0", m_A);
- register_input("A1", m_B);
- register_input("A2", m_C);
- register_input("A3", m_D);
- 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));
+ register_input("A0", m_A);
+ register_input("A1", m_B);
+ register_input("A2", m_C);
+ register_input("A3", m_D);
+ 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_RESET(7448_sub)
{
- m_state = 0;
+ m_state = 0;
}
NETLIB_UPDATE(7448_sub)
{
- UINT8 v;
+ UINT8 v;
- v = (INPLOGIC(m_A) << 0) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_D) << 3);
- if ((!INPLOGIC(m_RBIQ) && (v==0)))
- v = 15;
- update_outputs(v);
+ v = (INPLOGIC(m_A) << 0) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_D) << 3);
+ if ((!INPLOGIC(m_RBIQ) && (v==0)))
+ v = 15;
+ update_outputs(v);
}
NETLIB_FUNC_VOID(7448_sub, update_outputs, (UINT8 v))
{
- assert(v<16);
- if (v != m_state)
- {
- // max transfer time is 100 NS */
-
- 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)
+ {
+ // max transfer time is 100 NS */
+
+ 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(7448_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(7448_dip)
{
- NETLIB_NAME(7448)::start();
-
- register_subalias("1", sub.m_B);
- register_subalias("2", sub.m_C);
- register_subalias("3", m_LTQ);
- register_subalias("4", m_BIQ);
- register_subalias("5",sub.m_RBIQ);
- register_subalias("6", sub.m_D);
- register_subalias("7", sub.m_A);
-
- register_subalias("9", sub.m_e);
- register_subalias("10", sub.m_d);
- register_subalias("11", sub.m_c);
- register_subalias("12", sub.m_b);
- register_subalias("13", sub.m_a);
- register_subalias("14", sub.m_g);
- register_subalias("15", sub.m_f);
+ NETLIB_NAME(7448)::start();
+
+ register_subalias("1", sub.m_B);
+ register_subalias("2", sub.m_C);
+ register_subalias("3", m_LTQ);
+ register_subalias("4", m_BIQ);
+ register_subalias("5",sub.m_RBIQ);
+ register_subalias("6", sub.m_D);
+ register_subalias("7", sub.m_A);
+
+ register_subalias("9", sub.m_e);
+ register_subalias("10", sub.m_d);
+ register_subalias("11", sub.m_c);
+ register_subalias("12", sub.m_b);
+ register_subalias("13", sub.m_a);
+ register_subalias("14", sub.m_g);
+ register_subalias("15", sub.m_f);
}
NETLIB_UPDATE(7448_dip)
{
- NETLIB_NAME(7448)::update();
+ NETLIB_NAME(7448)::update();
}
NETLIB_RESET(7448_dip)
{
- NETLIB_NAME(7448)::reset();
+ NETLIB_NAME(7448)::reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7448.h b/src/emu/netlist/devices/nld_7448.h
index a6e47418b62..2c06638f93a 100644
--- a/src/emu/netlist/devices/nld_7448.h
+++ b/src/emu/netlist/devices/nld_7448.h
@@ -27,45 +27,45 @@
#include "../nl_base.h"
#define TTL_7448(_name, _A0, _A1, _A2, _A3, _LTQ, _BIQ, _RBIQ) \
- NET_REGISTER_DEV(7448, _name) \
- NET_CONNECT(_name, A, _A0) \
- NET_CONNECT(_name, B, _A1) \
- NET_CONNECT(_name, C, _A2) \
- NET_CONNECT(_name, D, _A3) \
- NET_CONNECT(_name, LTQ, _LTQ) \
- NET_CONNECT(_name, BIQ, _BIQ) \
- NET_CONNECT(_name, RBIQ, _RBIQ)
+ NET_REGISTER_DEV(7448, _name) \
+ NET_CONNECT(_name, A, _A0) \
+ NET_CONNECT(_name, B, _A1) \
+ NET_CONNECT(_name, C, _A2) \
+ NET_CONNECT(_name, D, _A3) \
+ NET_CONNECT(_name, LTQ, _LTQ) \
+ NET_CONNECT(_name, BIQ, _BIQ) \
+ NET_CONNECT(_name, RBIQ, _RBIQ)
#define TTL_7448_DIP(_name) \
- NET_REGISTER_DEV(7448_dip, _name)
+ NET_REGISTER_DEV(7448_dip, _name)
NETLIB_SUBDEVICE(7448_sub,
- ATTR_HOT void update_outputs(UINT8 v);
- static const UINT8 tab7448[16][7];
+ ATTR_HOT void update_outputs(UINT8 v);
+ static const UINT8 tab7448[16][7];
- 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_RBIQ;
+ 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_RBIQ;
- UINT8 m_state;
+ UINT8 m_state;
- netlist_ttl_output_t m_a;
- netlist_ttl_output_t m_b;
- netlist_ttl_output_t m_c;
- netlist_ttl_output_t m_d;
- netlist_ttl_output_t m_e;
- netlist_ttl_output_t m_f;
- netlist_ttl_output_t m_g;
+ netlist_ttl_output_t m_a;
+ netlist_ttl_output_t m_b;
+ netlist_ttl_output_t m_c;
+ netlist_ttl_output_t m_d;
+ netlist_ttl_output_t m_e;
+ netlist_ttl_output_t m_f;
+ netlist_ttl_output_t m_g;
);
NETLIB_DEVICE(7448,
public:
- NETLIB_NAME(7448_sub) sub;
+ NETLIB_NAME(7448_sub) sub;
- netlist_ttl_input_t m_LTQ;
- netlist_ttl_input_t m_BIQ;
+ netlist_ttl_input_t m_LTQ;
+ netlist_ttl_input_t m_BIQ;
);
NETLIB_DEVICE_DERIVED(7448_dip, 7448,
diff --git a/src/emu/netlist/devices/nld_7450.c b/src/emu/netlist/devices/nld_7450.c
index bcd1000d43a..9c16cd0537a 100644
--- a/src/emu/netlist/devices/nld_7450.c
+++ b/src/emu/netlist/devices/nld_7450.c
@@ -7,11 +7,11 @@
NETLIB_START(7450)
{
- register_input("A", m_A);
- register_input("B", m_B);
- register_input("C", m_C);
- register_input("D", m_D);
- register_output("Q", m_Q);
+ register_input("A", m_A);
+ register_input("B", m_B);
+ register_input("C", m_C);
+ register_input("D", m_D);
+ register_output("Q", m_Q);
}
NETLIB_RESET(7450)
@@ -20,70 +20,69 @@ NETLIB_RESET(7450)
NETLIB_UPDATE(7450)
{
- m_A.activate();
- m_B.activate();
- m_C.activate();
- m_D.activate();
- UINT8 t1 = INPLOGIC(m_A) & INPLOGIC(m_B);
- UINT8 t2 = INPLOGIC(m_C) & INPLOGIC(m_D);
+ m_A.activate();
+ m_B.activate();
+ m_C.activate();
+ m_D.activate();
+ UINT8 t1 = INPLOGIC(m_A) & INPLOGIC(m_B);
+ UINT8 t2 = INPLOGIC(m_C) & INPLOGIC(m_D);
- const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
+ 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_A.inactivate();
- m_B.inactivate();
- }
- } else {
- if (t2 ^ 1)
- {
- m_C.inactivate();
- m_D.inactivate();
- }
- }
- OUTLOGIC(m_Q, res, times[1 - res]);// ? 22000 : 15000);
+ UINT8 res = 0;
+ if (t1 ^ 1)
+ {
+ if (t2 ^ 1)
+ {
+ res = 1;
+ }
+ else
+ {
+ m_A.inactivate();
+ m_B.inactivate();
+ }
+ } else {
+ if (t2 ^ 1)
+ {
+ m_C.inactivate();
+ m_D.inactivate();
+ }
+ }
+ OUTLOGIC(m_Q, res, times[1 - res]);// ? 22000 : 15000);
}
NETLIB_START(7450_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
- register_subalias("1", m_1.m_A);
- register_subalias("2", m_2.m_A);
- register_subalias("3", m_2.m_B);
- register_subalias("4", m_2.m_C);
- register_subalias("5", m_2.m_D);
- register_subalias("6", m_2.m_Q);
- //register_subalias("7",); GND
+ register_subalias("1", m_1.m_A);
+ register_subalias("2", m_2.m_A);
+ register_subalias("3", m_2.m_B);
+ register_subalias("4", m_2.m_C);
+ register_subalias("5", m_2.m_D);
+ register_subalias("6", m_2.m_Q);
+ //register_subalias("7",); GND
- register_subalias("8", m_1.m_Q);
- register_subalias("9", m_1.m_C);
- register_subalias("10", m_1.m_D);
- //register_subalias("11", m_1.m_X1);
- //register_subalias("12", m_1.m_X1Q);
- register_subalias("13", m_1.m_B);
- //register_subalias("14",); VCC
+ register_subalias("8", m_1.m_Q);
+ register_subalias("9", m_1.m_C);
+ register_subalias("10", m_1.m_D);
+ //register_subalias("11", m_1.m_X1);
+ //register_subalias("12", m_1.m_X1Q);
+ register_subalias("13", m_1.m_B);
+ //register_subalias("14",); VCC
}
NETLIB_UPDATE(7450_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
}
NETLIB_RESET(7450_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7450.h b/src/emu/netlist/devices/nld_7450.h
index 72deaebb508..bb15005ad10 100644
--- a/src/emu/netlist/devices/nld_7450.h
+++ b/src/emu/netlist/devices/nld_7450.h
@@ -27,22 +27,22 @@
#include "nld_signal.h"
#define TTL_7450_ANDORINVERT(_name, _I1, _I2, _I3, _I4) \
- NET_REGISTER_DEV(7450, _name) \
- NET_CONNECT(_name, A, _I1) \
- NET_CONNECT(_name, B, _I2) \
- NET_CONNECT(_name, C, _I3) \
- NET_CONNECT(_name, D, _I4)
+ NET_REGISTER_DEV(7450, _name) \
+ NET_CONNECT(_name, A, _I1) \
+ NET_CONNECT(_name, B, _I2) \
+ NET_CONNECT(_name, C, _I3) \
+ NET_CONNECT(_name, D, _I4)
#define TTL_7450_DIP(_name) \
- NET_REGISTER_DEV(7450_dip, _name)
+ NET_REGISTER_DEV(7450_dip, _name)
NETLIB_DEVICE(7450,
public:
- 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_output_t m_Q;
+ 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_output_t m_Q;
);
NETLIB_DEVICE(7450_dip,
diff --git a/src/emu/netlist/devices/nld_7474.c b/src/emu/netlist/devices/nld_7474.c
index 7ac8aa60ff5..b6bb5f78b9c 100644
--- a/src/emu/netlist/devices/nld_7474.c
+++ b/src/emu/netlist/devices/nld_7474.c
@@ -23,11 +23,11 @@ NETLIB_UPDATE(7474sub)
NETLIB_UPDATE(7474)
{
- if (!INPLOGIC(m_PREQ) && !INPLOGIC(m_CLRQ))
- {
- sub.newstate(1, 1);
- sub.m_CLK.inactivate();
- }
+ if (!INPLOGIC(m_PREQ) && !INPLOGIC(m_CLRQ))
+ {
+ sub.newstate(1, 1);
+ sub.m_CLK.inactivate();
+ }
if (!INPLOGIC(m_PREQ))
{
sub.newstate(1, 0);
@@ -64,7 +64,7 @@ NETLIB_START(7474)
NETLIB_RESET(7474)
{
- sub.do_reset();
+ sub.do_reset();
}
NETLIB_START(7474sub)
@@ -79,44 +79,44 @@ NETLIB_START(7474sub)
NETLIB_RESET(7474sub)
{
- m_CLK.set_state(netlist_input_t::STATE_INP_LH);
+ m_CLK.set_state(netlist_input_t::STATE_INP_LH);
- m_nextD = 0;
- /* FIXME: required by pong doubles - need a mechanism to set this from netlist */
- m_Q.initial(1);
- m_QQ.initial(0);
+ m_nextD = 0;
+ /* FIXME: required by pong doubles - need a mechanism to set this from netlist */
+ m_Q.initial(1);
+ m_QQ.initial(0);
}
NETLIB_START(7474_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
-
- register_subalias("1", m_1.m_CLRQ);
- register_subalias("2", m_1.m_D);
- register_subalias("3", m_1.sub.m_CLK);
- register_subalias("4", m_1.m_PREQ);
- register_subalias("5", m_1.sub.m_Q);
- register_subalias("6", m_1.sub.m_QQ);
- // register_subalias("7", ); ==> GND
-
- register_subalias("8", m_2.sub.m_QQ);
- register_subalias("9", m_2.sub.m_Q);
- register_subalias("10", m_2.m_PREQ);
- register_subalias("11", m_2.sub.m_CLK);
- register_subalias("12", m_2.m_D);
- register_subalias("13", m_2.m_CLRQ);
- // register_subalias("14", ); ==> VCC
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
+
+ register_subalias("1", m_1.m_CLRQ);
+ register_subalias("2", m_1.m_D);
+ register_subalias("3", m_1.sub.m_CLK);
+ register_subalias("4", m_1.m_PREQ);
+ register_subalias("5", m_1.sub.m_Q);
+ register_subalias("6", m_1.sub.m_QQ);
+ // register_subalias("7", ); ==> GND
+
+ register_subalias("8", m_2.sub.m_QQ);
+ register_subalias("9", m_2.sub.m_Q);
+ register_subalias("10", m_2.m_PREQ);
+ register_subalias("11", m_2.sub.m_CLK);
+ register_subalias("12", m_2.m_D);
+ register_subalias("13", m_2.m_CLRQ);
+ // register_subalias("14", ); ==> VCC
}
NETLIB_RESET(7474_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
NETLIB_UPDATE(7474_dip)
{
- m_1.update_dev();
- m_2.update_dev();
+ m_1.update_dev();
+ m_2.update_dev();
}
diff --git a/src/emu/netlist/devices/nld_7474.h b/src/emu/netlist/devices/nld_7474.h
index 7dab3f673e9..c72a1e91069 100644
--- a/src/emu/netlist/devices/nld_7474.h
+++ b/src/emu/netlist/devices/nld_7474.h
@@ -52,7 +52,7 @@
NET_CONNECT(_name, PREQ, _PREQ)
#define TTL_7474_DIP(_name) \
- NET_REGISTER_DEV(7474_dip, _name)
+ NET_REGISTER_DEV(7474_dip, _name)
NETLIB_SUBDEVICE(7474sub,
netlist_ttl_input_t m_CLK;
@@ -75,8 +75,8 @@ public:
NETLIB_DEVICE(7474_dip,
- NETLIB_NAME(7474) m_1;
- NETLIB_NAME(7474) m_2;
+ NETLIB_NAME(7474) m_1;
+ NETLIB_NAME(7474) m_2;
);
#endif /* NLD_7474_H_ */
diff --git a/src/emu/netlist/devices/nld_7483.c b/src/emu/netlist/devices/nld_7483.c
index baa01fe41ba..8aa36e80b17 100644
--- a/src/emu/netlist/devices/nld_7483.c
+++ b/src/emu/netlist/devices/nld_7483.c
@@ -28,7 +28,7 @@ NETLIB_START(7483)
NETLIB_RESET(7483)
{
- m_lastr = 0;
+ m_lastr = 0;
}
NETLIB_UPDATE(7483)
@@ -51,33 +51,33 @@ NETLIB_UPDATE(7483)
NETLIB_START(7483_dip)
{
- NETLIB_NAME(7483)::start();
- register_subalias("1", m_A4);
- register_subalias("2", m_S3);
- register_subalias("3", m_A3);
- register_subalias("4", m_B3);
- // register_subalias("5", ); --> VCC
- register_subalias("6", m_S2);
- register_subalias("7", m_B2);
- register_subalias("8", m_A2);
+ NETLIB_NAME(7483)::start();
+ register_subalias("1", m_A4);
+ register_subalias("2", m_S3);
+ register_subalias("3", m_A3);
+ register_subalias("4", m_B3);
+ // register_subalias("5", ); --> VCC
+ register_subalias("6", m_S2);
+ register_subalias("7", m_B2);
+ register_subalias("8", m_A2);
- register_subalias("9", m_S1);
- register_subalias("10", m_A1);
- register_subalias("11", m_B1);
- // register_subalias("12", ); --> GND
- register_subalias("13", m_C0);
- register_subalias("14", m_C4);
- register_subalias("15", m_S4);
- register_subalias("16", m_B4);
+ register_subalias("9", m_S1);
+ register_subalias("10", m_A1);
+ register_subalias("11", m_B1);
+ // register_subalias("12", ); --> GND
+ register_subalias("13", m_C0);
+ register_subalias("14", m_C4);
+ register_subalias("15", m_S4);
+ register_subalias("16", m_B4);
}
NETLIB_UPDATE(7483_dip)
{
- NETLIB_NAME(7483)::update();
+ NETLIB_NAME(7483)::update();
}
NETLIB_RESET(7483_dip)
{
- NETLIB_NAME(7483)::reset();
+ NETLIB_NAME(7483)::reset();
}
diff --git a/src/emu/netlist/devices/nld_7483.h b/src/emu/netlist/devices/nld_7483.h
index b76c68efbbc..d2da6ecc517 100644
--- a/src/emu/netlist/devices/nld_7483.h
+++ b/src/emu/netlist/devices/nld_7483.h
@@ -42,7 +42,7 @@
NET_CONNECT(_name, C0, _CI)
#define TTL_7483_DIP(_name) \
- NET_REGISTER_DEV(7483_dip, _name)
+ NET_REGISTER_DEV(7483_dip, _name)
NETLIB_DEVICE(7483,
netlist_ttl_input_t m_C0;
diff --git a/src/emu/netlist/devices/nld_7486.c b/src/emu/netlist/devices/nld_7486.c
index 4234e1e5400..4eddfb828ef 100644
--- a/src/emu/netlist/devices/nld_7486.c
+++ b/src/emu/netlist/devices/nld_7486.c
@@ -25,42 +25,41 @@ NETLIB_UPDATE(7486)
NETLIB_START(7486_dip)
{
- 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_A);
- register_subalias("2", m_1.m_B);
- register_subalias("3", m_1.m_Q);
+ register_subalias("1", m_1.m_A);
+ register_subalias("2", m_1.m_B);
+ register_subalias("3", m_1.m_Q);
- register_subalias("4", m_2.m_A);
- register_subalias("5", m_2.m_B);
- register_subalias("6", m_2.m_Q);
+ register_subalias("4", m_2.m_A);
+ register_subalias("5", m_2.m_B);
+ register_subalias("6", m_2.m_Q);
- register_subalias("9", m_3.m_A);
- register_subalias("10", m_3.m_B);
- register_subalias("8", m_3.m_Q);
+ register_subalias("9", m_3.m_A);
+ register_subalias("10", m_3.m_B);
+ register_subalias("8", m_3.m_Q);
- register_subalias("12", m_4.m_A);
- register_subalias("13", m_4.m_B);
- register_subalias("11", m_4.m_Q);
+ register_subalias("12", m_4.m_A);
+ register_subalias("13", m_4.m_B);
+ register_subalias("11", m_4.m_Q);
}
NETLIB_UPDATE(7486_dip)
{
- /* only called during startup */
- m_1.update_dev();
- m_2.update_dev();
- m_3.update_dev();
- m_4.update_dev();
+ /* only called during startup */
+ m_1.update_dev();
+ m_2.update_dev();
+ m_3.update_dev();
+ m_4.update_dev();
}
NETLIB_RESET(7486_dip)
{
- m_1.do_reset();
- m_2.do_reset();
- m_3.do_reset();
- m_4.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
+ m_3.do_reset();
+ m_4.do_reset();
}
-
diff --git a/src/emu/netlist/devices/nld_7486.h b/src/emu/netlist/devices/nld_7486.h
index ed8bdbf37b4..d9f8608be6f 100644
--- a/src/emu/netlist/devices/nld_7486.h
+++ b/src/emu/netlist/devices/nld_7486.h
@@ -47,14 +47,14 @@ public:
);
#define TTL_7486_DIP(_name) \
- NET_REGISTER_DEV(7486_dip, _name)
+ NET_REGISTER_DEV(7486_dip, _name)
NETLIB_DEVICE(7486_dip,
- NETLIB_NAME(7486) m_1;
- NETLIB_NAME(7486) m_2;
- NETLIB_NAME(7486) m_3;
- NETLIB_NAME(7486) m_4;
+ NETLIB_NAME(7486) m_1;
+ NETLIB_NAME(7486) m_2;
+ NETLIB_NAME(7486) m_3;
+ NETLIB_NAME(7486) m_4;
);
#endif /* NLD_7486_H_ */
diff --git a/src/emu/netlist/devices/nld_7490.c b/src/emu/netlist/devices/nld_7490.c
index 00a4b1e3c6a..623ee0bf982 100644
--- a/src/emu/netlist/devices/nld_7490.c
+++ b/src/emu/netlist/devices/nld_7490.c
@@ -7,8 +7,8 @@
NETLIB_START(7490)
{
- register_input("A", m_A);
- register_input("B", m_B);
+ register_input("A", m_A);
+ register_input("B", m_B);
register_input("R1", m_R1);
register_input("R2", m_R2);
register_input("R91", m_R91);
@@ -25,15 +25,15 @@ NETLIB_START(7490)
NETLIB_RESET(7490)
{
- m_cnt = 0;
+ m_cnt = 0;
}
static const netlist_time delay[4] =
{
- NLTIME_FROM_NS(18),
- NLTIME_FROM_NS(36) - NLTIME_FROM_NS(18),
- NLTIME_FROM_NS(54) - NLTIME_FROM_NS(18),
- NLTIME_FROM_NS(72) - NLTIME_FROM_NS(18)};
+ NLTIME_FROM_NS(18),
+ NLTIME_FROM_NS(36) - NLTIME_FROM_NS(18),
+ NLTIME_FROM_NS(54) - NLTIME_FROM_NS(18),
+ NLTIME_FROM_NS(72) - NLTIME_FROM_NS(18)};
NETLIB_UPDATE(7490)
{
@@ -50,52 +50,51 @@ NETLIB_UPDATE(7490)
else if (INP_HL(m_A))
{
m_cnt ^= 1;
- OUTLOGIC(m_Q[0], m_cnt & 1, delay[0]);
+ OUTLOGIC(m_Q[0], m_cnt & 1, delay[0]);
+ }
+ else if (INP_HL(m_B))
+ {
+ m_cnt += 2;
+ if (m_cnt >= 10)
+ m_cnt = 0;
+ update_outputs();
}
- else if (INP_HL(m_B))
- {
- m_cnt += 2;
- if (m_cnt >= 10)
- m_cnt = 0;
- update_outputs();
- }
}
NETLIB_FUNC_VOID(7490, update_outputs, (void))
{
-
for (int i=0; i<4; i++)
OUTLOGIC(m_Q[i], (m_cnt >> i) & 1, delay[i]);
}
NETLIB_START(7490_dip)
{
- NETLIB_NAME(7490)::start();
- register_subalias("1", m_B);
- register_subalias("2", m_R1);
- register_subalias("3", m_R2);
-
- // register_subalias("4", ); --> NC
- // register_subalias("5", ); --> VCC
- register_subalias("6", m_R91);
- register_subalias("7", m_R92);
-
- register_subalias("8", m_Q[2]);
- register_subalias("9", m_Q[1]);
- // register_subalias("10", ); --> GND
- register_subalias("11", m_Q[3]);
- register_subalias("12", m_Q[0]);
- // register_subalias("13", ); --> NC
- register_subalias("14", m_A);
+ NETLIB_NAME(7490)::start();
+ register_subalias("1", m_B);
+ register_subalias("2", m_R1);
+ register_subalias("3", m_R2);
+
+ // register_subalias("4", ); --> NC
+ // register_subalias("5", ); --> VCC
+ register_subalias("6", m_R91);
+ register_subalias("7", m_R92);
+
+ register_subalias("8", m_Q[2]);
+ register_subalias("9", m_Q[1]);
+ // register_subalias("10", ); --> GND
+ register_subalias("11", m_Q[3]);
+ register_subalias("12", m_Q[0]);
+ // register_subalias("13", ); --> NC
+ register_subalias("14", m_A);
}
NETLIB_UPDATE(7490_dip)
{
- NETLIB_NAME(7490)::update();
+ NETLIB_NAME(7490)::update();
}
NETLIB_RESET(7490_dip)
{
- NETLIB_NAME(7490)::reset();
+ NETLIB_NAME(7490)::reset();
}
diff --git a/src/emu/netlist/devices/nld_7490.h b/src/emu/netlist/devices/nld_7490.h
index 29ca2a19716..f54c299fe8b 100644
--- a/src/emu/netlist/devices/nld_7490.h
+++ b/src/emu/netlist/devices/nld_7490.h
@@ -60,14 +60,14 @@
#define TTL_7490(_name, _A, _B, _R1, _R2, _R91, _R92) \
NET_REGISTER_DEV(7490, _name) \
NET_CONNECT(_name, A, _A) \
- NET_CONNECT(_name, B, _B) \
+ NET_CONNECT(_name, B, _B) \
NET_CONNECT(_name, R1, _R1) \
NET_CONNECT(_name, R2, _R2) \
NET_CONNECT(_name, R91, _R91) \
NET_CONNECT(_name, R92, _R92)
#define TTL_7490_DIP(_name) \
- NET_REGISTER_DEV(7490_dip, _name)
+ NET_REGISTER_DEV(7490_dip, _name)
NETLIB_DEVICE(7490,
@@ -78,7 +78,7 @@ NETLIB_DEVICE(7490,
netlist_ttl_input_t m_R91;
netlist_ttl_input_t m_R92;
netlist_ttl_input_t m_A;
- netlist_ttl_input_t m_B;
+ netlist_ttl_input_t m_B;
UINT8 m_cnt;
diff --git a/src/emu/netlist/devices/nld_7493.c b/src/emu/netlist/devices/nld_7493.c
index dcc08776cff..c2b51558c4b 100644
--- a/src/emu/netlist/devices/nld_7493.c
+++ b/src/emu/netlist/devices/nld_7493.c
@@ -29,10 +29,10 @@ NETLIB_START(7493)
NETLIB_RESET(7493)
{
- A.do_reset();
- B.do_reset();
- C.do_reset();
- D.do_reset();
+ A.do_reset();
+ B.do_reset();
+ C.do_reset();
+ D.do_reset();
}
NETLIB_START(7493ff)
@@ -45,13 +45,13 @@ NETLIB_START(7493ff)
NETLIB_RESET(7493ff)
{
- m_reset = 1;
- m_I.set_state(netlist_input_t::STATE_INP_HL);
+ m_reset = 1;
+ m_I.set_state(netlist_input_t::STATE_INP_HL);
}
NETLIB_UPDATE(7493ff)
{
- const netlist_time out_delay = NLTIME_FROM_NS(18);
+ const netlist_time out_delay = NLTIME_FROM_NS(18);
//if (m_reset == 0)
OUTLOGIC(m_Q, (!m_Q.net().new_Q()) & m_reset, out_delay);
}
@@ -68,45 +68,45 @@ NETLIB_UPDATE(7493)
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));
- A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0;
+ A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0;
}
else
{
A.m_I.activate_hl();
B.m_I.activate_hl();
- A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1;
+ A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1;
}
}
NETLIB_START(7493_dip)
{
- NETLIB_NAME(7493)::start();
-
- register_subalias("1", B.m_I);
- register_subalias("2", m_R1);
- register_subalias("3", m_R2);
-
- // register_subalias("4", ); --> NC
- // register_subalias("5", ); --> VCC
- // register_subalias("6", ); --> NC
- // register_subalias("7", ); --> NC
-
- register_subalias("8", C.m_Q);
- register_subalias("9", B.m_Q);
- // register_subalias("10", ); --> GND
- register_subalias("11", D.m_Q);
- register_subalias("12", A.m_Q);
- // register_subalias("13", ); --> NC
- register_subalias("14", A.m_I);
+ NETLIB_NAME(7493)::start();
+
+ register_subalias("1", B.m_I);
+ register_subalias("2", m_R1);
+ register_subalias("3", m_R2);
+
+ // register_subalias("4", ); --> NC
+ // register_subalias("5", ); --> VCC
+ // register_subalias("6", ); --> NC
+ // register_subalias("7", ); --> NC
+
+ register_subalias("8", C.m_Q);
+ register_subalias("9", B.m_Q);
+ // register_subalias("10", ); --> GND
+ register_subalias("11", D.m_Q);
+ register_subalias("12", A.m_Q);
+ // register_subalias("13", ); --> NC
+ register_subalias("14", A.m_I);
}
NETLIB_UPDATE(7493_dip)
{
- NETLIB_NAME(7493)::update();
+ NETLIB_NAME(7493)::update();
}
NETLIB_RESET(7493_dip)
{
- NETLIB_NAME(7493)::reset();
+ NETLIB_NAME(7493)::reset();
}
diff --git a/src/emu/netlist/devices/nld_7493.h b/src/emu/netlist/devices/nld_7493.h
index 0bf182e27c0..8c856048a7c 100644
--- a/src/emu/netlist/devices/nld_7493.h
+++ b/src/emu/netlist/devices/nld_7493.h
@@ -67,7 +67,7 @@
NET_CONNECT(_name, R2, _R2)
#define TTL_7493_DIP(_name) \
- NET_REGISTER_DEV(7493_dip, _name)
+ NET_REGISTER_DEV(7493_dip, _name)
NETLIB_SUBDEVICE(7493ff,
netlist_ttl_input_t m_I;
diff --git a/src/emu/netlist/devices/nld_74ls629.c b/src/emu/netlist/devices/nld_74ls629.c
index 09c12d2d98c..42d10263858 100644
--- a/src/emu/netlist/devices/nld_74ls629.c
+++ b/src/emu/netlist/devices/nld_74ls629.c
@@ -50,139 +50,139 @@ NETLIB_START(SN74LS629clk)
reset();
save(NAME(m_enableq));
- save(NAME(m_inc));
+ save(NAME(m_inc));
}
NETLIB_RESET(SN74LS629clk)
{
- m_enableq = 1;
- m_inc = netlist_time::zero;
+ m_enableq = 1;
+ m_inc = netlist_time::zero;
}
NETLIB_UPDATE(SN74LS629clk)
{
- if (!m_enableq)
- {
- OUTLOGIC(m_Y, !m_Y.net().new_Q(), m_inc);
- }
- else
- {
- OUTLOGIC(m_Y, 1, m_inc);
- }
+ if (!m_enableq)
+ {
+ OUTLOGIC(m_Y, !m_Y.net().new_Q(), m_inc);
+ }
+ else
+ {
+ OUTLOGIC(m_Y, 1, m_inc);
+ }
}
NETLIB_START(SN74LS629)
{
- register_sub(m_clock, "OSC");
- register_sub(m_R_FC, "R_FC");
- register_sub(m_R_RNG, "R_RNG");
+ register_sub(m_clock, "OSC");
+ register_sub(m_R_FC, "R_FC");
+ register_sub(m_R_RNG, "R_RNG");
- register_input("ENQ", m_ENQ);
- register_input("RNG", m_RNG);
- register_input("FC", m_FC);
- register_subalias("GND", m_R_FC.m_N);
+ register_input("ENQ", m_ENQ);
+ register_input("RNG", m_RNG);
+ register_input("FC", m_FC);
+ register_subalias("GND", m_R_FC.m_N);
- connect(m_FC, m_R_FC.m_P);
- connect(m_RNG, m_R_RNG.m_P);
- connect(m_R_FC.m_N, m_R_RNG.m_N);
+ connect(m_FC, m_R_FC.m_P);
+ connect(m_RNG, m_R_RNG.m_P);
+ connect(m_R_FC.m_N, m_R_RNG.m_N);
- register_subalias("Y", m_clock.m_Y);
- register_param("CAP", m_CAP, 1e-6);
+ register_subalias("Y", m_clock.m_Y);
+ register_param("CAP", m_CAP, 1e-6);
}
NETLIB_RESET(SN74LS629)
{
- m_R_FC.set_R(90000.0);
- m_R_RNG.set_R(90000.0);
- m_clock.reset();
+ m_R_FC.set_R(90000.0);
+ m_R_RNG.set_R(90000.0);
+ m_clock.reset();
}
NETLIB_UPDATE(SN74LS629)
{
- {
- // recompute
- double freq;
- double v_freq_2, v_freq_3, v_freq_4;
- double v_freq = INPANALOG(m_FC);
- double v_rng = INPANALOG(m_RNG);
-
- /* coefficients */
- const double k1 = 1.9904769024796283E+03;
- const double k2 = 1.2070059213983407E+03;
- const double k3 = 1.3266985579561108E+03;
- const double k4 = -1.5500979825922698E+02;
- const double k5 = 2.8184536266938172E+00;
- const double k6 = -2.3503421582744556E+02;
- const double k7 = -3.3836786704527788E+02;
- const double k8 = -1.3569136703258670E+02;
- const double k9 = 2.9914575453819188E+00;
- const double k10 = 1.6855569086173170E+00;
-
- /* scale due to input resistance */
-
- /* Polyfunctional3D_model created by zunzun.com using sum of squared absolute error */
- v_freq_2 = v_freq * v_freq;
- v_freq_3 = v_freq_2 * v_freq;
- v_freq_4 = v_freq_3 * v_freq;
- freq = k1;
- freq += k2 * v_freq;
- freq += k3 * v_freq_2;
- freq += k4 * v_freq_3;
- freq += k5 * v_freq_4;
- freq += k6 * v_rng;
- freq += k7 * v_rng * v_freq;
- freq += k8 * v_rng * v_freq_2;
- freq += k9 * v_rng * v_freq_3;
- freq += k10 * v_rng * v_freq_4;
-
- freq *= 0.1e-6 / m_CAP.Value();
-
- // FIXME: we need a possibility to remove entries from queue ...
- // or an exact model ...
- m_clock.m_inc = netlist_time::from_double(0.5 / freq);
- //m_clock.update();
- }
-
- if (!m_clock.m_enableq && INPLOGIC(m_ENQ))
- {
- m_clock.m_enableq = 1;
- OUTLOGIC(m_clock.m_Y, !m_clock.m_Y.net().last_Q(), netlist_time::from_nsec(1));
- }
- else if (m_clock.m_enableq && !INPLOGIC(m_ENQ))
- {
- m_clock.m_enableq = 0;
- OUTLOGIC(m_clock.m_Y, !m_clock.m_Y.net().last_Q(), netlist_time::from_nsec(1));
- }
+ {
+ // recompute
+ double freq;
+ double v_freq_2, v_freq_3, v_freq_4;
+ double v_freq = INPANALOG(m_FC);
+ double v_rng = INPANALOG(m_RNG);
+
+ /* coefficients */
+ const double k1 = 1.9904769024796283E+03;
+ const double k2 = 1.2070059213983407E+03;
+ const double k3 = 1.3266985579561108E+03;
+ const double k4 = -1.5500979825922698E+02;
+ const double k5 = 2.8184536266938172E+00;
+ const double k6 = -2.3503421582744556E+02;
+ const double k7 = -3.3836786704527788E+02;
+ const double k8 = -1.3569136703258670E+02;
+ const double k9 = 2.9914575453819188E+00;
+ const double k10 = 1.6855569086173170E+00;
+
+ /* scale due to input resistance */
+
+ /* Polyfunctional3D_model created by zunzun.com using sum of squared absolute error */
+ v_freq_2 = v_freq * v_freq;
+ v_freq_3 = v_freq_2 * v_freq;
+ v_freq_4 = v_freq_3 * v_freq;
+ freq = k1;
+ freq += k2 * v_freq;
+ freq += k3 * v_freq_2;
+ freq += k4 * v_freq_3;
+ freq += k5 * v_freq_4;
+ freq += k6 * v_rng;
+ freq += k7 * v_rng * v_freq;
+ freq += k8 * v_rng * v_freq_2;
+ freq += k9 * v_rng * v_freq_3;
+ freq += k10 * v_rng * v_freq_4;
+
+ freq *= 0.1e-6 / m_CAP.Value();
+
+ // FIXME: we need a possibility to remove entries from queue ...
+ // or an exact model ...
+ m_clock.m_inc = netlist_time::from_double(0.5 / freq);
+ //m_clock.update();
+ }
+
+ if (!m_clock.m_enableq && INPLOGIC(m_ENQ))
+ {
+ m_clock.m_enableq = 1;
+ OUTLOGIC(m_clock.m_Y, !m_clock.m_Y.net().last_Q(), netlist_time::from_nsec(1));
+ }
+ else if (m_clock.m_enableq && !INPLOGIC(m_ENQ))
+ {
+ m_clock.m_enableq = 0;
+ OUTLOGIC(m_clock.m_Y, !m_clock.m_Y.net().last_Q(), netlist_time::from_nsec(1));
+ }
}
NETLIB_UPDATE_PARAM(SN74LS629)
{
- //printf("updating %s to %f\n", name().cstr(), m_R.Value());
- update_dev();
+ //printf("updating %s to %f\n", name().cstr(), m_R.Value());
+ update_dev();
}
NETLIB_START(SN74LS629_dip)
{
- register_sub(m_1, "1");
- register_sub(m_2, "2");
+ register_sub(m_1, "1");
+ register_sub(m_2, "2");
- register_subalias("1", m_2.m_FC);
- register_subalias("2", m_1.m_FC);
- register_subalias("3", m_1.m_RNG);
+ register_subalias("1", m_2.m_FC);
+ register_subalias("2", m_1.m_FC);
+ register_subalias("3", m_1.m_RNG);
- register_subalias("6", m_1.m_ENQ);
- register_subalias("7", m_1.m_clock.m_Y);
+ register_subalias("6", m_1.m_ENQ);
+ register_subalias("7", m_1.m_clock.m_Y);
- register_subalias("8", m_1.m_R_FC.m_N);
- register_subalias("9", m_1.m_R_FC.m_N);
- connect(m_1.m_R_FC.m_N, m_2.m_R_FC.m_N);
+ register_subalias("8", m_1.m_R_FC.m_N);
+ register_subalias("9", m_1.m_R_FC.m_N);
+ connect(m_1.m_R_FC.m_N, m_2.m_R_FC.m_N);
- register_subalias("10", m_2.m_clock.m_Y);
+ register_subalias("10", m_2.m_clock.m_Y);
- register_subalias("11", m_2.m_ENQ);
- register_subalias("14", m_2.m_RNG);
+ register_subalias("11", m_2.m_ENQ);
+ register_subalias("14", m_2.m_RNG);
}
@@ -192,6 +192,6 @@ NETLIB_UPDATE(SN74LS629_dip)
NETLIB_RESET(SN74LS629_dip)
{
- m_1.do_reset();
- m_2.do_reset();
+ m_1.do_reset();
+ m_2.do_reset();
}
diff --git a/src/emu/netlist/devices/nld_74ls629.h b/src/emu/netlist/devices/nld_74ls629.h
index 31ecf340902..b4f011cf337 100644
--- a/src/emu/netlist/devices/nld_74ls629.h
+++ b/src/emu/netlist/devices/nld_74ls629.h
@@ -33,23 +33,23 @@
#define SN74LS629(_name, _cap) \
NET_REGISTER_DEV(SN74LS629, _name) \
- NETDEV_PARAMI(_name, CAP, _cap)
+ NETDEV_PARAMI(_name, CAP, _cap)
NETLIB_SUBDEVICE(SN74LS629clk,
- netlist_logic_input_t m_FB;
- netlist_logic_output_t m_Y;
+ netlist_logic_input_t m_FB;
+ netlist_logic_output_t m_Y;
- netlist_time m_inc;
- netlist_sig_t m_enableq;
+ netlist_time m_inc;
+ netlist_sig_t m_enableq;
);
NETLIB_DEVICE_WITH_PARAMS(SN74LS629,
public:
NETLIB_NAME(SN74LS629clk) m_clock;
- NETLIB_NAME(R_base) m_R_FC;
- NETLIB_NAME(R_base) m_R_RNG;
+ NETLIB_NAME(R_base) m_R_FC;
+ NETLIB_NAME(R_base) m_R_RNG;
- netlist_logic_input_t m_ENQ;
+ netlist_logic_input_t m_ENQ;
netlist_analog_input_t m_RNG;
netlist_analog_input_t m_FC;
@@ -57,13 +57,13 @@ public:
);
#define SN74LS629_DIP(_name, _cap1, _cap2) \
- NET_REGISTER_DEV(SN74LS629_dip, _name) \
- NETDEV_PARAMI(_name, 1.CAP, _cap1) \
- NETDEV_PARAMI(_name, 2.CAP, _cap2)
+ NET_REGISTER_DEV(SN74LS629_dip, _name) \
+ NETDEV_PARAMI(_name, 1.CAP, _cap1) \
+ NETDEV_PARAMI(_name, 2.CAP, _cap2)
NETLIB_DEVICE(SN74LS629_dip,
- NETLIB_NAME(SN74LS629) m_1;
- NETLIB_NAME(SN74LS629) m_2;
+ NETLIB_NAME(SN74LS629) m_1;
+ NETLIB_NAME(SN74LS629) m_2;
);
diff --git a/src/emu/netlist/devices/nld_9316.c b/src/emu/netlist/devices/nld_9316.c
index 14a691c4481..6445611fd06 100644
--- a/src/emu/netlist/devices/nld_9316.c
+++ b/src/emu/netlist/devices/nld_9316.c
@@ -7,8 +7,8 @@
NETLIB_START(9316)
{
- register_sub(subABCD, "subABCD");
- sub.m_ABCD = &subABCD;
+ register_sub(subABCD, "subABCD");
+ sub.m_ABCD = &subABCD;
register_sub(sub, "sub");
register_subalias("CLK", sub.m_CLK);
@@ -33,36 +33,36 @@ NETLIB_START(9316)
NETLIB_RESET(9316)
{
- sub.do_reset();
- subABCD.do_reset();
+ sub.do_reset();
+ subABCD.do_reset();
}
NETLIB_START(9316_subABCD)
{
- register_input("A", m_A);
- register_input("B", m_B);
- register_input("C", m_C);
- register_input("D", m_D);
+ register_input("A", m_A);
+ register_input("B", m_B);
+ register_input("C", m_C);
+ register_input("D", m_D);
}
NETLIB_RESET(9316_subABCD)
{
- if (1 || !USE_ADD_REMOVE_LIST)
- {
- m_A.inactivate();
- m_B.inactivate();
- m_C.inactivate();
- m_D.inactivate();
- }
+ if (1 || !USE_ADD_REMOVE_LIST)
+ {
+ m_A.inactivate();
+ m_B.inactivate();
+ m_C.inactivate();
+ m_D.inactivate();
+ }
}
ATTR_HOT inline UINT8 NETLIB_NAME(9316_subABCD::read_ABCD)()
{
- if (1 || !USE_ADD_REMOVE_LIST)
- return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
- else
- return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0);
+ if (1 || !USE_ADD_REMOVE_LIST)
+ return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+ else
+ return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0);
}
NETLIB_UPDATE(9316_subABCD)
@@ -86,10 +86,10 @@ NETLIB_START(9316_sub)
NETLIB_RESET(9316_sub)
{
- m_CLK.set_state(netlist_input_t::STATE_INP_LH);
- m_cnt = 0;
- m_loadq = 1;
- m_ent = 1;
+ m_CLK.set_state(netlist_input_t::STATE_INP_LH);
+ m_cnt = 0;
+ m_loadq = 1;
+ m_ent = 1;
}
NETLIB_UPDATE(9316_sub)
@@ -99,7 +99,7 @@ NETLIB_UPDATE(9316_sub)
{
cnt = ( cnt + 1) & 0x0f;
update_outputs(cnt);
- OUTLOGIC(m_RC, m_ent & (cnt == 0x0f), NLTIME_FROM_NS(20));
+ OUTLOGIC(m_RC, m_ent & (cnt == 0x0f), NLTIME_FROM_NS(20));
#if 0
if (cnt == 0x0f)
OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
@@ -128,7 +128,7 @@ NETLIB_UPDATE(9316)
}
else
{
- UINT8 cnt = sub.m_cnt;
+ UINT8 cnt = sub.m_cnt;
sub.m_CLK.inactivate();
if (!clrq & (cnt>0))
{
@@ -198,34 +198,33 @@ inline NETLIB_FUNC_VOID(9316_sub, update_outputs, (const UINT8 cnt))
NETLIB_START(9316_dip)
{
- NETLIB_NAME(9316)::start();
-
- register_subalias("1", m_CLRQ);
- register_subalias("2", sub.m_CLK);
- register_subalias("3", subABCD.m_A);
- register_subalias("4", subABCD.m_B);
- register_subalias("5", subABCD.m_C);
- register_subalias("6", subABCD.m_D);
- register_subalias("7", m_ENP);
- // register_subalias("8", ); --> GND
-
- register_subalias("9", m_LOADQ);
- register_subalias("10", m_ENT);
- register_subalias("11", sub.m_QD);
- register_subalias("12", sub.m_QC);
- register_subalias("13", sub.m_QB);
- register_subalias("14", sub.m_QA);
- register_subalias("15", sub.m_RC);
- // register_subalias("16", ); --> VCC
+ NETLIB_NAME(9316)::start();
+
+ register_subalias("1", m_CLRQ);
+ register_subalias("2", sub.m_CLK);
+ register_subalias("3", subABCD.m_A);
+ register_subalias("4", subABCD.m_B);
+ register_subalias("5", subABCD.m_C);
+ register_subalias("6", subABCD.m_D);
+ register_subalias("7", m_ENP);
+ // register_subalias("8", ); --> GND
+
+ register_subalias("9", m_LOADQ);
+ register_subalias("10", m_ENT);
+ register_subalias("11", sub.m_QD);
+ register_subalias("12", sub.m_QC);
+ register_subalias("13", sub.m_QB);
+ register_subalias("14", sub.m_QA);
+ register_subalias("15", sub.m_RC);
+ // register_subalias("16", ); --> VCC
}
NETLIB_UPDATE(9316_dip)
{
- NETLIB_NAME(9316)::update();
+ NETLIB_NAME(9316)::update();
}
NETLIB_RESET(9316_dip)
{
- NETLIB_NAME(9316)::reset();
+ NETLIB_NAME(9316)::reset();
}
-
diff --git a/src/emu/netlist/devices/nld_9316.h b/src/emu/netlist/devices/nld_9316.h
index a9e7a37df5f..524871d8ea5 100644
--- a/src/emu/netlist/devices/nld_9316.h
+++ b/src/emu/netlist/devices/nld_9316.h
@@ -64,15 +64,15 @@
NET_CONNECT(_name, D, _D)
#define TTL_9316_DIP(_name) \
- NET_REGISTER_DEV(9316_dip, _name)
+ NET_REGISTER_DEV(9316_dip, _name)
NETLIB_SUBDEVICE(9316_subABCD,
- 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;
- ATTR_HOT inline UINT8 read_ABCD();
+ ATTR_HOT inline UINT8 read_ABCD();
);
NETLIB_SUBDEVICE(9316_sub,
@@ -95,7 +95,7 @@ NETLIB_SUBDEVICE(9316_sub,
NETLIB_DEVICE(9316,
NETLIB_NAME(9316_sub) sub;
- NETLIB_NAME(9316_subABCD) subABCD;
+ NETLIB_NAME(9316_subABCD) subABCD;
netlist_ttl_input_t m_ENP;
netlist_ttl_input_t m_ENT;
netlist_ttl_input_t m_CLRQ;
diff --git a/src/emu/netlist/devices/nld_legacy.c b/src/emu/netlist/devices/nld_legacy.c
index 529d5325651..7c3faa58117 100644
--- a/src/emu/netlist/devices/nld_legacy.c
+++ b/src/emu/netlist/devices/nld_legacy.c
@@ -16,8 +16,8 @@ NETLIB_START(nicRSFF)
NETLIB_RESET(nicRSFF)
{
- m_Q.initial(0);
- m_QQ.initial(1);
+ m_Q.initial(0);
+ m_QQ.initial(1);
}
NETLIB_UPDATE(nicRSFF)
diff --git a/src/emu/netlist/devices/nld_ne555.c b/src/emu/netlist/devices/nld_ne555.c
index 580c76d3787..b8f4e4b5fc7 100644
--- a/src/emu/netlist/devices/nld_ne555.c
+++ b/src/emu/netlist/devices/nld_ne555.c
@@ -46,17 +46,17 @@ NETLIB_START(NE555)
NETLIB_RESET(NE555)
{
- m_R1.do_reset();
- m_R2.do_reset();
- m_R3.do_reset();
- m_RDIS.do_reset();
+ m_R1.do_reset();
+ m_R2.do_reset();
+ m_R3.do_reset();
+ m_RDIS.do_reset();
- 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);
- m_last_out = false;
+ m_last_out = false;
}
NETLIB_UPDATE(NE555)
@@ -93,25 +93,25 @@ NETLIB_UPDATE(NE555)
NETLIB_START(NE555_dip)
{
- NETLIB_NAME(NE555)::start();
+ NETLIB_NAME(NE555)::start();
- register_subalias("1", m_R3.m_N); // Pin 1
- register_subalias("2", m_TRIG); // Pin 2
- register_subalias("3", m_OUT); // Pin 3
- register_subalias("4", m_RESET); // Pin 4
- register_subalias("5", m_R1.m_N); // Pin 5
- register_subalias("6", m_THRES); // Pin 6
- register_subalias("7", m_RDIS.m_P); // Pin 7
- register_subalias("8", m_R1.m_P); // Pin 8
+ register_subalias("1", m_R3.m_N); // Pin 1
+ register_subalias("2", m_TRIG); // Pin 2
+ register_subalias("3", m_OUT); // Pin 3
+ register_subalias("4", m_RESET); // Pin 4
+ register_subalias("5", m_R1.m_N); // Pin 5
+ register_subalias("6", m_THRES); // Pin 6
+ register_subalias("7", m_RDIS.m_P); // Pin 7
+ register_subalias("8", m_R1.m_P); // Pin 8
}
NETLIB_UPDATE(NE555_dip)
{
- NETLIB_NAME(NE555)::update();
+ NETLIB_NAME(NE555)::update();
}
NETLIB_RESET(NE555_dip)
{
- NETLIB_NAME(NE555)::reset();
+ NETLIB_NAME(NE555)::reset();
}
diff --git a/src/emu/netlist/devices/nld_ne555.h b/src/emu/netlist/devices/nld_ne555.h
index 50fccf8486a..8c9c1baa420 100644
--- a/src/emu/netlist/devices/nld_ne555.h
+++ b/src/emu/netlist/devices/nld_ne555.h
@@ -44,7 +44,7 @@ NETLIB_DEVICE(NE555,
);
#define NE555_DIP(_name) \
- NET_REGISTER_DEV(NE555_dip, _name)
+ NET_REGISTER_DEV(NE555_dip, _name)
NETLIB_DEVICE_DERIVED(NE555_dip, NE555,
);
diff --git a/src/emu/netlist/devices/nld_signal.h b/src/emu/netlist/devices/nld_signal.h
index 24c3854a07d..6580ec0818c 100644
--- a/src/emu/netlist/devices/nld_signal.h
+++ b/src/emu/netlist/devices/nld_signal.h
@@ -47,8 +47,8 @@ public:
ATTR_COLD void reset()
{
- m_Q.initial(1);
- m_active = 1;
+ m_Q.initial(1);
+ m_active = 1;
}
#if (USE_DEACTIVE_DEVICE)
@@ -98,55 +98,55 @@ public:
save(NAME(m_active));
}
- ATTR_COLD void reset()
- {
- m_Q.initial(1);
- m_active = 1;
- }
+ ATTR_COLD void reset()
+ {
+ m_Q.initial(1);
+ m_active = 1;
+ }
#if (USE_DEACTIVE_DEVICE)
- ATTR_HOT void inc_active()
- {
- if (++m_active == 1)
- {
- update();
- }
- }
-
- ATTR_HOT void dec_active()
- {
- if (--m_active == 0)
- {
- for (int i = 0; i< _numdev; i++)
- m_i[i].inactivate();
- }
- }
+ ATTR_HOT void inc_active()
+ {
+ if (++m_active == 1)
+ {
+ update();
+ }
+ }
+
+ ATTR_HOT void dec_active()
+ {
+ if (--m_active == 0)
+ {
+ for (int i = 0; i< _numdev; i++)
+ m_i[i].inactivate();
+ }
+ }
#endif
- virtual void update()
- {
- const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
-
- // FIXME: this check is needed because update is called during startup as well
- if (UNEXPECTED(USE_DEACTIVE_DEVICE && m_active == 0))
- return;
-
- for (int i = 0; i< _numdev; i++)
- {
- this->m_i[i].activate();
- if (INPLOGIC(this->m_i[i]) == _check)
- {
- for (int j = 0; j < i; j++)
- this->m_i[j].inactivate();
- for (int j = i + 1; j < _numdev; j++)
- this->m_i[j].inactivate();
-
- OUTLOGIC(this->m_Q, _check ^ (1 ^ _invert), times[_check]);// ? 15000 : 22000);
- return;
- }
- }
- OUTLOGIC(this->m_Q,_check ^ (_invert), times[1-_check]);// ? 22000 : 15000);
- }
+ virtual void update()
+ {
+ const netlist_time times[2] = { NLTIME_FROM_NS(22), NLTIME_FROM_NS(15) };
+
+ // FIXME: this check is needed because update is called during startup as well
+ if (UNEXPECTED(USE_DEACTIVE_DEVICE && m_active == 0))
+ return;
+
+ for (int i = 0; i< _numdev; i++)
+ {
+ this->m_i[i].activate();
+ if (INPLOGIC(this->m_i[i]) == _check)
+ {
+ for (int j = 0; j < i; j++)
+ this->m_i[j].inactivate();
+ for (int j = i + 1; j < _numdev; j++)
+ this->m_i[j].inactivate();
+
+ OUTLOGIC(this->m_Q, _check ^ (1 ^ _invert), times[_check]);// ? 15000 : 22000);
+ return;
+ }
+ }
+ OUTLOGIC(this->m_Q,_check ^ (_invert), times[1-_check]);// ? 22000 : 15000);
+ }
public:
netlist_ttl_input_t m_i[_numdev];
@@ -166,35 +166,35 @@ public:
ATTR_COLD void start()
{
register_output("Q", m_Q);
- register_input("A", m_i[0]);
- register_input("B", m_i[1]);
+ register_input("A", m_i[0]);
+ register_input("B", m_i[1]);
- save(NAME(m_active));
+ save(NAME(m_active));
}
- ATTR_COLD void reset()
- {
- m_Q.initial(1);
- m_active = 1;
- }
+ ATTR_COLD void reset()
+ {
+ m_Q.initial(1);
+ m_active = 1;
+ }
#if (USE_DEACTIVE_DEVICE)
- ATTR_HOT virtual void inc_active()
- {
- if (++m_active == 1)
- {
- update();
- }
- }
-
- ATTR_HOT virtual void dec_active()
- {
- if (--m_active == 0)
- {
- m_i[0].inactivate();
- m_i[1].inactivate();
- }
- }
+ ATTR_HOT virtual void inc_active()
+ {
+ if (++m_active == 1)
+ {
+ update();
+ }
+ }
+
+ ATTR_HOT virtual void dec_active()
+ {
+ if (--m_active == 0)
+ {
+ m_i[0].inactivate();
+ m_i[1].inactivate();
+ }
+ }
#endif
ATTR_HOT ATTR_ALIGN void update()
@@ -202,13 +202,13 @@ public:
const netlist_time times[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22)};
// FIXME: this check is needed because update is called during startup as well
- if (UNEXPECTED(USE_DEACTIVE_DEVICE && m_active == 0))
- return;
+ if (UNEXPECTED(USE_DEACTIVE_DEVICE && m_active == 0))
+ return;
m_i[0].activate();
m_i[1].activate();
#if 0
- UINT8 res = _invert ^ 1 ^_check;
+ UINT8 res = _invert ^ 1 ^_check;
if (INPLOGIC(m_i[0]) ^ _check)
{
if (INPLOGIC(m_i[1]) ^ _check)
@@ -221,23 +221,23 @@ public:
if (INPLOGIC(m_i[1]) ^ _check)
m_i[1].inactivate();
}
- OUTLOGIC(m_Q, res, times[res & 1]);// ? 22000 : 15000);
+ OUTLOGIC(m_Q, res, times[res & 1]);// ? 22000 : 15000);
#else
const UINT8 val = (INPLOGIC(m_i[0]) ^ _check) | ((INPLOGIC(m_i[1]) ^ _check) << 1);
- UINT8 res = _invert ^ 1 ^_check;
+ UINT8 res = _invert ^ 1 ^_check;
switch (val)
{
- case 1:
- m_i[0].inactivate();
- break;
- case 2:
- m_i[1].inactivate();
- break;
- case 3:
- res = _invert ^ _check;
- break;
+ case 1:
+ m_i[0].inactivate();
+ break;
+ case 2:
+ m_i[1].inactivate();
+ break;
+ case 3:
+ res = _invert ^ _check;
+ break;
}
- OUTLOGIC(m_Q, res, times[res]);// ? 22000 : 15000);
+ OUTLOGIC(m_Q, res, times[res]);// ? 22000 : 15000);
#endif
}
diff --git a/src/emu/netlist/devices/nld_system.c b/src/emu/netlist/devices/nld_system.c
index 7e37bef8e19..e6cd2485603 100644
--- a/src/emu/netlist/devices/nld_system.c
+++ b/src/emu/netlist/devices/nld_system.c
@@ -51,12 +51,12 @@ NETLIB_RESET(ttl_input)
NETLIB_UPDATE(ttl_input)
{
- OUTLOGIC(m_Q, m_IN.Value() & 1, netlist_time::from_nsec(1));
+ OUTLOGIC(m_Q, m_IN.Value() & 1, netlist_time::from_nsec(1));
}
NETLIB_UPDATE_PARAM(ttl_input)
{
- update();
+ update();
}
// ----------------------------------------------------------------------------------------
@@ -66,7 +66,7 @@ NETLIB_UPDATE_PARAM(ttl_input)
NETLIB_START(analog_input)
{
register_output("Q", m_Q);
- register_param("IN", m_IN, 0.0);
+ register_param("IN", m_IN, 0.0);
}
NETLIB_RESET(analog_input)
@@ -75,10 +75,10 @@ NETLIB_RESET(analog_input)
NETLIB_UPDATE(analog_input)
{
- OUTANALOG(m_Q, m_IN.Value(), NLTIME_IMMEDIATE);
+ OUTANALOG(m_Q, m_IN.Value(), NLTIME_IMMEDIATE);
}
NETLIB_UPDATE_PARAM(analog_input)
{
- update();
+ update();
}
diff --git a/src/emu/netlist/devices/nld_system.h b/src/emu/netlist/devices/nld_system.h
index ca5f9b70316..2c214ed352a 100644
--- a/src/emu/netlist/devices/nld_system.h
+++ b/src/emu/netlist/devices/nld_system.h
@@ -27,14 +27,14 @@
#define MAINCLOCK(_name, _freq) \
NET_REGISTER_DEV(mainclock, _name) \
- PARAM(_name.FREQ, _freq)
+ PARAM(_name.FREQ, _freq)
#define CLOCK(_name, _freq) \
NET_REGISTER_DEV(clock, _name) \
- PARAM(_name.FREQ, _freq)
+ PARAM(_name.FREQ, _freq)
#define GNDA() \
- NET_REGISTER_DEV(gnd, GND)
+ NET_REGISTER_DEV(gnd, GND)
// ----------------------------------------------------------------------------------------
// mainclock
@@ -47,7 +47,7 @@ public:
netlist_param_double_t m_freq;
netlist_time m_inc;
- ATTR_HOT inline static void mc_update(netlist_net_t &net);
+ ATTR_HOT inline static void mc_update(netlist_net_t &net);
);
// ----------------------------------------------------------------------------------------
@@ -76,7 +76,7 @@ NETLIB_DEVICE_WITH_PARAMS(ttl_input,
NETLIB_DEVICE_WITH_PARAMS(analog_input,
netlist_analog_output_t m_Q;
- netlist_param_double_t m_IN;
+ netlist_param_double_t m_IN;
);
// ----------------------------------------------------------------------------------------
@@ -86,29 +86,29 @@ NETLIB_DEVICE_WITH_PARAMS(analog_input,
class nld_gnd : public netlist_device_t
{
public:
- ATTR_COLD nld_gnd()
- : netlist_device_t(GND) { }
+ ATTR_COLD nld_gnd()
+ : netlist_device_t(GND) { }
- ATTR_COLD virtual ~nld_gnd() {}
+ ATTR_COLD virtual ~nld_gnd() {}
protected:
- ATTR_COLD void start()
- {
- register_output("Q", m_Q);
- }
+ ATTR_COLD void start()
+ {
+ register_output("Q", m_Q);
+ }
- ATTR_COLD void reset()
- {
- }
+ ATTR_COLD void reset()
+ {
+ }
- ATTR_HOT ATTR_ALIGN void update()
- {
- OUTANALOG(m_Q, 0.0, NLTIME_IMMEDIATE);
- }
+ ATTR_HOT ATTR_ALIGN void update()
+ {
+ OUTANALOG(m_Q, 0.0, NLTIME_IMMEDIATE);
+ }
private:
- netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_Q;
};
@@ -120,38 +120,38 @@ private:
class nld_a_to_d_proxy : public netlist_device_t
{
public:
- ATTR_COLD nld_a_to_d_proxy(netlist_input_t &in_proxied)
- : netlist_device_t()
- {
- assert(in_proxied.family() == LOGIC);
- m_I.m_family_desc = in_proxied.m_family_desc;
- }
+ ATTR_COLD nld_a_to_d_proxy(netlist_input_t &in_proxied)
+ : netlist_device_t()
+ {
+ assert(in_proxied.family() == LOGIC);
+ m_I.m_family_desc = in_proxied.m_family_desc;
+ }
- ATTR_COLD virtual ~nld_a_to_d_proxy() {}
+ ATTR_COLD virtual ~nld_a_to_d_proxy() {}
- netlist_analog_input_t m_I;
- netlist_ttl_output_t m_Q;
+ netlist_analog_input_t m_I;
+ netlist_ttl_output_t m_Q;
protected:
- ATTR_COLD void start()
- {
- register_input("I", m_I);
- register_output("Q", m_Q);
- }
-
- ATTR_COLD void reset()
- {
- }
-
- ATTR_HOT ATTR_ALIGN void update()
- {
- if (m_I.Q_Analog() > m_I.m_family_desc->m_high_thresh_V)
- OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(1));
- else if (m_I.Q_Analog() < m_I.m_family_desc->m_low_thresh_V)
- OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(1));
- //else
- // OUTLOGIC(m_Q, m_Q.net().last_Q(), NLTIME_FROM_NS(1));
- }
+ ATTR_COLD void start()
+ {
+ register_input("I", m_I);
+ register_output("Q", m_Q);
+ }
+
+ ATTR_COLD void reset()
+ {
+ }
+
+ ATTR_HOT ATTR_ALIGN void update()
+ {
+ if (m_I.Q_Analog() > m_I.m_family_desc->m_high_thresh_V)
+ OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(1));
+ else if (m_I.Q_Analog() < m_I.m_family_desc->m_low_thresh_V)
+ OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(1));
+ //else
+ // OUTLOGIC(m_Q, m_Q.net().last_Q(), NLTIME_FROM_NS(1));
+ }
};
@@ -162,24 +162,24 @@ protected:
class nld_base_d_to_a_proxy : public netlist_device_t
{
public:
- ATTR_COLD nld_base_d_to_a_proxy(netlist_output_t &out_proxied)
- : netlist_device_t()
- {
- assert(out_proxied.family() == LOGIC);
- m_family_desc = out_proxied.m_family_desc;
- }
+ ATTR_COLD nld_base_d_to_a_proxy(netlist_output_t &out_proxied)
+ : netlist_device_t()
+ {
+ assert(out_proxied.family() == LOGIC);
+ m_family_desc = out_proxied.m_family_desc;
+ }
- ATTR_COLD virtual ~nld_base_d_to_a_proxy() {}
+ ATTR_COLD virtual ~nld_base_d_to_a_proxy() {}
- ATTR_COLD virtual netlist_core_terminal_t &out() = 0;
+ ATTR_COLD virtual netlist_core_terminal_t &out() = 0;
- netlist_ttl_input_t m_I;
+ netlist_ttl_input_t m_I;
protected:
- ATTR_COLD void start()
- {
- register_input("I", m_I);
- }
+ ATTR_COLD void start()
+ {
+ register_input("I", m_I);
+ }
private:
};
@@ -188,88 +188,88 @@ private:
class nld_d_to_a_proxy : public nld_base_d_to_a_proxy
{
public:
- ATTR_COLD nld_d_to_a_proxy(netlist_output_t &out_proxied)
- : nld_base_d_to_a_proxy(out_proxied)
- {
- }
+ ATTR_COLD nld_d_to_a_proxy(netlist_output_t &out_proxied)
+ : nld_base_d_to_a_proxy(out_proxied)
+ {
+ }
- ATTR_COLD virtual ~nld_d_to_a_proxy() {}
+ ATTR_COLD virtual ~nld_d_to_a_proxy() {}
protected:
- ATTR_COLD void start()
- {
- nld_base_d_to_a_proxy::start();
- register_output("Q", m_Q);
- }
-
- ATTR_COLD void reset()
- {
- //m_Q.initial(0);
- }
-
- ATTR_COLD virtual netlist_core_terminal_t &out()
- {
- return m_Q;
- }
-
- ATTR_HOT ATTR_ALIGN void update()
- {
- OUTANALOG(m_Q, INPLOGIC(m_I) ? m_family_desc->m_high_V : m_family_desc->m_low_V, NLTIME_FROM_NS(1));
- }
+ ATTR_COLD void start()
+ {
+ nld_base_d_to_a_proxy::start();
+ register_output("Q", m_Q);
+ }
+
+ ATTR_COLD void reset()
+ {
+ //m_Q.initial(0);
+ }
+
+ ATTR_COLD virtual netlist_core_terminal_t &out()
+ {
+ return m_Q;
+ }
+
+ ATTR_HOT ATTR_ALIGN void update()
+ {
+ OUTANALOG(m_Q, INPLOGIC(m_I) ? m_family_desc->m_high_V : m_family_desc->m_low_V, NLTIME_FROM_NS(1));
+ }
private:
- netlist_analog_output_t m_Q;
+ netlist_analog_output_t m_Q;
};
#else
class nld_d_to_a_proxy : public nld_base_d_to_a_proxy
{
public:
- ATTR_COLD nld_d_to_a_proxy(netlist_output_t &out_proxied)
- : nld_base_d_to_a_proxy(out_proxied)
- {
- }
+ ATTR_COLD nld_d_to_a_proxy(netlist_output_t &out_proxied)
+ : nld_base_d_to_a_proxy(out_proxied)
+ {
+ }
- ATTR_COLD virtual ~nld_d_to_a_proxy() {}
+ ATTR_COLD virtual ~nld_d_to_a_proxy() {}
protected:
- ATTR_COLD void start()
- {
- nld_base_d_to_a_proxy::start();
-
- register_sub(m_R, "R");
- register_output("_Q", m_Q);
- register_subalias("Q", m_R.m_N);
-
- connect(m_R.m_P, m_Q);
-
- //m_Q.initial(m_family_desc->m_low_V);
- //m_R.set_R(m_family_desc->m_R_low);
- }
-
- ATTR_COLD void reset()
- {
- //m_Q.initial(m_family_desc->m_low_V);
- //m_R.set_R(m_family_desc->m_R_low);
- m_R.do_reset();
- }
-
- ATTR_COLD virtual netlist_core_terminal_t &out()
- {
- return m_R.m_N;
- }
-
- ATTR_HOT ATTR_ALIGN void update()
- {
- double R = INPLOGIC(m_I) ? m_family_desc->m_R_high : m_family_desc->m_R_low;
- double V = INPLOGIC(m_I) ? m_family_desc->m_high_V : m_family_desc->m_low_V;
- //printf("%f %f\n", R, V);
- m_R.set_R(R);
- OUTANALOG(m_Q, V, NLTIME_FROM_NS(0));
- }
+ ATTR_COLD void start()
+ {
+ nld_base_d_to_a_proxy::start();
+
+ register_sub(m_R, "R");
+ register_output("_Q", m_Q);
+ register_subalias("Q", m_R.m_N);
+
+ connect(m_R.m_P, m_Q);
+
+ //m_Q.initial(m_family_desc->m_low_V);
+ //m_R.set_R(m_family_desc->m_R_low);
+ }
+
+ ATTR_COLD void reset()
+ {
+ //m_Q.initial(m_family_desc->m_low_V);
+ //m_R.set_R(m_family_desc->m_R_low);
+ m_R.do_reset();
+ }
+
+ ATTR_COLD virtual netlist_core_terminal_t &out()
+ {
+ return m_R.m_N;
+ }
+
+ ATTR_HOT ATTR_ALIGN void update()
+ {
+ double R = INPLOGIC(m_I) ? m_family_desc->m_R_high : m_family_desc->m_R_low;
+ double V = INPLOGIC(m_I) ? m_family_desc->m_high_V : m_family_desc->m_low_V;
+ //printf("%f %f\n", R, V);
+ m_R.set_R(R);
+ OUTANALOG(m_Q, V, NLTIME_FROM_NS(0));
+ }
private:
- netlist_analog_output_t m_Q;
- nld_R_base m_R;
+ netlist_analog_output_t m_Q;
+ nld_R_base m_R;
};
#endif
diff --git a/src/emu/netlist/nl_base.c b/src/emu/netlist/nl_base.c
index 55ef0f80073..8f1e6c9dfcf 100644
--- a/src/emu/netlist/nl_base.c
+++ b/src/emu/netlist/nl_base.c
@@ -13,12 +13,12 @@ const netlist_time netlist_time::zero = netlist_time::from_raw(0);
netlist_logic_family_desc_t netlist_family_ttl =
{
- 0.8, // m_low_thresh_V
- 2.0, // m_high_thresh_V
- 0.3, // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
- 3.7, // m_high_V
- 1.0, // m_R_low;
- 130.0, // m_R_high;
+ 0.8, // m_low_thresh_V
+ 2.0, // m_high_thresh_V
+ 0.3, // m_low_V - these depend on sinked/sourced current. Values should be suitable for typical applications.
+ 3.7, // m_high_V
+ 1.0, // m_R_low;
+ 130.0, // m_R_high;
};
// ----------------------------------------------------------------------------------------
@@ -94,7 +94,7 @@ ATTR_COLD const pstring netlist_object_t::name() const
{
if (m_name == "")
netlist().error("object not initialized");
- return m_name;
+ return m_name;
}
// ----------------------------------------------------------------------------------------
@@ -142,10 +142,10 @@ netlist_base_t::~netlist_base_t()
{
for (int i=0; i < m_nets.count(); i++)
{
- if (!m_nets[i]->isRailNet())
- {
- delete m_nets[i];
- }
+ if (!m_nets[i]->isRailNet())
+ {
+ delete m_nets[i];
+ }
}
m_nets.clear();
@@ -157,36 +157,36 @@ netlist_base_t::~netlist_base_t()
ATTR_COLD void netlist_base_t::save_register()
{
- save(NAME(m_queue.callback()));
- save(NAME(m_time));
- netlist_object_t::save_register();
+ save(NAME(m_queue.callback()));
+ save(NAME(m_time));
+ netlist_object_t::save_register();
}
ATTR_HOT const double netlist_base_t::gmin() const
{
- return solver()->gmin();
+ return solver()->gmin();
}
ATTR_COLD void netlist_base_t::start()
{
- /* find the main clock and solver ... */
+ /* find the main clock and solver ... */
- m_mainclock = get_single_device<NETLIB_NAME(mainclock)>("mainclock");
- m_solver = get_single_device<NETLIB_NAME(solver)>("solver");
- m_gnd = get_single_device<NETLIB_NAME(gnd)>("gnd");
+ m_mainclock = get_single_device<NETLIB_NAME(mainclock)>("mainclock");
+ m_solver = get_single_device<NETLIB_NAME(solver)>("solver");
+ m_gnd = get_single_device<NETLIB_NAME(gnd)>("gnd");
- /* make sure the solver is started first! */
+ /* make sure the solver is started first! */
- if (m_solver != NULL)
- m_solver->start_dev();
+ if (m_solver != NULL)
+ m_solver->start_dev();
- NL_VERBOSE_OUT(("Initializing devices ...\n"));
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- netlist_device_t *dev = entry->object();
- if (dev != m_solver)
- dev->start_dev();
- }
+ NL_VERBOSE_OUT(("Initializing devices ...\n"));
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ netlist_device_t *dev = entry->object();
+ if (dev != m_solver)
+ dev->start_dev();
+ }
}
@@ -202,8 +202,8 @@ ATTR_COLD netlist_net_t *netlist_base_t::find_net(const pstring &name)
ATTR_COLD void netlist_base_t::rebuild_lists()
{
- for (int i = 0; i < m_nets.count(); i++)
- m_nets[i]->rebuild_list();
+ for (int i = 0; i < m_nets.count(); i++)
+ m_nets[i]->rebuild_list();
}
@@ -213,19 +213,19 @@ ATTR_COLD void netlist_base_t::reset()
m_queue.clear();
if (m_mainclock != NULL)
m_mainclock->m_Q.net().set_time(netlist_time::zero);
- if (m_solver != NULL)
- m_solver->do_reset();
+ if (m_solver != NULL)
+ m_solver->do_reset();
- // Reset all nets once !
- for (int i = 0; i < m_nets.count(); i++)
- m_nets[i]->do_reset();
+ // Reset all nets once !
+ for (int i = 0; i < m_nets.count(); i++)
+ m_nets[i]->do_reset();
- // Reset all devices once !
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- netlist_device_t *dev = entry->object();
- dev->do_reset();
- }
+ // Reset all devices once !
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ netlist_device_t *dev = entry->object();
+ dev->do_reset();
+ }
// Step all devices once !
for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
@@ -235,67 +235,67 @@ ATTR_COLD void netlist_base_t::reset()
}
// FIXME: some const devices rely on this
- /* make sure params are set now .. */
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- entry->object()->update_param();
- }
+ /* make sure params are set now .. */
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ entry->object()->update_param();
+ }
}
ATTR_HOT ATTR_ALIGN void netlist_base_t::process_queue(const netlist_time delta)
{
- m_stop = m_time + delta;
-
- if (m_mainclock == NULL)
- {
- while ( (m_time < m_stop) && (m_queue.is_not_empty()))
- {
- const netlist_queue_t::entry_t *e = m_queue.pop();
- m_time = e->exec_time();
- e->object()->update_devs();
-
- add_to_stat(m_perf_out_processed, 1);
- if (FATAL_ERROR_AFTER_NS)
- if (time() > NLTIME_FROM_NS(FATAL_ERROR_AFTER_NS))
- error("Stopped");
- }
- if (m_queue.is_empty())
- m_time = m_stop;
-
- } else {
- netlist_net_t &mc_net = m_mainclock->m_Q.net();
- const netlist_time inc = m_mainclock->m_inc;
- netlist_time mc_time = mc_net.time();
-
- while (m_time < m_stop)
- {
- if (m_queue.is_not_empty())
- {
- while (m_queue.peek()->exec_time() > mc_time)
- {
- m_time = mc_time;
- mc_time += inc;
- NETLIB_NAME(mainclock)::mc_update(mc_net);
- }
-
- const netlist_queue_t::entry_t *e = m_queue.pop();
- m_time = e->exec_time();
- e->object()->update_devs();
-
- } else {
- m_time = mc_time;
- mc_time += inc;
- NETLIB_NAME(mainclock)::mc_update(mc_net);
- }
- if (FATAL_ERROR_AFTER_NS)
- if (time() > NLTIME_FROM_NS(FATAL_ERROR_AFTER_NS))
- error("Stopped");
-
- add_to_stat(m_perf_out_processed, 1);
- }
- mc_net.set_time(mc_time);
- }
+ m_stop = m_time + delta;
+
+ if (m_mainclock == NULL)
+ {
+ while ( (m_time < m_stop) && (m_queue.is_not_empty()))
+ {
+ const netlist_queue_t::entry_t *e = m_queue.pop();
+ m_time = e->exec_time();
+ e->object()->update_devs();
+
+ add_to_stat(m_perf_out_processed, 1);
+ if (FATAL_ERROR_AFTER_NS)
+ if (time() > NLTIME_FROM_NS(FATAL_ERROR_AFTER_NS))
+ error("Stopped");
+ }
+ if (m_queue.is_empty())
+ m_time = m_stop;
+
+ } else {
+ netlist_net_t &mc_net = m_mainclock->m_Q.net();
+ const netlist_time inc = m_mainclock->m_inc;
+ netlist_time mc_time = mc_net.time();
+
+ while (m_time < m_stop)
+ {
+ if (m_queue.is_not_empty())
+ {
+ while (m_queue.peek()->exec_time() > mc_time)
+ {
+ m_time = mc_time;
+ mc_time += inc;
+ NETLIB_NAME(mainclock)::mc_update(mc_net);
+ }
+
+ const netlist_queue_t::entry_t *e = m_queue.pop();
+ m_time = e->exec_time();
+ e->object()->update_devs();
+
+ } else {
+ m_time = mc_time;
+ mc_time += inc;
+ NETLIB_NAME(mainclock)::mc_update(mc_net);
+ }
+ if (FATAL_ERROR_AFTER_NS)
+ if (time() > NLTIME_FROM_NS(FATAL_ERROR_AFTER_NS))
+ error("Stopped");
+
+ add_to_stat(m_perf_out_processed, 1);
+ }
+ mc_net.set_time(mc_time);
+ }
}
ATTR_COLD void netlist_base_t::error(const char *format, ...) const
@@ -308,18 +308,18 @@ ATTR_COLD void netlist_base_t::error(const char *format, ...) const
ATTR_COLD void netlist_base_t::warning(const char *format, ...) const
{
- va_list ap;
- va_start(ap, format);
- verror(NL_WARNING, format, ap);
- va_end(ap);
+ va_list ap;
+ va_start(ap, format);
+ verror(NL_WARNING, format, ap);
+ va_end(ap);
}
ATTR_COLD void netlist_base_t::log(const char *format, ...) const
{
- va_list ap;
- va_start(ap, format);
- verror(NL_LOG, format, ap);
- va_end(ap);
+ va_list ap;
+ va_start(ap, format);
+ verror(NL_LOG, format, ap);
+ va_end(ap);
}
@@ -361,14 +361,14 @@ ATTR_COLD netlist_core_device_t::~netlist_core_device_t()
ATTR_HOT ATTR_ALIGN const netlist_sig_t netlist_core_device_t::INPLOGIC_PASSIVE(netlist_logic_input_t &inp)
{
if (inp.state() != netlist_input_t::STATE_INP_PASSIVE)
- return inp.Q();
+ return inp.Q();
else
- {
- inp.activate();
- const netlist_sig_t ret = inp.Q();
- inp.inactivate();
- return ret;
- }
+ {
+ inp.activate();
+ const netlist_sig_t ret = inp.Q();
+ inp.inactivate();
+ return ret;
+ }
}
@@ -424,26 +424,26 @@ ATTR_COLD void netlist_device_t::register_subalias(const pstring &name, netlist_
ATTR_COLD void netlist_device_t::register_terminal(const pstring &name, netlist_terminal_t &port)
{
setup().register_object(*this, name, port);
- if (port.isType(netlist_terminal_t::INPUT) || port.isType(netlist_terminal_t::TERMINAL))
- m_terminals.add(port.name());
+ if (port.isType(netlist_terminal_t::INPUT) || port.isType(netlist_terminal_t::TERMINAL))
+ m_terminals.add(port.name());
}
ATTR_COLD void netlist_device_t::register_output(const pstring &name, netlist_output_t &port)
{
- port.m_family_desc = this->m_family_desc;
+ port.m_family_desc = this->m_family_desc;
setup().register_object(*this, name, port);
}
ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_input_t &inp)
{
- inp.m_family_desc = this->m_family_desc;
+ inp.m_family_desc = this->m_family_desc;
setup().register_object(*this, name, inp);
- m_terminals.add(inp.name());
+ m_terminals.add(inp.name());
}
ATTR_COLD void netlist_device_t::connect(netlist_core_terminal_t &t1, netlist_core_terminal_t &t2)
{
- setup().connect(t1, t2);
+ setup().connect(t1, t2);
}
@@ -470,117 +470,117 @@ template ATTR_COLD void netlist_device_t::register_param(const pstring &sname, n
ATTR_COLD netlist_net_t::netlist_net_t(const type_t atype, const family_t afamily)
: netlist_object_t(atype, afamily)
- , m_solver(NULL)
- , m_railterminal(NULL)
+ , m_solver(NULL)
+ , m_railterminal(NULL)
, m_num_cons(0)
, m_time(netlist_time::zero)
, m_active(0)
, m_in_queue(2)
{
- m_last_Q = 0;
- m_new_Q = 0;
- m_cur_Q = 0;
- m_last_Analog = 0.0;
- m_new_Analog = 0.0;
- m_cur_Analog = 0.0;
+ m_last_Q = 0;
+ m_new_Q = 0;
+ m_cur_Q = 0;
+ m_last_Analog = 0.0;
+ m_new_Analog = 0.0;
+ m_cur_Analog = 0.0;
};
ATTR_COLD netlist_net_t::~netlist_net_t()
{
- netlist().remove_save_items(this);
+ netlist().remove_save_items(this);
}
ATTR_HOT void netlist_net_t::inc_active(netlist_core_terminal_t &term)
{
- m_active++;
-
- if (USE_ADD_REMOVE_LIST)
- {
- m_list.insert(term);
- //m_list.add(term);
- }
-
- if (USE_DEACTIVE_DEVICE)
- {
- if (m_active == 1 && m_in_queue > 0)
- {
- m_last_Q = m_cur_Q;
- m_last_Analog = m_cur_Analog; // FIXME: Needed here ?
- railterminal().netdev().inc_active();
- m_cur_Q = m_new_Q;
- m_cur_Analog = m_new_Analog;
- }
- }
-
- if (m_active == 1 && m_in_queue == 0)
- {
- if (m_time > netlist().time())
- {
- m_in_queue = 1; /* pending */
- netlist().push_to_queue(this, m_time);
- }
- else
- {
- m_cur_Q = m_last_Q = m_new_Q;
- m_cur_Analog = m_last_Analog = m_new_Analog; // FIXME: Needed here?
- m_in_queue = 2;
- }
- }
+ m_active++;
+
+ if (USE_ADD_REMOVE_LIST)
+ {
+ m_list.insert(term);
+ //m_list.add(term);
+ }
+
+ if (USE_DEACTIVE_DEVICE)
+ {
+ if (m_active == 1 && m_in_queue > 0)
+ {
+ m_last_Q = m_cur_Q;
+ m_last_Analog = m_cur_Analog; // FIXME: Needed here ?
+ railterminal().netdev().inc_active();
+ m_cur_Q = m_new_Q;
+ m_cur_Analog = m_new_Analog;
+ }
+ }
+
+ if (m_active == 1 && m_in_queue == 0)
+ {
+ if (m_time > netlist().time())
+ {
+ m_in_queue = 1; /* pending */
+ netlist().push_to_queue(this, m_time);
+ }
+ else
+ {
+ m_cur_Q = m_last_Q = m_new_Q;
+ m_cur_Analog = m_last_Analog = m_new_Analog; // FIXME: Needed here?
+ m_in_queue = 2;
+ }
+ }
}
ATTR_HOT void netlist_net_t::dec_active(netlist_core_terminal_t &term)
{
- m_active--;
+ m_active--;
- if (USE_ADD_REMOVE_LIST)
- {
- m_list.remove(term);
- }
+ if (USE_ADD_REMOVE_LIST)
+ {
+ m_list.remove(term);
+ }
- if (USE_DEACTIVE_DEVICE)
- {
- if (m_active == 0)
- railterminal().netdev().dec_active();
- }
+ if (USE_DEACTIVE_DEVICE)
+ {
+ if (m_active == 0)
+ railterminal().netdev().dec_active();
+ }
}
ATTR_COLD void netlist_net_t::rebuild_list()
{
- /* rebuild m_list */
+ /* rebuild m_list */
- m_list.clear();
- for (int i=0; i < m_registered.count(); i++)
- if (m_registered[i]->state() != netlist_input_t::STATE_INP_PASSIVE)
- m_list.add(*m_registered[i]);
+ m_list.clear();
+ for (int i=0; i < m_registered.count(); i++)
+ if (m_registered[i]->state() != netlist_input_t::STATE_INP_PASSIVE)
+ m_list.add(*m_registered[i]);
}
ATTR_COLD void netlist_net_t::reset()
{
- m_last_Analog = 0.0;
- m_cur_Analog = 0.0;
- m_new_Analog = 0.0;
- m_last_Q = 0; // set to something we will never hit.
- m_new_Q = 0;
- m_cur_Q = 0;
- m_time = netlist_time::zero;
- m_active = 0;
- m_in_queue = 2;
-
- /* rebuild m_list */
-
- m_list.clear();
- for (int i=0; i < m_registered.count(); i++)
- m_list.add(*m_registered[i]);
-
- for (netlist_core_terminal_t *t = m_list.first(); t != NULL; t = m_list.next(t))
- {
- t->do_reset();
- }
- for (netlist_core_terminal_t *t = m_list.first(); t != NULL; t = m_list.next(t))
- {
- if (t->state() != netlist_input_t::STATE_INP_PASSIVE)
- m_active++;
- }
+ m_last_Analog = 0.0;
+ m_cur_Analog = 0.0;
+ m_new_Analog = 0.0;
+ m_last_Q = 0; // set to something we will never hit.
+ m_new_Q = 0;
+ m_cur_Q = 0;
+ m_time = netlist_time::zero;
+ m_active = 0;
+ m_in_queue = 2;
+
+ /* rebuild m_list */
+
+ m_list.clear();
+ for (int i=0; i < m_registered.count(); i++)
+ m_list.add(*m_registered[i]);
+
+ for (netlist_core_terminal_t *t = m_list.first(); t != NULL; t = m_list.next(t))
+ {
+ t->do_reset();
+ }
+ for (netlist_core_terminal_t *t = m_list.first(); t != NULL; t = m_list.next(t))
+ {
+ if (t->state() != netlist_input_t::STATE_INP_PASSIVE)
+ m_active++;
+ }
}
ATTR_COLD void netlist_net_t::init_object(netlist_base_t &nl, const pstring &aname)
@@ -591,16 +591,16 @@ ATTR_COLD void netlist_net_t::init_object(netlist_base_t &nl, const pstring &ana
ATTR_COLD void netlist_net_t::save_register()
{
- save(NAME(m_last_Analog));
- save(NAME(m_cur_Analog));
- save(NAME(m_new_Analog));
- save(NAME(m_last_Q));
- save(NAME(m_cur_Q));
- save(NAME(m_new_Q));
- save(NAME(m_time));
- save(NAME(m_active));
- save(NAME(m_in_queue));
- netlist_object_t::save_register();
+ save(NAME(m_last_Analog));
+ save(NAME(m_cur_Analog));
+ save(NAME(m_new_Analog));
+ save(NAME(m_last_Q));
+ save(NAME(m_cur_Q));
+ save(NAME(m_new_Q));
+ save(NAME(m_time));
+ save(NAME(m_active));
+ save(NAME(m_in_queue));
+ netlist_object_t::save_register();
}
ATTR_COLD void netlist_net_t::register_railterminal(netlist_output_t &mr)
@@ -666,61 +666,61 @@ ATTR_HOT ATTR_ALIGN inline void netlist_net_t::update_devs()
assert(this->isRailNet());
const UINT32 masks[4] = { 1, 5, 3, 1 };
- const UINT32 mask = masks[ (m_last_Q << 1) | m_new_Q ];
- netlist_core_terminal_t *p = m_list.first();
-
- m_in_queue = 2; /* mark as taken ... */
- m_cur_Q = m_new_Q;
-
- m_cur_Analog = m_new_Analog;
-
- if (USE_ADD_REMOVE_LIST)
- {
- switch (m_active)
- {
- case 2:
- update_dev(p, mask);
- p = m_list.next(p);
- if (p == NULL) break;
- case 1:
- update_dev(p, mask);
- break;
- default:
- while (p != NULL)
- {
- update_dev(p, mask);
- p = m_list.next(p);
- }
- break;
- }
- }
- else
- {
- switch (m_num_cons)
- {
- case 2:
- update_dev(p, mask);
- p = m_list.next(p);
- case 1:
- update_dev(p, mask);
- break;
- default:
- do
- {
- update_dev(p, mask);
- p = m_list.next(p);
- } while (p != NULL);
- break;
- }
- }
- m_last_Q = m_cur_Q;
- m_last_Analog = m_cur_Analog;
+ const UINT32 mask = masks[ (m_last_Q << 1) | m_new_Q ];
+ netlist_core_terminal_t *p = m_list.first();
+
+ m_in_queue = 2; /* mark as taken ... */
+ m_cur_Q = m_new_Q;
+
+ m_cur_Analog = m_new_Analog;
+
+ if (USE_ADD_REMOVE_LIST)
+ {
+ switch (m_active)
+ {
+ case 2:
+ update_dev(p, mask);
+ p = m_list.next(p);
+ if (p == NULL) break;
+ case 1:
+ update_dev(p, mask);
+ break;
+ default:
+ while (p != NULL)
+ {
+ update_dev(p, mask);
+ p = m_list.next(p);
+ }
+ break;
+ }
+ }
+ else
+ {
+ switch (m_num_cons)
+ {
+ case 2:
+ update_dev(p, mask);
+ p = m_list.next(p);
+ case 1:
+ update_dev(p, mask);
+ break;
+ default:
+ do
+ {
+ update_dev(p, mask);
+ p = m_list.next(p);
+ } while (p != NULL);
+ break;
+ }
+ }
+ m_last_Q = m_cur_Q;
+ m_last_Analog = m_cur_Analog;
}
ATTR_HOT void netlist_net_t::solve()
{
- if (m_solver != NULL)
- m_solver->schedule();
+ if (m_solver != NULL)
+ m_solver->schedule();
}
// ----------------------------------------------------------------------------------------
@@ -748,19 +748,19 @@ ATTR_COLD netlist_terminal_t::netlist_terminal_t()
ATTR_COLD void netlist_terminal_t::reset()
{
- //netlist_terminal_core_terminal_t::reset();
- set_state(STATE_INP_ACTIVE);
- m_Idr = 0.0;
- m_go = netlist().gmin();
- m_gt = netlist().gmin();
+ //netlist_terminal_core_terminal_t::reset();
+ set_state(STATE_INP_ACTIVE);
+ m_Idr = 0.0;
+ m_go = netlist().gmin();
+ m_gt = netlist().gmin();
}
ATTR_COLD void netlist_terminal_t::save_register()
{
- save(NAME(m_Idr));
- save(NAME(m_go));
- save(NAME(m_gt));
- netlist_core_terminal_t::save_register();
+ save(NAME(m_Idr));
+ save(NAME(m_go));
+ save(NAME(m_gt));
+ netlist_core_terminal_t::save_register();
}
@@ -782,7 +782,7 @@ netlist_output_t::netlist_output_t(const type_t atype, const family_t afamily)
, m_my_net(NET, afamily)
{
//m_net = new net_net_t(NET_DIGITAL);
- set_state(STATE_OUT);
+ set_state(STATE_OUT);
this->set_net(m_my_net);
}
@@ -798,7 +798,7 @@ ATTR_COLD void netlist_output_t::init_object(netlist_core_device_t &dev, const p
// ----------------------------------------------------------------------------------------
ATTR_COLD netlist_logic_output_t::netlist_logic_output_t()
- : netlist_output_t(OUTPUT, LOGIC), m_proxy(NULL)
+ : netlist_output_t(OUTPUT, LOGIC), m_proxy(NULL)
{
}
@@ -806,7 +806,7 @@ ATTR_COLD void netlist_logic_output_t::initial(const netlist_sig_t val)
{
net().m_cur_Q = val;
net().m_new_Q = val;
- net().m_last_Q = val;
+ net().m_last_Q = val;
}
// ----------------------------------------------------------------------------------------
@@ -825,14 +825,14 @@ ATTR_COLD netlist_ttl_output_t::netlist_ttl_output_t()
ATTR_COLD netlist_analog_output_t::netlist_analog_output_t()
: netlist_output_t(OUTPUT, ANALOG)
{
- net().m_last_Analog = 0.97;
+ net().m_last_Analog = 0.97;
net().m_cur_Analog = 0.98;
net().m_new_Analog = 0.99;
}
ATTR_COLD void netlist_analog_output_t::initial(const double val)
{
- net().m_cur_Analog = val * 0.98;
+ net().m_cur_Analog = val * 0.98;
net().m_cur_Analog = val * 0.99;
net().m_new_Analog = val * 1.0;
}
@@ -878,14 +878,14 @@ ATTR_COLD netlist_param_model_t::netlist_param_model_t()
ATTR_COLD const pstring netlist_param_model_t::model_type() const
{
- pstring tmp = this->Value();
- // .model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)
- int p = tmp.find("(");
- int p1 = p;
- while (--p >= 0 && tmp[p] != ' ')
- ;
+ pstring tmp = this->Value();
+ // .model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)
+ int p = tmp.find("(");
+ int p1 = p;
+ while (--p >= 0 && tmp[p] != ' ')
+ ;
- return tmp.substr(p+1, p1-p-1).ucase();
+ return tmp.substr(p+1, p1-p-1).ucase();
}
@@ -929,8 +929,8 @@ ATTR_COLD double netlist_param_model_t::model_value(const pstring &entity, const
ATTR_HOT inline void NETLIB_NAME(mainclock)::mc_update(netlist_net_t &net)
{
- net.m_new_Q ^= 1;
- net.update_devs();
+ net.m_new_Q ^= 1;
+ net.update_devs();
}
NETLIB_START(mainclock)
@@ -943,7 +943,7 @@ NETLIB_START(mainclock)
NETLIB_RESET(mainclock)
{
- m_Q.net().set_time(netlist_time::zero);
+ m_Q.net().set_time(netlist_time::zero);
}
NETLIB_UPDATE_PARAM(mainclock)
@@ -965,16 +965,16 @@ NETLIB_UPDATE(mainclock)
ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::term_param_list()
{
- if (m_def_param.startsWith("+"))
- return nl_util::split(m_def_param.substr(1), ",");
- else
- return nl_util::pstring_list();
+ if (m_def_param.startsWith("+"))
+ return nl_util::split(m_def_param.substr(1), ",");
+ else
+ return nl_util::pstring_list();
}
ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::def_params()
{
- if (m_def_param.startsWith("+") || m_def_param.equals("-"))
- return nl_util::pstring_list();
- else
- return nl_util::split(m_def_param, ",");
+ if (m_def_param.startsWith("+") || m_def_param.equals("-"))
+ return nl_util::pstring_list();
+ else
+ return nl_util::split(m_def_param, ",");
}
diff --git a/src/emu/netlist/nl_base.h b/src/emu/netlist/nl_base.h
index 97c229e0dd2..f6a768040d4 100644
--- a/src/emu/netlist/nl_base.h
+++ b/src/emu/netlist/nl_base.h
@@ -190,49 +190,49 @@ typedef void (*net_update_delegate)(netlist_core_device_t *);
#define NETLIB_UPDATEI() ATTR_HOT ATTR_ALIGN inline void update(void)
#define NETLIB_DEVICE_BASE(_name, _pclass, _extra, _priv) \
- class _name : public _pclass \
- { \
- public: \
- _name() \
- : _pclass() { } \
- protected: \
- _extra \
- ATTR_HOT void update(); \
- ATTR_HOT void start(); \
- ATTR_HOT void reset(); \
- _priv \
- }
+ class _name : public _pclass \
+ { \
+ public: \
+ _name() \
+ : _pclass() { } \
+ protected: \
+ _extra \
+ ATTR_HOT void update(); \
+ ATTR_HOT void start(); \
+ ATTR_HOT void reset(); \
+ _priv \
+ }
#define NETLIB_DEVICE_DERIVED(_name, _pclass, _priv) \
- NETLIB_DEVICE_BASE(NETLIB_NAME(_name), NETLIB_NAME(_pclass), , _priv)
+ NETLIB_DEVICE_BASE(NETLIB_NAME(_name), NETLIB_NAME(_pclass), , _priv)
#define NETLIB_DEVICE(_name, _priv) \
- NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, , _priv)
+ NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, , _priv)
#define NETLIB_SUBDEVICE(_name, _priv) \
- class NETLIB_NAME(_name) : public netlist_device_t \
- { \
- public: \
- NETLIB_NAME(_name) () \
- : netlist_device_t() \
- { } \
- /*protected:*/ \
- ATTR_HOT void update(); \
- ATTR_HOT void start(); \
- ATTR_HOT void reset(); \
- public: \
- _priv \
- }
+ class NETLIB_NAME(_name) : public netlist_device_t \
+ { \
+ public: \
+ NETLIB_NAME(_name) () \
+ : netlist_device_t() \
+ { } \
+ /*protected:*/ \
+ ATTR_HOT void update(); \
+ ATTR_HOT void start(); \
+ ATTR_HOT void reset(); \
+ public: \
+ _priv \
+ }
#define NETLIB_DEVICE_WITH_PARAMS(_name, _priv) \
- NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, \
- ATTR_HOT void update_param(); \
- , _priv)
+ NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, \
+ ATTR_HOT void update_param(); \
+ , _priv)
#define NETLIB_DEVICE_WITH_PARAMS_DERIVED(_name, _pclass, _priv) \
- NETLIB_DEVICE_BASE(NETLIB_NAME(_name), NETLIB_NAME(_pclass), \
- ATTR_HOT void update_param(); \
- , _priv)
+ NETLIB_DEVICE_BASE(NETLIB_NAME(_name), NETLIB_NAME(_pclass), \
+ ATTR_HOT void update_param(); \
+ , _priv)
// ----------------------------------------------------------------------------------------
// forward definitions
@@ -255,12 +255,12 @@ class NETLIB_NAME(base_d_to_a_proxy);
struct netlist_logic_family_desc_t
{
- double m_low_thresh_V;
- double m_high_thresh_V;
- double m_low_V;
- double m_high_V;
- double m_R_low;
- double m_R_high;
+ double m_low_thresh_V;
+ double m_high_thresh_V;
+ double m_low_V;
+ double m_high_V;
+ double m_R_low;
+ double m_R_high;
};
/* Terminals inherit the family description from the netlist_device
@@ -278,69 +278,69 @@ extern netlist_logic_family_desc_t netlist_family_ttl;
class netlist_object_t
{
- NETLIST_PREVENT_COPYING(netlist_object_t)
+ NETLIST_PREVENT_COPYING(netlist_object_t)
public:
- enum type_t {
- TERMINAL = 0,
- INPUT = 1,
- OUTPUT = 2,
- PARAM = 3,
- NET = 4,
- DEVICE = 5,
- NETLIST = 6,
- };
- enum family_t {
- // Terminal families
- LOGIC = 1,
- ANALOG = 2,
- // Device families
- GENERIC = 3, // <== devices usually fall into this category
- RESISTOR = 4, // Resistor
- CAPACITOR = 5, // Capacitor
- DIODE = 6, // Diode
- BJT_SWITCH = 7, // BJT(Switch)
- VCVS = 8, // Voltage controlled voltage source
- VCCS = 9, // Voltage controlled voltage source
- BJT_EB = 10, // BJT(Ebers-Moll)
- GND = 11, // BJT(Ebers-Moll)
- };
-
- ATTR_COLD netlist_object_t(const type_t atype, const family_t afamily);
-
- virtual ~netlist_object_t();
-
- ATTR_COLD void init_object(netlist_base_t &nl, const pstring &aname);
- ATTR_COLD bool isInitalized() { return (m_netlist != NULL); }
-
- ATTR_COLD const pstring name() const;
-
- PSTATE_INTERFACE_DECL()
-
- ATTR_HOT inline const type_t type() const { return m_objtype; }
- ATTR_HOT inline const family_t family() const { return m_family; }
-
- ATTR_HOT inline const bool isType(const type_t atype) const { return (m_objtype == atype); }
- ATTR_HOT inline const bool isFamily(const family_t afamily) const { return (m_family == afamily); }
-
- ATTR_HOT inline netlist_base_t & RESTRICT netlist() { return *m_netlist; }
- ATTR_HOT inline const netlist_base_t & RESTRICT netlist() const { return *m_netlist; }
-
- ATTR_COLD void inline do_reset()
- {
- reset();
- }
+ enum type_t {
+ TERMINAL = 0,
+ INPUT = 1,
+ OUTPUT = 2,
+ PARAM = 3,
+ NET = 4,
+ DEVICE = 5,
+ NETLIST = 6,
+ };
+ enum family_t {
+ // Terminal families
+ LOGIC = 1,
+ ANALOG = 2,
+ // Device families
+ GENERIC = 3, // <== devices usually fall into this category
+ RESISTOR = 4, // Resistor
+ CAPACITOR = 5, // Capacitor
+ DIODE = 6, // Diode
+ BJT_SWITCH = 7, // BJT(Switch)
+ VCVS = 8, // Voltage controlled voltage source
+ VCCS = 9, // Voltage controlled voltage source
+ BJT_EB = 10, // BJT(Ebers-Moll)
+ GND = 11, // BJT(Ebers-Moll)
+ };
+
+ ATTR_COLD netlist_object_t(const type_t atype, const family_t afamily);
+
+ virtual ~netlist_object_t();
+
+ ATTR_COLD void init_object(netlist_base_t &nl, const pstring &aname);
+ ATTR_COLD bool isInitalized() { return (m_netlist != NULL); }
+
+ ATTR_COLD const pstring name() const;
+
+ PSTATE_INTERFACE_DECL()
+
+ ATTR_HOT inline const type_t type() const { return m_objtype; }
+ ATTR_HOT inline const family_t family() const { return m_family; }
+
+ ATTR_HOT inline const bool isType(const type_t atype) const { return (m_objtype == atype); }
+ ATTR_HOT inline const bool isFamily(const family_t afamily) const { return (m_family == afamily); }
+
+ ATTR_HOT inline netlist_base_t & RESTRICT netlist() { return *m_netlist; }
+ ATTR_HOT inline const netlist_base_t & RESTRICT netlist() const { return *m_netlist; }
+
+ ATTR_COLD void inline do_reset()
+ {
+ reset();
+ }
protected:
- ATTR_COLD virtual void reset() = 0;
- // must call parent save_register !
- ATTR_COLD virtual void save_register() { };
+ ATTR_COLD virtual void reset() = 0;
+ // must call parent save_register !
+ ATTR_COLD virtual void save_register() { };
private:
- pstring m_name;
- const type_t m_objtype;
- const family_t m_family;
- netlist_base_t * RESTRICT m_netlist;
+ pstring m_name;
+ const type_t m_objtype;
+ const family_t m_family;
+ netlist_base_t * RESTRICT m_netlist;
};
// ----------------------------------------------------------------------------------------
@@ -349,15 +349,15 @@ private:
class netlist_owned_object_t : public netlist_object_t
{
- NETLIST_PREVENT_COPYING(netlist_owned_object_t)
+ NETLIST_PREVENT_COPYING(netlist_owned_object_t)
public:
- ATTR_COLD netlist_owned_object_t(const type_t atype, const family_t afamily);
+ ATTR_COLD netlist_owned_object_t(const type_t atype, const family_t afamily);
- ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
+ ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
- ATTR_HOT inline netlist_core_device_t & RESTRICT netdev() const { return *m_netdev; }
+ ATTR_HOT inline netlist_core_device_t & RESTRICT netdev() const { return *m_netdev; }
private:
- netlist_core_device_t * RESTRICT m_netdev;
+ netlist_core_device_t * RESTRICT m_netdev;
};
// ----------------------------------------------------------------------------------------
@@ -366,53 +366,53 @@ private:
class netlist_core_terminal_t : public netlist_owned_object_t, public plinked_list_element<netlist_core_terminal_t>
{
- NETLIST_PREVENT_COPYING(netlist_core_terminal_t)
+ NETLIST_PREVENT_COPYING(netlist_core_terminal_t)
public:
- typedef netlist_list_t<netlist_core_terminal_t *> list_t;
+ typedef netlist_list_t<netlist_core_terminal_t *> list_t;
- /* needed here ... */
+ /* needed here ... */
- enum state_e {
- STATE_INP_PASSIVE = 0,
- STATE_INP_ACTIVE = 1,
- STATE_INP_HL = 2,
- STATE_INP_LH = 4,
- STATE_OUT = 128,
- STATE_NONEX = 256
- };
+ enum state_e {
+ STATE_INP_PASSIVE = 0,
+ STATE_INP_ACTIVE = 1,
+ STATE_INP_HL = 2,
+ STATE_INP_LH = 4,
+ STATE_OUT = 128,
+ STATE_NONEX = 256
+ };
- ATTR_COLD netlist_core_terminal_t(const type_t atype, const family_t afamily);
+ ATTR_COLD netlist_core_terminal_t(const type_t atype, const family_t afamily);
- //ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
+ //ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
- ATTR_COLD void set_net(netlist_net_t &anet);
- ATTR_COLD inline void clear_net() { m_net = NULL; }
- ATTR_HOT inline bool has_net() const { return (m_net != NULL); }
- ATTR_HOT inline const netlist_net_t & RESTRICT net() const { return *m_net;}
- ATTR_HOT inline netlist_net_t & RESTRICT net() { return *m_net;}
+ ATTR_COLD void set_net(netlist_net_t &anet);
+ ATTR_COLD inline void clear_net() { m_net = NULL; }
+ ATTR_HOT inline bool has_net() const { return (m_net != NULL); }
+ ATTR_HOT inline const netlist_net_t & RESTRICT net() const { return *m_net;}
+ ATTR_HOT inline netlist_net_t & RESTRICT net() { return *m_net;}
- ATTR_HOT inline const bool is_state(const state_e astate) const { return (m_state == astate); }
- ATTR_HOT inline const state_e state() const { return m_state; }
- ATTR_HOT inline void set_state(const state_e astate)
- {
- assert(astate != STATE_NONEX);
- m_state = astate;
- }
+ ATTR_HOT inline const bool is_state(const state_e astate) const { return (m_state == astate); }
+ ATTR_HOT inline const state_e state() const { return m_state; }
+ ATTR_HOT inline void set_state(const state_e astate)
+ {
+ assert(astate != STATE_NONEX);
+ m_state = astate;
+ }
- const netlist_logic_family_desc_t *m_family_desc;
+ const netlist_logic_family_desc_t *m_family_desc;
protected:
- ATTR_COLD virtual void save_register()
- {
- save(NAME(m_state));
- netlist_owned_object_t::save_register();
- }
+ ATTR_COLD virtual void save_register()
+ {
+ save(NAME(m_state));
+ netlist_owned_object_t::save_register();
+ }
private:
- netlist_net_t * RESTRICT m_net;
- state_e m_state;
+ netlist_net_t * RESTRICT m_net;
+ state_e m_state;
};
NETLIST_SAVE_TYPE(netlist_core_terminal_t::state_e, DT_INT);
@@ -420,41 +420,41 @@ NETLIST_SAVE_TYPE(netlist_core_terminal_t::state_e, DT_INT);
class netlist_terminal_t : public netlist_core_terminal_t
{
- NETLIST_PREVENT_COPYING(netlist_terminal_t)
+ NETLIST_PREVENT_COPYING(netlist_terminal_t)
public:
- ATTR_COLD netlist_terminal_t();
+ ATTR_COLD netlist_terminal_t();
- double m_Idr; // drive current
- double m_go; // conductance for Voltage from other term
- double m_gt; // conductance for total conductance
+ double m_Idr; // drive current
+ double m_go; // conductance for Voltage from other term
+ double m_gt; // conductance for total conductance
- ATTR_HOT inline void set(const double G)
- {
- m_Idr = 0;
- m_go = m_gt = G;
- }
+ ATTR_HOT inline void set(const double G)
+ {
+ m_Idr = 0;
+ m_go = m_gt = G;
+ }
- ATTR_HOT inline void set(const double GO, const double GT)
- {
- m_Idr = 0;
- m_go = GO;
- m_gt = GT;
- }
+ ATTR_HOT inline void set(const double GO, const double GT)
+ {
+ m_Idr = 0;
+ m_go = GO;
+ m_gt = GT;
+ }
- ATTR_HOT inline void set(const double GO, const double GT, const double I)
- {
- m_Idr = I;
- m_go = GO;
- m_gt = GT;
- }
+ ATTR_HOT inline void set(const double GO, const double GT, const double I)
+ {
+ m_Idr = I;
+ m_go = GO;
+ m_gt = GT;
+ }
- netlist_terminal_t *m_otherterm;
+ netlist_terminal_t *m_otherterm;
protected:
- ATTR_COLD virtual void save_register();
+ ATTR_COLD virtual void save_register();
- ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void reset();
};
@@ -467,23 +467,23 @@ class netlist_input_t : public netlist_core_terminal_t
public:
- ATTR_COLD netlist_input_t(const type_t atype, const family_t afamily)
- : netlist_core_terminal_t(atype, afamily)
- {
- set_state(STATE_INP_ACTIVE);
- }
+ ATTR_COLD netlist_input_t(const type_t atype, const family_t afamily)
+ : netlist_core_terminal_t(atype, afamily)
+ {
+ set_state(STATE_INP_ACTIVE);
+ }
- ATTR_HOT inline void inactivate();
- ATTR_HOT inline void activate();
- ATTR_HOT inline void activate_hl();
- ATTR_HOT inline void activate_lh();
+ ATTR_HOT inline void inactivate();
+ ATTR_HOT inline void activate();
+ ATTR_HOT inline void activate_hl();
+ ATTR_HOT inline void activate_lh();
protected:
- ATTR_COLD virtual void reset()
- {
- //netlist_core_terminal_t::reset();
- set_state(STATE_INP_ACTIVE);
- }
+ ATTR_COLD virtual void reset()
+ {
+ //netlist_core_terminal_t::reset();
+ set_state(STATE_INP_ACTIVE);
+ }
private:
};
@@ -495,13 +495,13 @@ private:
class netlist_logic_input_t : public netlist_input_t
{
public:
- ATTR_COLD netlist_logic_input_t()
- : netlist_input_t(INPUT, LOGIC)
- {
- }
+ ATTR_COLD netlist_logic_input_t()
+ : netlist_input_t(INPUT, LOGIC)
+ {
+ }
- ATTR_HOT inline const netlist_sig_t Q() const;
- ATTR_HOT inline const netlist_sig_t last_Q() const;
+ ATTR_HOT inline const netlist_sig_t Q() const;
+ ATTR_HOT inline const netlist_sig_t last_Q() const;
};
@@ -512,8 +512,8 @@ public:
class netlist_ttl_input_t : public netlist_logic_input_t
{
public:
- ATTR_COLD netlist_ttl_input_t()
- : netlist_logic_input_t() { }
+ ATTR_COLD netlist_ttl_input_t()
+ : netlist_logic_input_t() { }
};
// ----------------------------------------------------------------------------------------
@@ -523,10 +523,10 @@ public:
class netlist_analog_input_t : public netlist_input_t
{
public:
- ATTR_COLD netlist_analog_input_t()
- : netlist_input_t(INPUT, ANALOG) { }
+ ATTR_COLD netlist_analog_input_t()
+ : netlist_input_t(INPUT, ANALOG) { }
- ATTR_HOT inline const double Q_Analog() const;
+ ATTR_HOT inline const double Q_Analog() const;
};
//#define INPVAL(_x) (_x).Q()
@@ -537,120 +537,120 @@ public:
class netlist_net_t : public netlist_object_t
{
- NETLIST_PREVENT_COPYING(netlist_net_t)
+ NETLIST_PREVENT_COPYING(netlist_net_t)
public:
- typedef netlist_list_t<netlist_net_t *> list_t;
+ typedef netlist_list_t<netlist_net_t *> list_t;
- friend class NETLIB_NAME(mainclock);
- friend class netlist_matrix_solver_t;
- friend class netlist_logic_output_t;
- friend class netlist_analog_output_t;
- friend class netlist_setup_t;
+ friend class NETLIB_NAME(mainclock);
+ friend class netlist_matrix_solver_t;
+ friend class netlist_logic_output_t;
+ friend class netlist_analog_output_t;
+ friend class netlist_setup_t;
- ATTR_COLD netlist_net_t(const type_t atype, const family_t afamily);
- ATTR_COLD virtual ~netlist_net_t();
+ ATTR_COLD netlist_net_t(const type_t atype, const family_t afamily);
+ ATTR_COLD virtual ~netlist_net_t();
- ATTR_COLD void init_object(netlist_base_t &nl, const pstring &aname);
+ ATTR_COLD void init_object(netlist_base_t &nl, const pstring &aname);
- ATTR_COLD void register_con(netlist_core_terminal_t &terminal);
- ATTR_COLD void merge_net(netlist_net_t *othernet);
- ATTR_COLD void register_railterminal(netlist_output_t &mr);
+ ATTR_COLD void register_con(netlist_core_terminal_t &terminal);
+ ATTR_COLD void merge_net(netlist_net_t *othernet);
+ ATTR_COLD void register_railterminal(netlist_output_t &mr);
- ATTR_HOT inline void update_devs();
+ ATTR_HOT inline void update_devs();
- ATTR_HOT inline const netlist_time time() const { return m_time; }
- ATTR_HOT inline void set_time(const netlist_time ntime) { m_time = ntime; }
+ ATTR_HOT inline const netlist_time time() const { return m_time; }
+ ATTR_HOT inline void set_time(const netlist_time ntime) { m_time = ntime; }
- ATTR_HOT inline bool isRailNet() const { return !(m_railterminal == NULL); }
- ATTR_HOT inline const netlist_core_terminal_t & RESTRICT railterminal() const { return *m_railterminal; }
+ ATTR_HOT inline bool isRailNet() const { return !(m_railterminal == NULL); }
+ ATTR_HOT inline const netlist_core_terminal_t & RESTRICT railterminal() const { return *m_railterminal; }
- /* Everything below is used by the logic subsystem */
- ATTR_HOT void inc_active(netlist_core_terminal_t &term);
- ATTR_HOT void dec_active(netlist_core_terminal_t &term);
+ /* Everything below is used by the logic subsystem */
+ ATTR_HOT void inc_active(netlist_core_terminal_t &term);
+ ATTR_HOT void dec_active(netlist_core_terminal_t &term);
- ATTR_HOT inline const netlist_sig_t Q() const
- {
- assert(family() == LOGIC);
- return m_cur_Q;
- }
+ ATTR_HOT inline const netlist_sig_t Q() const
+ {
+ assert(family() == LOGIC);
+ return m_cur_Q;
+ }
- ATTR_HOT inline const netlist_sig_t last_Q() const
- {
- assert(family() == LOGIC);
- return m_last_Q;
- }
+ ATTR_HOT inline const netlist_sig_t last_Q() const
+ {
+ assert(family() == LOGIC);
+ return m_last_Q;
+ }
- ATTR_HOT inline const netlist_sig_t new_Q() const
- {
- assert(family() == LOGIC);
- return m_new_Q;
- }
+ ATTR_HOT inline const netlist_sig_t new_Q() const
+ {
+ assert(family() == LOGIC);
+ return m_new_Q;
+ }
- ATTR_HOT inline const double Q_Analog() const
- {
- //assert(object_type(SIGNAL_MASK) == SIGNAL_ANALOG);
- assert(family() == ANALOG);
- return m_cur_Analog;
- }
+ ATTR_HOT inline const double Q_Analog() const
+ {
+ //assert(object_type(SIGNAL_MASK) == SIGNAL_ANALOG);
+ assert(family() == ANALOG);
+ return m_cur_Analog;
+ }
- ATTR_HOT inline void push_to_queue(const netlist_time delay);
- ATTR_HOT bool inline is_queued() const { return m_in_queue == 1; }
+ ATTR_HOT inline void push_to_queue(const netlist_time delay);
+ ATTR_HOT bool inline is_queued() const { return m_in_queue == 1; }
- /* internal state support
- * FIXME: get rid of this and implement export/import in MAME
- */
- ATTR_COLD inline netlist_sig_t &Q_state_ptr()
- {
- assert(family() == LOGIC);
- return m_cur_Q;
- }
+ /* internal state support
+ * FIXME: get rid of this and implement export/import in MAME
+ */
+ ATTR_COLD inline netlist_sig_t &Q_state_ptr()
+ {
+ assert(family() == LOGIC);
+ return m_cur_Q;
+ }
- ATTR_COLD inline double &Q_Analog_state_ptr()
- {
- //assert(object_type(SIGNAL_MASK) == SIGNAL_ANALOG);
- assert(family() == ANALOG);
- return m_cur_Analog;
- }
+ ATTR_COLD inline double &Q_Analog_state_ptr()
+ {
+ //assert(object_type(SIGNAL_MASK) == SIGNAL_ANALOG);
+ assert(family() == ANALOG);
+ return m_cur_Analog;
+ }
- ATTR_HOT inline int num_cons() const { return m_num_cons; }
+ ATTR_HOT inline int num_cons() const { return m_num_cons; }
- // m_terms is only used by analog subsystem
- typedef netlist_list_t<netlist_terminal_t *> terminal_list_t;
+ // m_terms is only used by analog subsystem
+ typedef netlist_list_t<netlist_terminal_t *> terminal_list_t;
- terminal_list_t m_terms;
- terminal_list_t m_rails;
- netlist_matrix_solver_t *m_solver;
- netlist_core_terminal_t * RESTRICT m_railterminal;
+ terminal_list_t m_terms;
+ terminal_list_t m_rails;
+ netlist_matrix_solver_t *m_solver;
+ netlist_core_terminal_t * RESTRICT m_railterminal;
- ATTR_HOT void solve();
+ ATTR_HOT void solve();
- netlist_list_t<netlist_core_terminal_t *> m_registered; // save post-start m_list ...
- plinked_list<netlist_core_terminal_t> m_list;
+ netlist_list_t<netlist_core_terminal_t *> m_registered; // save post-start m_list ...
+ plinked_list<netlist_core_terminal_t> m_list;
- ATTR_COLD void rebuild_list(); /* rebuild m_list after a load */
+ ATTR_COLD void rebuild_list(); /* rebuild m_list after a load */
protected: //FIXME: needed by current solver code
- UINT16 m_num_cons;
+ UINT16 m_num_cons;
- ATTR_COLD virtual void save_register();
- ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void save_register();
+ ATTR_COLD virtual void reset();
private:
- netlist_sig_t m_new_Q;
- netlist_sig_t m_cur_Q;
- netlist_sig_t m_last_Q;
+ netlist_sig_t m_new_Q;
+ netlist_sig_t m_cur_Q;
+ netlist_sig_t m_last_Q;
- netlist_time m_time;
- INT32 m_active;
- UINT8 m_in_queue; /* 0: not in queue, 1: in queue, 2: last was taken */
+ netlist_time m_time;
+ INT32 m_active;
+ UINT8 m_in_queue; /* 0: not in queue, 1: in queue, 2: last was taken */
public:
- double m_last_Analog;
- double m_cur_Analog;
- double m_new_Analog;
+ double m_last_Analog;
+ double m_cur_Analog;
+ double m_new_Analog;
};
@@ -661,74 +661,74 @@ public:
class netlist_output_t : public netlist_core_terminal_t
{
- NETLIST_PREVENT_COPYING(netlist_output_t)
+ NETLIST_PREVENT_COPYING(netlist_output_t)
public:
- ATTR_COLD netlist_output_t(const type_t atype, const family_t afamily);
- ATTR_COLD virtual ~netlist_output_t() {}
+ ATTR_COLD netlist_output_t(const type_t atype, const family_t afamily);
+ ATTR_COLD virtual ~netlist_output_t() {}
- ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
- ATTR_COLD virtual void reset()
- {
- //netlist_core_terminal_t::reset();
- set_state(STATE_OUT);
- }
+ ATTR_COLD void init_object(netlist_core_device_t &dev, const pstring &aname);
+ ATTR_COLD virtual void reset()
+ {
+ //netlist_core_terminal_t::reset();
+ set_state(STATE_OUT);
+ }
private:
- netlist_net_t m_my_net;
+ netlist_net_t m_my_net;
};
class netlist_logic_output_t : public netlist_output_t
{
- NETLIST_PREVENT_COPYING(netlist_logic_output_t)
+ NETLIST_PREVENT_COPYING(netlist_logic_output_t)
public:
- ATTR_COLD netlist_logic_output_t();
+ ATTR_COLD netlist_logic_output_t();
- ATTR_COLD void initial(const netlist_sig_t val);
+ ATTR_COLD void initial(const netlist_sig_t val);
- ATTR_COLD bool has_proxy() const { return (m_proxy != NULL); }
- ATTR_COLD nld_base_d_to_a_proxy *get_proxy() const { return m_proxy; }
- ATTR_COLD void set_proxy(nld_base_d_to_a_proxy *proxy) { m_proxy = proxy; }
+ ATTR_COLD bool has_proxy() const { return (m_proxy != NULL); }
+ ATTR_COLD nld_base_d_to_a_proxy *get_proxy() const { return m_proxy; }
+ ATTR_COLD void set_proxy(nld_base_d_to_a_proxy *proxy) { m_proxy = proxy; }
- ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time delay)
- {
- if (EXPECTED(newQ != net().m_new_Q))
- {
- net().m_new_Q = newQ;
- net().push_to_queue(delay);
- }
- }
+ ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time delay)
+ {
+ if (EXPECTED(newQ != net().m_new_Q))
+ {
+ net().m_new_Q = newQ;
+ net().push_to_queue(delay);
+ }
+ }
private:
- nld_base_d_to_a_proxy *m_proxy;
+ nld_base_d_to_a_proxy *m_proxy;
};
class netlist_ttl_output_t : public netlist_logic_output_t
{
public:
- ATTR_COLD netlist_ttl_output_t();
+ ATTR_COLD netlist_ttl_output_t();
};
class netlist_analog_output_t : public netlist_output_t
{
- NETLIST_PREVENT_COPYING(netlist_analog_output_t)
+ NETLIST_PREVENT_COPYING(netlist_analog_output_t)
public:
- ATTR_COLD netlist_analog_output_t();
+ ATTR_COLD netlist_analog_output_t();
- ATTR_COLD void initial(const double val);
+ ATTR_COLD void initial(const double val);
- ATTR_HOT inline void set_Q(const double newQ, const netlist_time delay)
- {
- if (newQ != net().m_new_Analog)
- {
- net().m_new_Analog = newQ;
- net().push_to_queue(delay);
- }
- }
+ ATTR_HOT inline void set_Q(const double newQ, const netlist_time delay)
+ {
+ if (newQ != net().m_new_Analog)
+ {
+ net().m_new_Analog = newQ;
+ net().push_to_queue(delay);
+ }
+ }
};
@@ -738,110 +738,110 @@ public:
class netlist_param_t : public netlist_owned_object_t
{
- NETLIST_PREVENT_COPYING(netlist_param_t)
+ NETLIST_PREVENT_COPYING(netlist_param_t)
public:
- enum param_type_t {
- MODEL,
- STRING,
- DOUBLE,
- INTEGER,
- LOGIC
- };
+ enum param_type_t {
+ MODEL,
+ STRING,
+ DOUBLE,
+ INTEGER,
+ LOGIC
+ };
- ATTR_COLD netlist_param_t(const param_type_t atype);
+ ATTR_COLD netlist_param_t(const param_type_t atype);
- ATTR_HOT inline const param_type_t param_type() const { return m_param_type; }
+ ATTR_HOT inline const param_type_t param_type() const { return m_param_type; }
protected:
- ATTR_COLD virtual void reset() { }
+ ATTR_COLD virtual void reset() { }
private:
- const param_type_t m_param_type;
+ const param_type_t m_param_type;
};
class netlist_param_double_t : public netlist_param_t
{
- NETLIST_PREVENT_COPYING(netlist_param_double_t)
+ NETLIST_PREVENT_COPYING(netlist_param_double_t)
public:
- ATTR_COLD netlist_param_double_t();
+ ATTR_COLD netlist_param_double_t();
- ATTR_HOT inline void setTo(const double param);
- ATTR_COLD inline void initial(const double val) { m_param = val; }
- ATTR_HOT inline const double Value() const { return m_param; }
+ ATTR_HOT inline void setTo(const double param);
+ ATTR_COLD inline void initial(const double val) { m_param = val; }
+ ATTR_HOT inline const double Value() const { return m_param; }
protected:
- ATTR_COLD virtual void save_register()
- {
- save(NAME(m_param));
- netlist_param_t::save_register();
- }
+ ATTR_COLD virtual void save_register()
+ {
+ save(NAME(m_param));
+ netlist_param_t::save_register();
+ }
private:
- double m_param;
+ double m_param;
};
class netlist_param_int_t : public netlist_param_t
{
- NETLIST_PREVENT_COPYING(netlist_param_int_t)
+ NETLIST_PREVENT_COPYING(netlist_param_int_t)
public:
- ATTR_COLD netlist_param_int_t();
+ ATTR_COLD netlist_param_int_t();
- ATTR_HOT inline void setTo(const int param);
- ATTR_COLD inline void initial(const int val) { m_param = val; }
+ ATTR_HOT inline void setTo(const int param);
+ ATTR_COLD inline void initial(const int val) { m_param = val; }
- ATTR_HOT inline const int Value() const { return m_param; }
+ ATTR_HOT inline const int Value() const { return m_param; }
protected:
- ATTR_COLD virtual void save_register()
- {
- save(NAME(m_param));
- netlist_param_t::save_register();
- }
+ ATTR_COLD virtual void save_register()
+ {
+ save(NAME(m_param));
+ netlist_param_t::save_register();
+ }
private:
- int m_param;
+ int m_param;
};
class netlist_param_logic_t : public netlist_param_int_t
{
- NETLIST_PREVENT_COPYING(netlist_param_logic_t)
+ NETLIST_PREVENT_COPYING(netlist_param_logic_t)
public:
- ATTR_COLD netlist_param_logic_t();
+ ATTR_COLD netlist_param_logic_t();
};
class netlist_param_str_t : public netlist_param_t
{
- NETLIST_PREVENT_COPYING(netlist_param_str_t)
+ NETLIST_PREVENT_COPYING(netlist_param_str_t)
public:
- ATTR_COLD netlist_param_str_t();
+ ATTR_COLD netlist_param_str_t();
- ATTR_HOT inline void setTo(const pstring &param);
- ATTR_COLD inline void initial(const pstring &val) { m_param = val; }
+ ATTR_HOT inline void setTo(const pstring &param);
+ ATTR_COLD inline void initial(const pstring &val) { m_param = val; }
- ATTR_HOT inline const pstring &Value() const { return m_param; }
+ ATTR_HOT inline const pstring &Value() const { return m_param; }
private:
- pstring m_param;
+ pstring m_param;
};
class netlist_param_model_t : public netlist_param_t
{
- NETLIST_PREVENT_COPYING(netlist_param_model_t)
+ NETLIST_PREVENT_COPYING(netlist_param_model_t)
public:
- ATTR_COLD netlist_param_model_t();
+ ATTR_COLD netlist_param_model_t();
- ATTR_COLD inline void initial(const pstring &val) { m_param = val; }
+ ATTR_COLD inline void initial(const pstring &val) { m_param = val; }
- ATTR_HOT inline const pstring &Value() const { return m_param; }
+ ATTR_HOT inline const pstring &Value() const { return m_param; }
- /* these should be cached! */
- ATTR_COLD double model_value(const pstring &entity, const double defval = 0.0) const;
- ATTR_COLD const pstring model_type() const;
+ /* these should be cached! */
+ ATTR_COLD double model_value(const pstring &entity, const double defval = 0.0) const;
+ ATTR_COLD const pstring model_type() const;
private:
- pstring m_param;
+ pstring m_param;
};
// ----------------------------------------------------------------------------------------
@@ -850,90 +850,90 @@ private:
class netlist_core_device_t : public netlist_object_t
{
- NETLIST_PREVENT_COPYING(netlist_core_device_t)
+ NETLIST_PREVENT_COPYING(netlist_core_device_t)
public:
- typedef netlist_list_t<netlist_core_device_t *> list_t;
+ typedef netlist_list_t<netlist_core_device_t *> list_t;
- //ATTR_COLD netlist_core_device_t();
- ATTR_COLD netlist_core_device_t(const family_t afamily);
- ATTR_COLD netlist_core_device_t(const netlist_logic_family_desc_t *family_desc);
+ //ATTR_COLD netlist_core_device_t();
+ ATTR_COLD netlist_core_device_t(const family_t afamily);
+ ATTR_COLD netlist_core_device_t(const netlist_logic_family_desc_t *family_desc);
- ATTR_COLD virtual ~netlist_core_device_t();
+ ATTR_COLD virtual ~netlist_core_device_t();
- ATTR_COLD virtual void init(netlist_base_t &anetlist, const pstring &name);
- ATTR_HOT virtual void update_param() {}
+ ATTR_COLD virtual void init(netlist_base_t &anetlist, const pstring &name);
+ ATTR_HOT virtual void update_param() {}
- ATTR_HOT inline void update_dev()
- {
+ ATTR_HOT inline void update_dev()
+ {
#if USE_PMFDELEGATES
- static_update(this);
+ static_update(this);
#else
- update();
+ update();
#endif
- }
- ATTR_HOT inline void start_dev()
- {
- start();
- }
+ }
+ ATTR_HOT inline void start_dev()
+ {
+ start();
+ }
- ATTR_HOT const netlist_sig_t INPLOGIC_PASSIVE(netlist_logic_input_t &inp);
+ ATTR_HOT const netlist_sig_t INPLOGIC_PASSIVE(netlist_logic_input_t &inp);
- ATTR_HOT inline const netlist_sig_t INPLOGIC(const netlist_logic_input_t &inp) const
- {
- assert(inp.state() != netlist_input_t::STATE_INP_PASSIVE);
- return inp.Q();
- }
+ ATTR_HOT inline const netlist_sig_t INPLOGIC(const netlist_logic_input_t &inp) const
+ {
+ assert(inp.state() != netlist_input_t::STATE_INP_PASSIVE);
+ return inp.Q();
+ }
- ATTR_HOT inline void OUTLOGIC(netlist_logic_output_t &out, const netlist_sig_t val, const netlist_time delay)
- {
- out.set_Q(val, delay);
- }
+ ATTR_HOT inline void OUTLOGIC(netlist_logic_output_t &out, const netlist_sig_t val, const netlist_time delay)
+ {
+ out.set_Q(val, delay);
+ }
- ATTR_HOT inline bool INP_HL(const netlist_logic_input_t &inp) const
- {
- return ((inp.last_Q() & !inp.Q()) == 1);
- }
+ ATTR_HOT inline bool INP_HL(const netlist_logic_input_t &inp) const
+ {
+ return ((inp.last_Q() & !inp.Q()) == 1);
+ }
- ATTR_HOT inline bool INP_LH(const netlist_logic_input_t &inp) const
- {
- return ((!inp.last_Q() & inp.Q()) == 1);
- }
+ ATTR_HOT inline bool INP_LH(const netlist_logic_input_t &inp) const
+ {
+ return ((!inp.last_Q() & inp.Q()) == 1);
+ }
- ATTR_HOT inline const double INPANALOG(const netlist_analog_input_t &inp) const { return inp.Q_Analog(); }
+ ATTR_HOT inline const double INPANALOG(const netlist_analog_input_t &inp) const { return inp.Q_Analog(); }
- ATTR_HOT inline const double TERMANALOG(const netlist_terminal_t &term) const { return term.net().Q_Analog(); }
+ ATTR_HOT inline const double TERMANALOG(const netlist_terminal_t &term) const { return term.net().Q_Analog(); }
- ATTR_HOT inline void OUTANALOG(netlist_analog_output_t &out, const double val, const netlist_time delay)
- {
- out.set_Q(val, delay);
- }
+ ATTR_HOT inline void OUTANALOG(netlist_analog_output_t &out, const double val, const netlist_time delay)
+ {
+ out.set_Q(val, delay);
+ }
- ATTR_HOT virtual void inc_active() { }
+ ATTR_HOT virtual void inc_active() { }
- ATTR_HOT virtual void dec_active() { }
+ ATTR_HOT virtual void dec_active() { }
- ATTR_HOT virtual void step_time(const double st) { }
- ATTR_HOT virtual void update_terminals() { }
+ ATTR_HOT virtual void step_time(const double st) { }
+ ATTR_HOT virtual void update_terminals() { }
#if (NL_KEEP_STATISTICS)
- /* stats */
- osd_ticks_t total_time;
- INT32 stat_count;
+ /* stats */
+ osd_ticks_t total_time;
+ INT32 stat_count;
#endif
#if USE_PMFDELEGATES
- net_update_delegate static_update;
+ net_update_delegate static_update;
#endif
- const netlist_logic_family_desc_t *m_family_desc;
+ const netlist_logic_family_desc_t *m_family_desc;
protected:
- ATTR_HOT virtual void update() { }
- ATTR_COLD virtual void start() { }
+ ATTR_HOT virtual void update() { }
+ ATTR_COLD virtual void start() { }
private:
};
@@ -941,36 +941,36 @@ private:
class netlist_device_t : public netlist_core_device_t
{
- NETLIST_PREVENT_COPYING(netlist_device_t)
+ NETLIST_PREVENT_COPYING(netlist_device_t)
public:
- ATTR_COLD netlist_device_t();
- ATTR_COLD netlist_device_t(const family_t afamily);
+ ATTR_COLD netlist_device_t();
+ ATTR_COLD netlist_device_t(const family_t afamily);
- ATTR_COLD virtual ~netlist_device_t();
+ ATTR_COLD virtual ~netlist_device_t();
- ATTR_COLD virtual void init(netlist_base_t &anetlist, const pstring &name);
+ ATTR_COLD virtual void init(netlist_base_t &anetlist, const pstring &name);
- ATTR_COLD netlist_setup_t &setup();
+ ATTR_COLD netlist_setup_t &setup();
- ATTR_COLD void register_sub(netlist_device_t &dev, const pstring &name);
- ATTR_COLD void register_subalias(const pstring &name, netlist_core_terminal_t &term);
- ATTR_COLD void register_terminal(const pstring &name, netlist_terminal_t &port);
- ATTR_COLD void register_output(const pstring &name, netlist_output_t &out);
- ATTR_COLD void register_input(const pstring &name, netlist_input_t &in);
+ ATTR_COLD void register_sub(netlist_device_t &dev, const pstring &name);
+ ATTR_COLD void register_subalias(const pstring &name, netlist_core_terminal_t &term);
+ ATTR_COLD void register_terminal(const pstring &name, netlist_terminal_t &port);
+ ATTR_COLD void register_output(const pstring &name, netlist_output_t &out);
+ ATTR_COLD void register_input(const pstring &name, netlist_input_t &in);
- ATTR_COLD void connect(netlist_core_terminal_t &t1, netlist_core_terminal_t &t2);
+ ATTR_COLD void connect(netlist_core_terminal_t &t1, netlist_core_terminal_t &t2);
- netlist_list_t<pstring, 20> m_terminals;
+ netlist_list_t<pstring, 20> m_terminals;
protected:
- ATTR_HOT virtual void update() { }
- ATTR_HOT virtual void start() { }
- ATTR_HOT virtual void update_terminals() { }
+ ATTR_HOT virtual void update() { }
+ ATTR_HOT virtual void start() { }
+ ATTR_HOT virtual void update_terminals() { }
- template <class C, class T>
- ATTR_COLD void register_param(const pstring &sname, C &param, const T initialVal);
+ template <class C, class T>
+ ATTR_COLD void register_param(const pstring &sname, C &param, const T initialVal);
private:
};
@@ -981,23 +981,23 @@ private:
// ----------------------------------------------------------------------------------------
class netlist_queue_t : public netlist_timed_queue<netlist_net_t *, netlist_time, 512>,
- public pstate_callback_t
+ public pstate_callback_t
{
public:
- netlist_queue_t(netlist_base_t &nl);
+ netlist_queue_t(netlist_base_t &nl);
- void register_state(pstate_manager_t &manager, const pstring &module);
- void on_pre_save();
- void on_post_load();
+ void register_state(pstate_manager_t &manager, const pstring &module);
+ void on_pre_save();
+ void on_post_load();
- pstate_callback_t &callback() { return *this; }
+ pstate_callback_t &callback() { return *this; }
private:
- netlist_base_t &m_netlist;
- int m_qsize;
- netlist_time::INTERNALTYPE m_times[512];
- char m_name[512][64];
+ netlist_base_t &m_netlist;
+ int m_qsize;
+ netlist_time::INTERNALTYPE m_times[512];
+ char m_name[512][64];
};
// ----------------------------------------------------------------------------------------
@@ -1009,121 +1009,121 @@ typedef tagmap_t<netlist_device_t *, 393> tagmap_devices_t;
class netlist_base_t : public netlist_object_t, public pstate_manager_t
{
- NETLIST_PREVENT_COPYING(netlist_base_t)
+ NETLIST_PREVENT_COPYING(netlist_base_t)
public:
- netlist_base_t();
- virtual ~netlist_base_t();
-
- ATTR_COLD void start();
-
- ATTR_HOT inline const netlist_queue_t &queue() const { return m_queue; }
- ATTR_HOT inline netlist_queue_t &queue() { return m_queue; }
- ATTR_HOT inline const netlist_time time() const { return m_time; }
- ATTR_HOT inline NETLIB_NAME(solver) *solver() const { return m_solver; }
- ATTR_HOT inline NETLIB_NAME(gnd) *gnd() const { return m_gnd; }
- ATTR_HOT const double gmin() const;
-
- ATTR_HOT inline void push_to_queue(netlist_net_t *out, const netlist_time attime)
- {
- m_queue.push(netlist_queue_t::entry_t(attime, out));
- }
-
- ATTR_HOT void process_queue(const netlist_time delta);
- ATTR_HOT inline void abort_current_queue_slice() { m_stop = netlist_time::zero; }
-
- ATTR_COLD void rebuild_lists(); /* must be called after post_load ! */
-
- ATTR_COLD void set_setup(netlist_setup_t *asetup) { m_setup = asetup; }
- ATTR_COLD netlist_setup_t &setup() { return *m_setup; }
-
- ATTR_COLD netlist_net_t *find_net(const pstring &name);
-
- ATTR_COLD void error(const char *format, ...) const ATTR_PRINTF(2,3);
- ATTR_COLD void warning(const char *format, ...) const ATTR_PRINTF(2,3);
- ATTR_COLD void log(const char *format, ...) const ATTR_PRINTF(2,3);
-
- template<class _C>
- netlist_list_t<_C *> get_device_list()
- {
- netlist_list_t<_C *> tmp;
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- _C *dev = dynamic_cast<_C *>(entry->object());
- if (dev != NULL)
- tmp.add(dev);
- }
- return tmp;
- }
-
- template<class _C>
- _C *get_first_device()
- {
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- _C *dev = dynamic_cast<_C *>(entry->object());
- if (dev != NULL)
- return dev;
- }
- return NULL;
- }
-
- template<class _C>
- _C *get_single_device(const char *classname)
- {
- _C *ret = NULL;
- for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
- {
- _C *dev = dynamic_cast<_C *>(entry->object());
- if (dev != NULL)
- {
- if (ret != NULL)
- this->error("more than one %s device found", classname);
- else
- ret = dev;
- }
- }
- return ret;
- }
-
- tagmap_devices_t m_devices;
- netlist_net_t::list_t m_nets;
+ netlist_base_t();
+ virtual ~netlist_base_t();
+
+ ATTR_COLD void start();
+
+ ATTR_HOT inline const netlist_queue_t &queue() const { return m_queue; }
+ ATTR_HOT inline netlist_queue_t &queue() { return m_queue; }
+ ATTR_HOT inline const netlist_time time() const { return m_time; }
+ ATTR_HOT inline NETLIB_NAME(solver) *solver() const { return m_solver; }
+ ATTR_HOT inline NETLIB_NAME(gnd) *gnd() const { return m_gnd; }
+ ATTR_HOT const double gmin() const;
+
+ ATTR_HOT inline void push_to_queue(netlist_net_t *out, const netlist_time attime)
+ {
+ m_queue.push(netlist_queue_t::entry_t(attime, out));
+ }
+
+ ATTR_HOT void process_queue(const netlist_time delta);
+ ATTR_HOT inline void abort_current_queue_slice() { m_stop = netlist_time::zero; }
+
+ ATTR_COLD void rebuild_lists(); /* must be called after post_load ! */
+
+ ATTR_COLD void set_setup(netlist_setup_t *asetup) { m_setup = asetup; }
+ ATTR_COLD netlist_setup_t &setup() { return *m_setup; }
+
+ ATTR_COLD netlist_net_t *find_net(const pstring &name);
+
+ ATTR_COLD void error(const char *format, ...) const ATTR_PRINTF(2,3);
+ ATTR_COLD void warning(const char *format, ...) const ATTR_PRINTF(2,3);
+ ATTR_COLD void log(const char *format, ...) const ATTR_PRINTF(2,3);
+
+ template<class _C>
+ netlist_list_t<_C *> get_device_list()
+ {
+ netlist_list_t<_C *> tmp;
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ _C *dev = dynamic_cast<_C *>(entry->object());
+ if (dev != NULL)
+ tmp.add(dev);
+ }
+ return tmp;
+ }
+
+ template<class _C>
+ _C *get_first_device()
+ {
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ _C *dev = dynamic_cast<_C *>(entry->object());
+ if (dev != NULL)
+ return dev;
+ }
+ return NULL;
+ }
+
+ template<class _C>
+ _C *get_single_device(const char *classname)
+ {
+ _C *ret = NULL;
+ for (tagmap_devices_t::entry_t *entry = m_devices.first(); entry != NULL; entry = m_devices.next(entry))
+ {
+ _C *dev = dynamic_cast<_C *>(entry->object());
+ if (dev != NULL)
+ {
+ if (ret != NULL)
+ this->error("more than one %s device found", classname);
+ else
+ ret = dev;
+ }
+ }
+ return ret;
+ }
+
+ tagmap_devices_t m_devices;
+ netlist_net_t::list_t m_nets;
protected:
- enum loglevel_e
- {
- NL_ERROR,
- NL_WARNING,
- NL_LOG,
- };
+ enum loglevel_e
+ {
+ NL_ERROR,
+ NL_WARNING,
+ NL_LOG,
+ };
- // any derived netlist must override this ...
- ATTR_COLD virtual void verror(const loglevel_e level,
- const char *format, va_list ap) const = 0;
+ // any derived netlist must override this ...
+ ATTR_COLD virtual void verror(const loglevel_e level,
+ const char *format, va_list ap) const = 0;
- /* from netlist_object */
- ATTR_COLD virtual void reset();
- ATTR_COLD virtual void save_register();
+ /* from netlist_object */
+ ATTR_COLD virtual void reset();
+ ATTR_COLD virtual void save_register();
#if (NL_KEEP_STATISTICS)
- // performance
- int m_perf_out_processed;
- int m_perf_inp_processed;
- int m_perf_inp_active;
+ // performance
+ int m_perf_out_processed;
+ int m_perf_inp_processed;
+ int m_perf_inp_active;
#endif
private:
- netlist_time m_stop; // target time for current queue processing
+ netlist_time m_stop; // target time for current queue processing
- netlist_time m_time;
- netlist_queue_t m_queue;
+ netlist_time m_time;
+ netlist_queue_t m_queue;
- NETLIB_NAME(mainclock) * m_mainclock;
- NETLIB_NAME(solver) * m_solver;
- NETLIB_NAME(gnd) * m_gnd;
+ NETLIB_NAME(mainclock) * m_mainclock;
+ NETLIB_NAME(solver) * m_solver;
+ NETLIB_NAME(gnd) * m_gnd;
- netlist_setup_t *m_setup;
+ netlist_setup_t *m_setup;
};
// ----------------------------------------------------------------------------------------
@@ -1134,94 +1134,94 @@ PSTATE_INTERFACE(netlist_object_t, m_netlist, name())
ATTR_HOT inline void netlist_param_str_t::setTo(const pstring &param)
{
- m_param = param;
- netdev().update_param();
+ m_param = param;
+ netdev().update_param();
}
ATTR_HOT inline void netlist_param_int_t::setTo(const int param)
{
- if (m_param != param)
- {
- m_param = param;
- netdev().update_param();
- }
+ if (m_param != param)
+ {
+ m_param = param;
+ netdev().update_param();
+ }
}
ATTR_HOT inline void netlist_param_double_t::setTo(const double param)
{
- if (m_param != param)
- {
- m_param = param;
- netdev().update_param();
- }
+ if (m_param != param)
+ {
+ m_param = param;
+ netdev().update_param();
+ }
}
ATTR_HOT inline void netlist_input_t::inactivate()
{
- if (EXPECTED(!is_state(STATE_INP_PASSIVE)))
- {
- set_state(STATE_INP_PASSIVE);
- net().dec_active(*this);
- }
+ if (EXPECTED(!is_state(STATE_INP_PASSIVE)))
+ {
+ set_state(STATE_INP_PASSIVE);
+ net().dec_active(*this);
+ }
}
ATTR_HOT inline void netlist_input_t::activate()
{
- if (is_state(STATE_INP_PASSIVE))
- {
- net().inc_active(*this);
- set_state(STATE_INP_ACTIVE);
- }
+ if (is_state(STATE_INP_PASSIVE))
+ {
+ net().inc_active(*this);
+ set_state(STATE_INP_ACTIVE);
+ }
}
ATTR_HOT inline void netlist_input_t::activate_hl()
{
- if (is_state(STATE_INP_PASSIVE))
- {
- net().inc_active(*this);
- set_state(STATE_INP_HL);
- }
+ if (is_state(STATE_INP_PASSIVE))
+ {
+ net().inc_active(*this);
+ set_state(STATE_INP_HL);
+ }
}
ATTR_HOT inline void netlist_input_t::activate_lh()
{
- if (is_state(STATE_INP_PASSIVE))
- {
- net().inc_active(*this);
- set_state(STATE_INP_LH);
- }
+ if (is_state(STATE_INP_PASSIVE))
+ {
+ net().inc_active(*this);
+ set_state(STATE_INP_LH);
+ }
}
ATTR_HOT inline void netlist_net_t::push_to_queue(const netlist_time delay)
{
- //if (UNEXPECTED(m_num_cons == 0 || is_queued()))
- if (!is_queued())
- {
- m_time = netlist().time() + delay;
- m_in_queue = (m_active > 0); /* queued ? */
- if (EXPECTED(m_in_queue))
- {
- netlist().push_to_queue(this, m_time);
- }
- }
+ //if (UNEXPECTED(m_num_cons == 0 || is_queued()))
+ if (!is_queued())
+ {
+ m_time = netlist().time() + delay;
+ m_in_queue = (m_active > 0); /* queued ? */
+ if (EXPECTED(m_in_queue))
+ {
+ netlist().push_to_queue(this, m_time);
+ }
+ }
}
ATTR_HOT inline const netlist_sig_t netlist_logic_input_t::Q() const
{
- return net().Q();
+ return net().Q();
}
ATTR_HOT inline const netlist_sig_t netlist_logic_input_t::last_Q() const
{
- return net().last_Q();
+ return net().last_Q();
}
ATTR_HOT inline const double netlist_analog_input_t::Q_Analog() const
{
- return net().Q_Analog();
+ return net().Q_Analog();
}
@@ -1231,71 +1231,71 @@ ATTR_HOT inline const double netlist_analog_input_t::Q_Analog() const
class net_device_t_base_factory
{
- NETLIST_PREVENT_COPYING(net_device_t_base_factory)
+ NETLIST_PREVENT_COPYING(net_device_t_base_factory)
public:
- ATTR_COLD net_device_t_base_factory(const pstring &name, const pstring &classname,
- const pstring &def_param)
- : m_name(name), m_classname(classname), m_def_param(def_param)
- {}
+ ATTR_COLD net_device_t_base_factory(const pstring &name, const pstring &classname,
+ const pstring &def_param)
+ : m_name(name), m_classname(classname), m_def_param(def_param)
+ {}
- ATTR_COLD virtual ~net_device_t_base_factory() {}
+ ATTR_COLD virtual ~net_device_t_base_factory() {}
- ATTR_COLD virtual netlist_device_t *Create() const = 0;
+ ATTR_COLD virtual netlist_device_t *Create() const = 0;
- ATTR_COLD const pstring &name() const { return m_name; }
- ATTR_COLD const pstring &classname() const { return m_classname; }
- ATTR_COLD const pstring &param_desc() const { return m_def_param; }
- ATTR_COLD const nl_util::pstring_list term_param_list();
- ATTR_COLD const nl_util::pstring_list def_params();
+ ATTR_COLD const pstring &name() const { return m_name; }
+ ATTR_COLD const pstring &classname() const { return m_classname; }
+ ATTR_COLD const pstring &param_desc() const { return m_def_param; }
+ ATTR_COLD const nl_util::pstring_list term_param_list();
+ ATTR_COLD const nl_util::pstring_list def_params();
protected:
- pstring m_name; /* device name */
- pstring m_classname; /* device class name */
- pstring m_def_param; /* default parameter */
+ pstring m_name; /* device name */
+ pstring m_classname; /* device class name */
+ pstring m_def_param; /* default parameter */
};
template <class C>
class net_device_t_factory : public net_device_t_base_factory
{
- NETLIST_PREVENT_COPYING(net_device_t_factory)
+ NETLIST_PREVENT_COPYING(net_device_t_factory)
public:
- ATTR_COLD net_device_t_factory(const pstring &name, const pstring &classname,
- const pstring &def_param)
- : net_device_t_base_factory(name, classname, def_param) { }
-
- ATTR_COLD netlist_device_t *Create() const
- {
- netlist_device_t *r = new C();
- //r->init(setup, name);
- return r;
- }
+ ATTR_COLD net_device_t_factory(const pstring &name, const pstring &classname,
+ const pstring &def_param)
+ : net_device_t_base_factory(name, classname, def_param) { }
+
+ ATTR_COLD netlist_device_t *Create() const
+ {
+ netlist_device_t *r = new C();
+ //r->init(setup, name);
+ return r;
+ }
};
class netlist_factory_t
{
public:
- typedef netlist_list_t<net_device_t_base_factory *> list_t;
+ typedef netlist_list_t<net_device_t_base_factory *> list_t;
- ATTR_COLD netlist_factory_t();
- ATTR_COLD ~netlist_factory_t();
+ ATTR_COLD netlist_factory_t();
+ ATTR_COLD ~netlist_factory_t();
- ATTR_COLD void initialize();
+ ATTR_COLD void initialize();
- template<class _C>
- ATTR_COLD void register_device(const pstring &name, const pstring &classname,
- const pstring &def_param)
- {
- m_list.add(new net_device_t_factory< _C >(name, classname, def_param) );
- }
+ template<class _C>
+ ATTR_COLD void register_device(const pstring &name, const pstring &classname,
+ const pstring &def_param)
+ {
+ m_list.add(new net_device_t_factory< _C >(name, classname, def_param) );
+ }
- ATTR_COLD netlist_device_t *new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const;
- ATTR_COLD netlist_device_t *new_device_by_name(const pstring &name, netlist_setup_t &setup) const;
- ATTR_COLD net_device_t_base_factory * factory_by_name(const pstring &name, netlist_setup_t &setup) const;
+ ATTR_COLD netlist_device_t *new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const;
+ ATTR_COLD netlist_device_t *new_device_by_name(const pstring &name, netlist_setup_t &setup) const;
+ ATTR_COLD net_device_t_base_factory * factory_by_name(const pstring &name, netlist_setup_t &setup) const;
- const list_t &list() { return m_list; }
+ const list_t &list() { return m_list; }
private:
- list_t m_list;
+ list_t m_list;
};
diff --git a/src/emu/netlist/nl_dice_compat.h b/src/emu/netlist/nl_dice_compat.h
index c6ea2ef5860..a63ac5b1b9a 100644
--- a/src/emu/netlist/nl_dice_compat.h
+++ b/src/emu/netlist/nl_dice_compat.h
@@ -29,50 +29,50 @@
struct Mono555Desc
{
public:
- double r, c;
+ double r, c;
- Mono555Desc(double res, double cap) : r(res), c(cap) { }
+ Mono555Desc(double res, double cap) : r(res), c(cap) { }
};
struct SeriesRCDesc
{
public:
- double r, c;
+ double r, c;
- SeriesRCDesc(double res, double cap) : r(res), c(cap) { }
+ SeriesRCDesc(double res, double cap) : r(res), c(cap) { }
};
#define CHIP_555_Mono(_name, _pdesc) \
- CHIP(# _name, NE555) \
- NET_C(_name.6, _name.7) \
- RES(_name ## _R, (_pdesc)->r) \
- CAP(_name ## _C, (_pdesc)->c) \
- NET_C(_name.6, _name ## _R.1) \
- NET_C(_name.6, _name ## _C.1) \
- NET_C(_name ## _R.2, V5) \
- NET_CSTR(# _name "_C.2", "GND") \
- NET_C(_name.8, V5) \
- NET_CSTR(# _name ".1", "GND")
+ CHIP(# _name, NE555) \
+ NET_C(_name.6, _name.7) \
+ RES(_name ## _R, (_pdesc)->r) \
+ CAP(_name ## _C, (_pdesc)->c) \
+ NET_C(_name.6, _name ## _R.1) \
+ NET_C(_name.6, _name ## _C.1) \
+ NET_C(_name ## _R.2, V5) \
+ NET_CSTR(# _name "_C.2", "GND") \
+ NET_C(_name.8, V5) \
+ NET_CSTR(# _name ".1", "GND")
#define CHIP_SERIES_RC(_name, _pdesc) \
- RES(_name ## _R, (_pdesc)->r) \
- CAP(_name ## _C, (_pdesc)->c) \
- NET_C(_name ## _R.1, _name ## _C.2) \
- ALIAS(_name.3, _name ## _R.1) \
- ALIAS(_name.2, _name ## _R.2) \
- ALIAS(_name.1, _name ## _C.1)
+ RES(_name ## _R, (_pdesc)->r) \
+ CAP(_name ## _C, (_pdesc)->c) \
+ NET_C(_name ## _R.1, _name ## _C.2) \
+ ALIAS(_name.3, _name ## _R.1) \
+ ALIAS(_name.2, _name ## _R.2) \
+ ALIAS(_name.1, _name ## _C.1)
#define CHIP_INPUT(_name) \
SWITCH2(_name ## _SW) \
- NET_C(_name ## _SW.2, V5) \
- NET_CSTR(# _name "_SW.1", "GND") \
- ALIAS(_name.1, _name ## _SW.Q)
+ NET_C(_name ## _SW.2, V5) \
+ NET_CSTR(# _name "_SW.1", "GND") \
+ ALIAS(_name.1, _name ## _SW.Q)
#define CHIP_LATCH(_name) \
NETDEV_RSFF(_name) \
- ALIAS(_name.1, _name.S) \
- ALIAS(_name.2, _name.R) \
- ALIAS(_name.3, _name.QQ)
+ ALIAS(_name.1, _name.S) \
+ ALIAS(_name.2, _name.R) \
+ ALIAS(_name.3, _name.QQ)
diff --git a/src/emu/netlist/nl_lists.h b/src/emu/netlist/nl_lists.h
index 685081d941a..0de20ea55ab 100644
--- a/src/emu/netlist/nl_lists.h
+++ b/src/emu/netlist/nl_lists.h
@@ -22,133 +22,133 @@ class netlist_list_t
{
public:
- ATTR_COLD netlist_list_t(int numElements = _NumElem)
- {
- m_num_elements = numElements;
- m_list = new _ListClass[m_num_elements];
- m_count = 0;
- }
-
- ATTR_COLD netlist_list_t(const netlist_list_t &rhs)
- {
- m_num_elements = rhs.capacity();
- m_list = new _ListClass[m_num_elements];
- m_count = 0;
- for (int i=0; i<rhs.count(); i++)
- {
- this->add(rhs[i]);
- }
- }
-
- ATTR_COLD netlist_list_t &operator=(const netlist_list_t &rhs)
- {
- this->reset();
- for (int i=0; i<rhs.count(); i++)
- {
- this->add(rhs[i]);
- }
- return *this;
- }
-
-
- ATTR_COLD ~netlist_list_t()
- {
- delete[] m_list;
- }
-
- ATTR_HOT inline void add(const _ListClass &elem)
- {
- if (m_count >= m_num_elements)
- resize(m_num_elements * 2);
-
- m_list[m_count++] = elem;
- }
-
- ATTR_HOT inline void resize(const int new_size)
- {
- int cnt = count();
- _ListClass *m_new = new _ListClass[new_size];
- _ListClass *pd = m_new;
-
- for (_ListClass *ps = m_list; ps < m_list + cnt; ps++, pd++)
- *pd = *ps;
- delete[] m_list;
- m_list = m_new;
- m_count = cnt;
- m_num_elements = new_size;
- }
-
- ATTR_HOT inline void remove(const _ListClass &elem)
- {
- for (int i = 0; i < m_count; i++)
- {
- if (m_list[i] == elem)
- {
- m_count --;
- while (i < m_count)
- {
- m_list[i] = m_list[i+1];
- i++;
- }
- return;
- }
- }
- }
-
- ATTR_HOT inline void remove_at(const int pos)
- {
- assert((pos>=0) && (pos<m_count));
- m_count--;
- for (int i = pos; i < m_count; i++)
- {
- m_list[i] = m_list[i+1];
- }
- }
-
- ATTR_HOT inline bool contains(const _ListClass &elem) const
- {
- for (_ListClass *i = m_list; i < m_list + m_count; i++)
- {
- if (*i == elem)
- return true;
- }
- return false;
- }
-
- ATTR_HOT inline int indexof(const _ListClass &elem) const
- {
- for (int i = 0; i < m_count; i++)
- {
- if (m_list[i] == elem)
- return i;
- }
- return -1;
- }
-
- ATTR_HOT inline const _ListClass *first() const { return ((m_count > 0) ? &m_list[0] : NULL ); }
- ATTR_HOT inline const _ListClass *next(const _ListClass *lc) const { return ((lc < last()) ? lc + 1 : NULL ); }
- ATTR_HOT inline const _ListClass *last() const { return &m_list[m_count -1]; }
- ATTR_HOT inline int count() const { return m_count; }
- ATTR_HOT inline bool empty() const { return (m_count == 0); }
- ATTR_HOT inline void clear() { m_count = 0; }
- ATTR_HOT inline int capacity() const { return m_num_elements; }
-
- ATTR_COLD void clear_and_free()
- {
- for (_ListClass *i = m_list; i < m_list + m_count; i++)
- {
- delete *i;
- }
- clear();
- }
-
- ATTR_HOT inline _ListClass& operator[](const int & index) { return m_list[index]; }
- ATTR_HOT inline const _ListClass& operator[](const int & index) const { return m_list[index]; }
+ ATTR_COLD netlist_list_t(int numElements = _NumElem)
+ {
+ m_num_elements = numElements;
+ m_list = new _ListClass[m_num_elements];
+ m_count = 0;
+ }
+
+ ATTR_COLD netlist_list_t(const netlist_list_t &rhs)
+ {
+ m_num_elements = rhs.capacity();
+ m_list = new _ListClass[m_num_elements];
+ m_count = 0;
+ for (int i=0; i<rhs.count(); i++)
+ {
+ this->add(rhs[i]);
+ }
+ }
+
+ ATTR_COLD netlist_list_t &operator=(const netlist_list_t &rhs)
+ {
+ this->reset();
+ for (int i=0; i<rhs.count(); i++)
+ {
+ this->add(rhs[i]);
+ }
+ return *this;
+ }
+
+
+ ATTR_COLD ~netlist_list_t()
+ {
+ delete[] m_list;
+ }
+
+ ATTR_HOT inline void add(const _ListClass &elem)
+ {
+ if (m_count >= m_num_elements)
+ resize(m_num_elements * 2);
+
+ m_list[m_count++] = elem;
+ }
+
+ ATTR_HOT inline void resize(const int new_size)
+ {
+ int cnt = count();
+ _ListClass *m_new = new _ListClass[new_size];
+ _ListClass *pd = m_new;
+
+ for (_ListClass *ps = m_list; ps < m_list + cnt; ps++, pd++)
+ *pd = *ps;
+ delete[] m_list;
+ m_list = m_new;
+ m_count = cnt;
+ m_num_elements = new_size;
+ }
+
+ ATTR_HOT inline void remove(const _ListClass &elem)
+ {
+ for (int i = 0; i < m_count; i++)
+ {
+ if (m_list[i] == elem)
+ {
+ m_count --;
+ while (i < m_count)
+ {
+ m_list[i] = m_list[i+1];
+ i++;
+ }
+ return;
+ }
+ }
+ }
+
+ ATTR_HOT inline void remove_at(const int pos)
+ {
+ assert((pos>=0) && (pos<m_count));
+ m_count--;
+ for (int i = pos; i < m_count; i++)
+ {
+ m_list[i] = m_list[i+1];
+ }
+ }
+
+ ATTR_HOT inline bool contains(const _ListClass &elem) const
+ {
+ for (_ListClass *i = m_list; i < m_list + m_count; i++)
+ {
+ if (*i == elem)
+ return true;
+ }
+ return false;
+ }
+
+ ATTR_HOT inline int indexof(const _ListClass &elem) const
+ {
+ for (int i = 0; i < m_count; i++)
+ {
+ if (m_list[i] == elem)
+ return i;
+ }
+ return -1;
+ }
+
+ ATTR_HOT inline const _ListClass *first() const { return ((m_count > 0) ? &m_list[0] : NULL ); }
+ ATTR_HOT inline const _ListClass *next(const _ListClass *lc) const { return ((lc < last()) ? lc + 1 : NULL ); }
+ ATTR_HOT inline const _ListClass *last() const { return &m_list[m_count -1]; }
+ ATTR_HOT inline int count() const { return m_count; }
+ ATTR_HOT inline bool empty() const { return (m_count == 0); }
+ ATTR_HOT inline void clear() { m_count = 0; }
+ ATTR_HOT inline int capacity() const { return m_num_elements; }
+
+ ATTR_COLD void clear_and_free()
+ {
+ for (_ListClass *i = m_list; i < m_list + m_count; i++)
+ {
+ delete *i;
+ }
+ clear();
+ }
+
+ ATTR_HOT inline _ListClass& operator[](const int & index) { return m_list[index]; }
+ ATTR_HOT inline const _ListClass& operator[](const int & index) const { return m_list[index]; }
private:
- int m_count;
- _ListClass * m_list;
- int m_num_elements;
+ int m_count;
+ _ListClass * m_list;
+ int m_num_elements;
};
// ----------------------------------------------------------------------------------------
@@ -158,81 +158,81 @@ private:
template <class _Element, class _Time, int _Size>
class netlist_timed_queue
{
- NETLIST_PREVENT_COPYING(netlist_timed_queue)
+ NETLIST_PREVENT_COPYING(netlist_timed_queue)
public:
- class entry_t
- {
- public:
- ATTR_HOT inline entry_t()
- : m_exec_time(), m_object() {}
- ATTR_HOT inline entry_t(const _Time atime, const _Element elem) : m_exec_time(atime), m_object(elem) {}
- ATTR_HOT inline const _Time exec_time() const { return m_exec_time; }
- ATTR_HOT inline const _Element object() const { return m_object; }
-
- private:
- _Time m_exec_time;
- _Element m_object;
- };
-
- netlist_timed_queue()
- {
- //m_list = global_alloc_array(entry_t, SIZE);
- clear();
- }
-
- ATTR_HOT inline int capacity() const { return _Size; }
- ATTR_HOT inline bool is_empty() const { return (m_end == &m_list[0]); }
- ATTR_HOT inline bool is_not_empty() const { return (m_end > &m_list[0]); }
-
- ATTR_HOT ATTR_ALIGN void push(const entry_t &e)
- {
- entry_t * i = m_end++;
- const _Time e_time = e.exec_time();
- while ((i > &m_list[0]) && (e_time > (i - 1)->exec_time()) )
- {
- *(i) = *(i-1);
- i--;
- inc_stat(m_prof_sortmove);
- }
- *i = e;
- inc_stat(m_prof_sort);
- assert(m_end - m_list < _Size);
- }
-
- ATTR_HOT inline const entry_t *pop()
- {
- return --m_end;
- }
-
- ATTR_HOT inline const entry_t *peek() const
- {
- return (m_end-1);
- }
-
- ATTR_COLD void clear()
- {
- m_end = &m_list[0];
- }
-
- // save state support & mame disasm
-
- ATTR_COLD inline const entry_t *listptr() const { return &m_list[0]; }
- ATTR_HOT inline int count() const { return m_end - m_list; }
- ATTR_HOT inline const entry_t & operator[](const int & index) const { return m_list[index]; }
+ class entry_t
+ {
+ public:
+ ATTR_HOT inline entry_t()
+ : m_exec_time(), m_object() {}
+ ATTR_HOT inline entry_t(const _Time atime, const _Element elem) : m_exec_time(atime), m_object(elem) {}
+ ATTR_HOT inline const _Time exec_time() const { return m_exec_time; }
+ ATTR_HOT inline const _Element object() const { return m_object; }
+
+ private:
+ _Time m_exec_time;
+ _Element m_object;
+ };
+
+ netlist_timed_queue()
+ {
+ //m_list = global_alloc_array(entry_t, SIZE);
+ clear();
+ }
+
+ ATTR_HOT inline int capacity() const { return _Size; }
+ ATTR_HOT inline bool is_empty() const { return (m_end == &m_list[0]); }
+ ATTR_HOT inline bool is_not_empty() const { return (m_end > &m_list[0]); }
+
+ ATTR_HOT ATTR_ALIGN void push(const entry_t &e)
+ {
+ entry_t * i = m_end++;
+ const _Time e_time = e.exec_time();
+ while ((i > &m_list[0]) && (e_time > (i - 1)->exec_time()) )
+ {
+ *(i) = *(i-1);
+ i--;
+ inc_stat(m_prof_sortmove);
+ }
+ *i = e;
+ inc_stat(m_prof_sort);
+ assert(m_end - m_list < _Size);
+ }
+
+ ATTR_HOT inline const entry_t *pop()
+ {
+ return --m_end;
+ }
+
+ ATTR_HOT inline const entry_t *peek() const
+ {
+ return (m_end-1);
+ }
+
+ ATTR_COLD void clear()
+ {
+ m_end = &m_list[0];
+ }
+
+ // save state support & mame disasm
+
+ ATTR_COLD inline const entry_t *listptr() const { return &m_list[0]; }
+ ATTR_HOT inline int count() const { return m_end - m_list; }
+ ATTR_HOT inline const entry_t & operator[](const int & index) const { return m_list[index]; }
#if (NL_KEEP_STATISTICS)
- // profiling
- INT32 m_prof_start;
- INT32 m_prof_end;
- INT32 m_prof_sortmove;
- INT32 m_prof_sort;
+ // profiling
+ INT32 m_prof_start;
+ INT32 m_prof_end;
+ INT32 m_prof_sortmove;
+ INT32 m_prof_sort;
#endif
private:
- entry_t * m_end;
- entry_t m_list[_Size];
+ entry_t * m_end;
+ entry_t m_list[_Size];
};
@@ -246,58 +246,58 @@ class netlist_stack_t
{
public:
- ATTR_COLD netlist_stack_t(int numElements = _NumElem)
- : m_list(numElements)
- {
- }
-
- ATTR_COLD netlist_stack_t(const netlist_stack_t &rhs)
- : m_list(rhs.m_list)
- {
- }
-
- ATTR_COLD netlist_stack_t &operator=(const netlist_stack_t &rhs)
- {
- m_list = rhs.m_list;
- return *this;
- }
-
-
- ATTR_COLD ~netlist_stack_t()
- {
- }
-
- ATTR_HOT inline void push(const _StackClass &elem)
- {
- m_list.add(elem);
- }
-
- ATTR_HOT inline _StackClass peek() const
- {
- return m_list[m_list.count() - 1];
- }
-
- ATTR_HOT inline _StackClass pop()
- {
- _StackClass ret = peek();
- m_list.remove_at(m_list.count() - 1);
- return ret;
- }
-
- ATTR_HOT inline int count() const { return m_list.count(); }
- ATTR_HOT inline bool empty() const { return (m_list.count() == 0); }
- ATTR_HOT inline void reset() { m_list.reset(); }
- ATTR_HOT inline int capacity() const { return m_list.capacity(); }
+ ATTR_COLD netlist_stack_t(int numElements = _NumElem)
+ : m_list(numElements)
+ {
+ }
+
+ ATTR_COLD netlist_stack_t(const netlist_stack_t &rhs)
+ : m_list(rhs.m_list)
+ {
+ }
+
+ ATTR_COLD netlist_stack_t &operator=(const netlist_stack_t &rhs)
+ {
+ m_list = rhs.m_list;
+ return *this;
+ }
+
+
+ ATTR_COLD ~netlist_stack_t()
+ {
+ }
+
+ ATTR_HOT inline void push(const _StackClass &elem)
+ {
+ m_list.add(elem);
+ }
+
+ ATTR_HOT inline _StackClass peek() const
+ {
+ return m_list[m_list.count() - 1];
+ }
+
+ ATTR_HOT inline _StackClass pop()
+ {
+ _StackClass ret = peek();
+ m_list.remove_at(m_list.count() - 1);
+ return ret;
+ }
+
+ ATTR_HOT inline int count() const { return m_list.count(); }
+ ATTR_HOT inline bool empty() const { return (m_list.count() == 0); }
+ ATTR_HOT inline void reset() { m_list.reset(); }
+ ATTR_HOT inline int capacity() const { return m_list.capacity(); }
private:
- netlist_list_t<_StackClass, _NumElem> m_list;
+ netlist_list_t<_StackClass, _NumElem> m_list;
};
template <class _ListClass>
struct plinked_list_element
{
- plinked_list_element() : m_next(NULL) {}
- _ListClass * m_next;
+ plinked_list_element() : m_next(NULL) {}
+ _ListClass * m_next;
};
@@ -306,69 +306,69 @@ class plinked_list
{
public:
- plinked_list() : m_head(NULL) {}
-
- ATTR_HOT inline void insert(const _ListClass &before, _ListClass &elem)
- {
- if (m_head == &before)
- {
- elem.m_next = m_head;
- m_head = elem;
- }
- else
- {
- _ListClass *p = m_head;
- while (p != NULL)
- {
- if (p->m_next == &before)
- {
- elem->m_next = &before;
- p->m_next = &elem;
- return;
- }
- p = p->m_next;
- }
- assert_always(false, "element not found");
- }
- }
-
- ATTR_HOT inline void insert(_ListClass &elem)
- {
- elem.m_next = m_head;
- m_head = &elem;
- }
-
- ATTR_HOT inline void add(_ListClass &elem)
- {
- _ListClass **p = &m_head;
- while (*p != NULL)
- {
- p = &((*p)->m_next);
- }
- *p = &elem;
- elem.m_next = NULL;
- }
-
- ATTR_HOT inline void remove(const _ListClass &elem)
- {
- _ListClass **p = &m_head;
- while (*p != &elem)
- {
- assert(*p != NULL);
- p = &((*p)->m_next);
- }
- (*p) = elem.m_next;
- }
-
-
- ATTR_HOT static inline _ListClass *next(const _ListClass &elem) { return elem.m_next; }
- ATTR_HOT static inline _ListClass *next(const _ListClass *elem) { return elem->m_next; }
- ATTR_HOT inline _ListClass *first() const { return m_head; }
- ATTR_HOT inline void clear() { m_head = NULL; }
- ATTR_HOT inline bool is_empty() const { return (m_head == NULL); }
+ plinked_list() : m_head(NULL) {}
+
+ ATTR_HOT inline void insert(const _ListClass &before, _ListClass &elem)
+ {
+ if (m_head == &before)
+ {
+ elem.m_next = m_head;
+ m_head = elem;
+ }
+ else
+ {
+ _ListClass *p = m_head;
+ while (p != NULL)
+ {
+ if (p->m_next == &before)
+ {
+ elem->m_next = &before;
+ p->m_next = &elem;
+ return;
+ }
+ p = p->m_next;
+ }
+ assert_always(false, "element not found");
+ }
+ }
+
+ ATTR_HOT inline void insert(_ListClass &elem)
+ {
+ elem.m_next = m_head;
+ m_head = &elem;
+ }
+
+ ATTR_HOT inline void add(_ListClass &elem)
+ {
+ _ListClass **p = &m_head;
+ while (*p != NULL)
+ {
+ p = &((*p)->m_next);
+ }
+ *p = &elem;
+ elem.m_next = NULL;
+ }
+
+ ATTR_HOT inline void remove(const _ListClass &elem)
+ {
+ _ListClass **p = &m_head;
+ while (*p != &elem)
+ {
+ assert(*p != NULL);
+ p = &((*p)->m_next);
+ }
+ (*p) = elem.m_next;
+ }
+
+
+ ATTR_HOT static inline _ListClass *next(const _ListClass &elem) { return elem.m_next; }
+ ATTR_HOT static inline _ListClass *next(const _ListClass *elem) { return elem->m_next; }
+ ATTR_HOT inline _ListClass *first() const { return m_head; }
+ ATTR_HOT inline void clear() { m_head = NULL; }
+ ATTR_HOT inline bool is_empty() const { return (m_head == NULL); }
private:
- _ListClass *m_head;
+ _ListClass *m_head;
};
#endif /* NLLISTS_H_ */
diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c
index e28d43901c2..06017975824 100644
--- a/src/emu/netlist/nl_parser.c
+++ b/src/emu/netlist/nl_parser.c
@@ -16,189 +16,189 @@
pstring ptokenizer::currentline_str()
{
- char buf[300];
- int bufp = 0;
- const char *p = m_line_ptr;
- while (*p && *p != 10)
- buf[bufp++] = *p++;
- buf[bufp] = 0;
- return pstring(buf);
+ char buf[300];
+ int bufp = 0;
+ const char *p = m_line_ptr;
+ while (*p && *p != 10)
+ buf[bufp++] = *p++;
+ buf[bufp] = 0;
+ return pstring(buf);
}
void ptokenizer::skipeol()
{
- char c = getc();
- while (c)
- {
- if (c == 10)
- {
- c = getc();
- if (c != 13)
- ungetc();
- return;
- }
- c = getc();
- }
+ char c = getc();
+ while (c)
+ {
+ if (c == 10)
+ {
+ c = getc();
+ if (c != 13)
+ ungetc();
+ return;
+ }
+ c = getc();
+ }
}
unsigned char ptokenizer::getc()
{
- if (*m_px == 10)
- {
- m_line++;
- m_line_ptr = m_px + 1;
- }
- if (*m_px)
- return *(m_px++);
- else
- return *m_px;
+ if (*m_px == 10)
+ {
+ m_line++;
+ m_line_ptr = m_px + 1;
+ }
+ if (*m_px)
+ return *(m_px++);
+ else
+ return *m_px;
}
void ptokenizer::ungetc()
{
- m_px--;
+ m_px--;
}
void ptokenizer::require_token(const token_id_t &token_num)
{
- require_token(get_token(), token_num);
+ require_token(get_token(), token_num);
}
void ptokenizer::require_token(const token_t tok, const token_id_t &token_num)
{
- if (!tok.is(token_num))
- {
- error("Error: expected token <%s> got <%s>\n", m_tokens[token_num.id()].cstr(), tok.str().cstr());
- }
+ if (!tok.is(token_num))
+ {
+ error("Error: expected token <%s> got <%s>\n", m_tokens[token_num.id()].cstr(), tok.str().cstr());
+ }
}
pstring ptokenizer::get_string()
{
- token_t tok = get_token();
- if (!tok.is_type(STRING))
- {
- error("Error: expected a string, got <%s>\n", tok.str().cstr());
- }
- return tok.str();
+ token_t tok = get_token();
+ if (!tok.is_type(STRING))
+ {
+ error("Error: expected a string, got <%s>\n", tok.str().cstr());
+ }
+ return tok.str();
}
pstring ptokenizer::get_identifier()
{
- token_t tok = get_token();
- if (!tok.is_type(IDENTIFIER))
- {
- error("Error: expected an identifier, got <%s>\n", tok.str().cstr());
- }
- return tok.str();
+ token_t tok = get_token();
+ if (!tok.is_type(IDENTIFIER))
+ {
+ error("Error: expected an identifier, got <%s>\n", tok.str().cstr());
+ }
+ return tok.str();
}
ptokenizer::token_t ptokenizer::get_token()
{
- while (true)
- {
- token_t ret = get_token_internal();
- if (ret.is_type(ENDOFFILE))
- return ret;
-
- if (ret.is(m_tok_comment_start))
- {
- do {
- ret = get_token_internal();
- } while (ret.is_not(m_tok_comment_end));
- }
- else if (ret.is(m_tok_line_comment))
- {
- skipeol();
- }
- else if (ret.str() == "#")
- {
- skipeol();
- }
- else
- return ret;
- }
+ while (true)
+ {
+ token_t ret = get_token_internal();
+ if (ret.is_type(ENDOFFILE))
+ return ret;
+
+ if (ret.is(m_tok_comment_start))
+ {
+ do {
+ ret = get_token_internal();
+ } while (ret.is_not(m_tok_comment_end));
+ }
+ else if (ret.is(m_tok_line_comment))
+ {
+ skipeol();
+ }
+ else if (ret.str() == "#")
+ {
+ skipeol();
+ }
+ else
+ return ret;
+ }
}
ptokenizer::token_t ptokenizer::get_token_internal()
{
- /* skip ws */
- char c = getc();
- while (m_whitespace.find(c)>=0)
- {
- c = getc();
- if (eof())
- {
- return token_t(ENDOFFILE);
- }
- }
- if (m_identifier_chars.find(c)>=0)
- {
- /* read identifier till non identifier char */
- pstring tokstr = "";
- while (m_identifier_chars.find(c)>=0) {
- tokstr += c;
- c = getc();
- }
- ungetc();
- token_id_t id = token_id_t(m_tokens.indexof(tokstr));
- if (id.id() >= 0)
- return token_t(id, tokstr);
- else
- {
- return token_t(IDENTIFIER, tokstr);
- }
- }
- else if (c == m_string)
- {
- pstring tokstr = "";
- c = getc();
- while (c != m_string)
- {
- tokstr += c;
- c = getc();
- }
- return token_t(STRING, tokstr);
- }
- else
- {
- /* read identifier till first identifier char or ws */
- pstring tokstr = "";
- while ((m_identifier_chars.find(c)) < 0 && (m_whitespace.find(c) < 0)) {
- tokstr += c;
- /* expensive, check for single char tokens */
- if (tokstr.len() == 1)
- {
- token_id_t id = token_id_t(m_tokens.indexof(tokstr));
- if (id.id() >= 0)
- return token_t(id, tokstr);
- }
- c = getc();
- }
- ungetc();
- token_id_t id = token_id_t(m_tokens.indexof(tokstr));
- if (id.id() >= 0)
- return token_t(id, tokstr);
- else
- {
- return token_t(UNKNOWN, tokstr);
- }
- }
+ /* skip ws */
+ char c = getc();
+ while (m_whitespace.find(c)>=0)
+ {
+ c = getc();
+ if (eof())
+ {
+ return token_t(ENDOFFILE);
+ }
+ }
+ if (m_identifier_chars.find(c)>=0)
+ {
+ /* read identifier till non identifier char */
+ pstring tokstr = "";
+ while (m_identifier_chars.find(c)>=0) {
+ tokstr += c;
+ c = getc();
+ }
+ ungetc();
+ token_id_t id = token_id_t(m_tokens.indexof(tokstr));
+ if (id.id() >= 0)
+ return token_t(id, tokstr);
+ else
+ {
+ return token_t(IDENTIFIER, tokstr);
+ }
+ }
+ else if (c == m_string)
+ {
+ pstring tokstr = "";
+ c = getc();
+ while (c != m_string)
+ {
+ tokstr += c;
+ c = getc();
+ }
+ return token_t(STRING, tokstr);
+ }
+ else
+ {
+ /* read identifier till first identifier char or ws */
+ pstring tokstr = "";
+ while ((m_identifier_chars.find(c)) < 0 && (m_whitespace.find(c) < 0)) {
+ tokstr += c;
+ /* expensive, check for single char tokens */
+ if (tokstr.len() == 1)
+ {
+ token_id_t id = token_id_t(m_tokens.indexof(tokstr));
+ if (id.id() >= 0)
+ return token_t(id, tokstr);
+ }
+ c = getc();
+ }
+ ungetc();
+ token_id_t id = token_id_t(m_tokens.indexof(tokstr));
+ if (id.id() >= 0)
+ return token_t(id, tokstr);
+ else
+ {
+ return token_t(UNKNOWN, tokstr);
+ }
+ }
}
ATTR_COLD void ptokenizer::error(const char *format, ...)
{
- va_list ap;
- va_start(ap, format);
+ va_list ap;
+ va_start(ap, format);
- pstring errmsg1 =pstring(format).vprintf(ap);
- va_end(ap);
+ pstring errmsg1 =pstring(format).vprintf(ap);
+ va_end(ap);
- verror(errmsg1, currentline_no(), currentline_str());
+ verror(errmsg1, currentline_no(), currentline_str());
- //throw error;
+ //throw error;
}
// ----------------------------------------------------------------------------------------
@@ -207,160 +207,159 @@ ATTR_COLD void ptokenizer::error(const char *format, ...)
ATTR_COLD void netlist_parser::verror(pstring msg, int line_num, pstring line)
{
- m_setup.netlist().error("line %d: error: %s\n\t\t%s\n", line_num,
- msg.cstr(), line.cstr());
+ m_setup.netlist().error("line %d: error: %s\n\t\t%s\n", line_num,
+ msg.cstr(), line.cstr());
- //throw error;
+ //throw error;
}
bool netlist_parser::parse(const char *buf, const pstring nlname)
{
- m_buf = buf;
-
- reset(buf);
- set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-");
- set_number_chars("01234567890eE-."); //FIXME: processing of numbers
- char ws[5];
- ws[0] = ' ';
- ws[1] = 9;
- ws[2] = 10;
- ws[3] = 13;
- ws[4] = 0;
- set_whitespace(ws);
- set_comment("/*", "*/", "//");
- m_tok_param_left = register_token("(");
- m_tok_param_right = register_token(")");
- m_tok_comma = register_token(",");
-
- m_tok_ALIAS = register_token("ALIAS");
- m_tok_NET_C = register_token("NET_C");
- m_tok_PARAM = register_token("PARAM");
- m_tok_NET_MODEL = register_token("NET_MODEL");
- m_tok_INCLUDE = register_token("INCLUDE");
- m_tok_SUBMODEL = register_token("SUBMODEL");
- m_tok_NETLIST_START = register_token("NETLIST_START");
- m_tok_NETLIST_END = register_token("NETLIST_END");
-
- bool in_nl = false;
-
- while (true)
+ m_buf = buf;
+
+ reset(buf);
+ set_identifier_chars("abcdefghijklmnopqrstuvwvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_.-");
+ set_number_chars("01234567890eE-."); //FIXME: processing of numbers
+ char ws[5];
+ ws[0] = ' ';
+ ws[1] = 9;
+ ws[2] = 10;
+ ws[3] = 13;
+ ws[4] = 0;
+ set_whitespace(ws);
+ set_comment("/*", "*/", "//");
+ m_tok_param_left = register_token("(");
+ m_tok_param_right = register_token(")");
+ m_tok_comma = register_token(",");
+
+ m_tok_ALIAS = register_token("ALIAS");
+ m_tok_NET_C = register_token("NET_C");
+ m_tok_PARAM = register_token("PARAM");
+ m_tok_NET_MODEL = register_token("NET_MODEL");
+ m_tok_INCLUDE = register_token("INCLUDE");
+ m_tok_SUBMODEL = register_token("SUBMODEL");
+ m_tok_NETLIST_START = register_token("NETLIST_START");
+ m_tok_NETLIST_END = register_token("NETLIST_END");
+
+ bool in_nl = false;
+
+ while (true)
{
- token_t token = get_token();
-
- if (token.is_type(ENDOFFILE))
- {
- return false;
- //error("EOF while searching for <%s>", nlname.cstr());
- }
-
- if (token.is(m_tok_NETLIST_END))
- {
- require_token(m_tok_param_left);
- if (!in_nl)
- error("Unexpected NETLIST_END");
- else
- {
- in_nl = false;
- }
- require_token(m_tok_param_right);
- }
- else if (token.is(m_tok_NETLIST_START))
- {
- if (in_nl)
- error("Unexpected NETLIST_START");
- require_token(m_tok_param_left);
- token_t name = get_token();
- require_token(m_tok_param_right);
- if (name.str() == nlname || nlname == "")
- {
- parse_netlist(name.str());
- return true;
- } else
- in_nl = true;
- }
+ token_t token = get_token();
+
+ if (token.is_type(ENDOFFILE))
+ {
+ return false;
+ //error("EOF while searching for <%s>", nlname.cstr());
+ }
+
+ if (token.is(m_tok_NETLIST_END))
+ {
+ require_token(m_tok_param_left);
+ if (!in_nl)
+ error("Unexpected NETLIST_END");
+ else
+ {
+ in_nl = false;
+ }
+ require_token(m_tok_param_right);
+ }
+ else if (token.is(m_tok_NETLIST_START))
+ {
+ if (in_nl)
+ error("Unexpected NETLIST_START");
+ require_token(m_tok_param_left);
+ token_t name = get_token();
+ require_token(m_tok_param_right);
+ if (name.str() == nlname || nlname == "")
+ {
+ parse_netlist(name.str());
+ return true;
+ } else
+ in_nl = true;
+ }
}
}
void netlist_parser::parse_netlist(const pstring &nlname)
{
-
- while (true)
- {
- token_t token = get_token();
-
- if (token.is_type(ENDOFFILE))
- return;
-
- require_token(m_tok_param_left);
- NL_VERBOSE_OUT(("Parser: Device: %s\n", token.str().cstr()));
-
- if (token.is(m_tok_ALIAS))
- net_alias();
- else if (token.is(m_tok_NET_C))
- net_c();
- else if (token.is(m_tok_PARAM))
- netdev_param();
- else if (token.is(m_tok_NET_MODEL))
- net_model();
- else if (token.is(m_tok_SUBMODEL))
- net_submodel();
- else if (token.is(m_tok_INCLUDE))
- net_include();
- else if (token.is(m_tok_NETLIST_END))
- {
- netdev_netlist_end();
- return;
- }
- else
- device(token.str());
- }
+ while (true)
+ {
+ token_t token = get_token();
+
+ if (token.is_type(ENDOFFILE))
+ return;
+
+ require_token(m_tok_param_left);
+ NL_VERBOSE_OUT(("Parser: Device: %s\n", token.str().cstr()));
+
+ if (token.is(m_tok_ALIAS))
+ net_alias();
+ else if (token.is(m_tok_NET_C))
+ net_c();
+ else if (token.is(m_tok_PARAM))
+ netdev_param();
+ else if (token.is(m_tok_NET_MODEL))
+ net_model();
+ else if (token.is(m_tok_SUBMODEL))
+ net_submodel();
+ else if (token.is(m_tok_INCLUDE))
+ net_include();
+ else if (token.is(m_tok_NETLIST_END))
+ {
+ netdev_netlist_end();
+ return;
+ }
+ else
+ device(token.str());
+ }
}
void netlist_parser::netdev_netlist_start()
{
- // don't do much
- token_t name = get_token();
- require_token(m_tok_param_right);
+ // don't do much
+ token_t name = get_token();
+ require_token(m_tok_param_right);
}
void netlist_parser::netdev_netlist_end()
{
- // don't do much
- require_token(m_tok_param_right);
+ // don't do much
+ require_token(m_tok_param_right);
}
void netlist_parser::net_model()
{
- // don't do much
- pstring model = get_string();
- m_setup.register_model(model);
- require_token(m_tok_param_right);
+ // don't do much
+ pstring model = get_string();
+ m_setup.register_model(model);
+ require_token(m_tok_param_right);
}
void netlist_parser::net_submodel()
{
- // don't do much
- pstring name = get_identifier();
- require_token(m_tok_comma);
- pstring model = get_identifier();
- require_token(m_tok_param_right);
-
- m_setup.namespace_push(name);
- netlist_parser subparser(m_setup);
- subparser.parse(m_buf, model);
- m_setup.namespace_pop();
+ // don't do much
+ pstring name = get_identifier();
+ require_token(m_tok_comma);
+ pstring model = get_identifier();
+ require_token(m_tok_param_right);
+
+ m_setup.namespace_push(name);
+ netlist_parser subparser(m_setup);
+ subparser.parse(m_buf, model);
+ m_setup.namespace_pop();
}
void netlist_parser::net_include()
{
- // don't do much
- pstring name = get_identifier();
- require_token(m_tok_param_right);
+ // don't do much
+ pstring name = get_identifier();
+ require_token(m_tok_param_right);
- netlist_parser subparser(m_setup);
- subparser.parse(m_buf, name);
+ netlist_parser subparser(m_setup);
+ subparser.parse(m_buf, name);
}
void netlist_parser::net_alias()
@@ -380,18 +379,18 @@ void netlist_parser::net_alias()
void netlist_parser::net_c()
{
pstring last = get_identifier();
- require_token(m_tok_comma);
+ require_token(m_tok_comma);
while (true)
{
- pstring t1 = get_identifier();
- m_setup.register_link(last , t1);
- token_t n = get_token();
- if (n.is(m_tok_param_right))
- break;
- if (!n.is(m_tok_comma))
- error("expected a comma, found <%s>", n.str().cstr());
- last = t1;
+ pstring t1 = get_identifier();
+ m_setup.register_link(last , t1);
+ token_t n = get_token();
+ if (n.is(m_tok_param_right))
+ break;
+ if (!n.is(m_tok_comma))
+ error("expected a comma, found <%s>", n.str().cstr());
+ last = t1;
}
NL_VERBOSE_OUT(("Parser: Connect: %s %s\n", t1.cstr(), t2.cstr()));
@@ -406,7 +405,7 @@ void netlist_parser::netdev_param()
val = eval_param(get_token());
NL_VERBOSE_OUT(("Parser: Param: %s %f\n", param.cstr(), val));
m_setup.register_param(param, val);
- require_token(m_tok_param_right);
+ require_token(m_tok_param_right);
}
void netlist_parser::device(const pstring &dev_type)
@@ -427,25 +426,25 @@ void netlist_parser::device(const pstring &dev_type)
NL_VERBOSE_OUT(("Parser: IC: %s\n", devname.cstr()));
- cnt = 0;
- while (cnt < def_params.count())
- {
- pstring paramfq = devname + "." + def_params[cnt];
-
- NL_VERBOSE_OUT(("Defparam: %s\n", paramfq.cstr()));
- require_token(m_tok_comma);
- tok = get_token();
- if (tok.is_type(STRING))
- {
- m_setup.register_param(paramfq, tok.str());
- }
- else
- {
- double val = eval_param(tok);
- m_setup.register_param(paramfq, val);
- }
- cnt++;
- }
+ cnt = 0;
+ while (cnt < def_params.count())
+ {
+ pstring paramfq = devname + "." + def_params[cnt];
+
+ NL_VERBOSE_OUT(("Defparam: %s\n", paramfq.cstr()));
+ require_token(m_tok_comma);
+ tok = get_token();
+ if (tok.is_type(STRING))
+ {
+ m_setup.register_param(paramfq, tok.str());
+ }
+ else
+ {
+ double val = eval_param(tok);
+ m_setup.register_param(paramfq, val);
+ }
+ cnt++;
+ }
tok = get_token();
cnt = 0;
@@ -456,11 +455,11 @@ void netlist_parser::device(const pstring &dev_type)
m_setup.register_link(devname + "." + termlist[cnt], output_name);
cnt++;
- tok = get_token();
+ tok = get_token();
}
- if (cnt != termlist.count())
- fatalerror("netlist: input count mismatch for %s - expected %d found %d\n", devname.cstr(), termlist.count(), cnt);
- require_token(tok, m_tok_param_right);
+ if (cnt != termlist.count())
+ fatalerror("netlist: input count mismatch for %s - expected %d found %d\n", devname.cstr(), termlist.count(), cnt);
+ require_token(tok, m_tok_param_right);
}
@@ -483,20 +482,19 @@ double netlist_parser::eval_param(const token_t tok)
for (i=1; i<6;i++)
if (tok.str().equals(macs[i]))
f = i;
- if (f>0)
- {
- require_token(m_tok_param_left);
- val = get_identifier();
- }
- else
- val = tok.str();
+ if (f>0)
+ {
+ require_token(m_tok_param_left);
+ val = get_identifier();
+ }
+ else
+ val = tok.str();
- ret = val.as_double(&e);
+ ret = val.as_double(&e);
- if (e)
+ if (e)
error("Error with parameter ...\n");
if (f>0)
- require_token(m_tok_param_right);
+ require_token(m_tok_param_right);
return ret * facs[f];
}
-
diff --git a/src/emu/netlist/nl_parser.h b/src/emu/netlist/nl_parser.h
index 1f0905bfbdf..c9e0608d4ba 100644
--- a/src/emu/netlist/nl_parser.h
+++ b/src/emu/netlist/nl_parser.h
@@ -12,129 +12,129 @@
class ptokenizer
{
- NETLIST_PREVENT_COPYING(ptokenizer)
+ NETLIST_PREVENT_COPYING(ptokenizer)
public:
- virtual ~ptokenizer() {}
-
- ptokenizer()
- : m_line(1), m_line_ptr(NULL), m_px(NULL)
- {}
-
- enum token_type
- {
- IDENTIFIER,
- NUMBER,
- TOKEN,
- STRING,
- COMMENT,
- UNKNOWN,
- ENDOFFILE,
- };
-
- struct token_id_t
- {
- public:
- token_id_t() : m_id(-2) {}
- token_id_t(const int id) : m_id(id) {}
- const int id() const { return m_id; }
- private:
- int m_id;
- };
-
- struct token_t
- {
- token_t() {};
- token_t(token_type type)
- {
- m_type = type;
- m_id = token_id_t(-1);
- m_token ="";
- }
- token_t(token_type type, const pstring str)
- {
- m_type = type;
- m_id = token_id_t(-1);
- m_token = str;
- }
- token_t(const token_id_t id, const pstring str)
- {
- m_type = TOKEN;
- m_id = id;
- m_token = str;
- }
-
- bool is(const token_id_t &tok_id) const { return m_id.id() == tok_id.id(); }
- bool is_not(const token_id_t &tok_id) const { return !is(tok_id); }
-
- bool is_type(const token_type type) const { return m_type == type; }
-
- pstring str() const { return m_token; }
-
- private:
- token_type m_type;
- token_id_t m_id;
- pstring m_token;
- };
-
-
- int currentline_no() { return m_line; }
- pstring currentline_str();
-
- /* tokenizer stuff follows ... */
-
- token_t get_token();
- pstring get_string();
- pstring get_identifier();
-
- void require_token(const token_id_t &token_num);
- void require_token(const token_t tok, const token_id_t &token_num);
-
- token_id_t register_token(pstring token)
- {
- m_tokens.add(token);
- return token_id_t(m_tokens.count() - 1);
- }
-
- void set_identifier_chars(pstring s) { m_identifier_chars = s; }
- void set_number_chars(pstring s) { m_number_chars = s; }
- void set_whitespace(pstring s) { m_whitespace = s; }
- void set_comment(pstring start, pstring end, pstring line)
- {
- m_tok_comment_start = register_token(start);
- m_tok_comment_end = register_token(end);
- m_tok_line_comment = register_token(line);
- m_string = '"';
- }
-
- token_t get_token_internal();
- void error(const char *format, ...) ATTR_PRINTF(2,3);
+ virtual ~ptokenizer() {}
+
+ ptokenizer()
+ : m_line(1), m_line_ptr(NULL), m_px(NULL)
+ {}
+
+ enum token_type
+ {
+ IDENTIFIER,
+ NUMBER,
+ TOKEN,
+ STRING,
+ COMMENT,
+ UNKNOWN,
+ ENDOFFILE,
+ };
+
+ struct token_id_t
+ {
+ public:
+ token_id_t() : m_id(-2) {}
+ token_id_t(const int id) : m_id(id) {}
+ const int id() const { return m_id; }
+ private:
+ int m_id;
+ };
+
+ struct token_t
+ {
+ token_t() {};
+ token_t(token_type type)
+ {
+ m_type = type;
+ m_id = token_id_t(-1);
+ m_token ="";
+ }
+ token_t(token_type type, const pstring str)
+ {
+ m_type = type;
+ m_id = token_id_t(-1);
+ m_token = str;
+ }
+ token_t(const token_id_t id, const pstring str)
+ {
+ m_type = TOKEN;
+ m_id = id;
+ m_token = str;
+ }
+
+ bool is(const token_id_t &tok_id) const { return m_id.id() == tok_id.id(); }
+ bool is_not(const token_id_t &tok_id) const { return !is(tok_id); }
+
+ bool is_type(const token_type type) const { return m_type == type; }
+
+ pstring str() const { return m_token; }
+
+ private:
+ token_type m_type;
+ token_id_t m_id;
+ pstring m_token;
+ };
+
+
+ int currentline_no() { return m_line; }
+ pstring currentline_str();
+
+ /* tokenizer stuff follows ... */
+
+ token_t get_token();
+ pstring get_string();
+ pstring get_identifier();
+
+ void require_token(const token_id_t &token_num);
+ void require_token(const token_t tok, const token_id_t &token_num);
+
+ token_id_t register_token(pstring token)
+ {
+ m_tokens.add(token);
+ return token_id_t(m_tokens.count() - 1);
+ }
+
+ void set_identifier_chars(pstring s) { m_identifier_chars = s; }
+ void set_number_chars(pstring s) { m_number_chars = s; }
+ void set_whitespace(pstring s) { m_whitespace = s; }
+ void set_comment(pstring start, pstring end, pstring line)
+ {
+ m_tok_comment_start = register_token(start);
+ m_tok_comment_end = register_token(end);
+ m_tok_line_comment = register_token(line);
+ m_string = '"';
+ }
+
+ token_t get_token_internal();
+ void error(const char *format, ...) ATTR_PRINTF(2,3);
protected:
- void reset(const char *p) { m_px = p; m_line = 1; m_line_ptr = p; }
- virtual void verror(pstring msg, int line_num, pstring line) = 0;
+ void reset(const char *p) { m_px = p; m_line = 1; m_line_ptr = p; }
+ virtual void verror(pstring msg, int line_num, pstring line) = 0;
private:
- void skipeol();
+ void skipeol();
- unsigned char getc();
- void ungetc();
- bool eof() { return *m_px == 0; }
+ unsigned char getc();
+ void ungetc();
+ bool eof() { return *m_px == 0; }
- int m_line;
- const char * m_line_ptr;
- const char * m_px;
+ int m_line;
+ const char * m_line_ptr;
+ const char * m_px;
- /* tokenizer stuff follows ... */
+ /* tokenizer stuff follows ... */
- pstring m_identifier_chars;
- pstring m_number_chars;
- netlist_list_t<pstring> m_tokens;
- pstring m_whitespace;
- char m_string;
+ pstring m_identifier_chars;
+ pstring m_number_chars;
+ netlist_list_t<pstring> m_tokens;
+ pstring m_whitespace;
+ char m_string;
- token_id_t m_tok_comment_start;
- token_id_t m_tok_comment_end;
- token_id_t m_tok_line_comment;
+ token_id_t m_tok_comment_start;
+ token_id_t m_tok_comment_end;
+ token_id_t m_tok_line_comment;
};
class netlist_parser : public ptokenizer
@@ -146,131 +146,131 @@ public:
bool parse(const char *buf, const pstring nlname = "");
- void parse_netlist(const pstring &nlname);
+ void parse_netlist(const pstring &nlname);
void net_alias();
void netdev_param();
void net_c();
void device(const pstring &dev_type);
- void netdev_netlist_start();
- void netdev_netlist_end();
- void net_model();
- void net_submodel();
- void net_include();
+ void netdev_netlist_start();
+ void netdev_netlist_end();
+ void net_model();
+ void net_submodel();
+ void net_include();
protected:
- virtual void verror(pstring msg, int line_num, pstring line);
+ virtual void verror(pstring msg, int line_num, pstring line);
private:
- double eval_param(const token_t tok);
+ double eval_param(const token_t tok);
- token_id_t m_tok_param_left;
- token_id_t m_tok_param_right;
- token_id_t m_tok_comma;
- token_id_t m_tok_ALIAS;
- token_id_t m_tok_NET_C;
- token_id_t m_tok_PARAM;
- token_id_t m_tok_NET_MODEL;
- token_id_t m_tok_NETLIST_START;
- token_id_t m_tok_NETLIST_END;
- token_id_t m_tok_SUBMODEL;
- token_id_t m_tok_INCLUDE;
+ token_id_t m_tok_param_left;
+ token_id_t m_tok_param_right;
+ token_id_t m_tok_comma;
+ token_id_t m_tok_ALIAS;
+ token_id_t m_tok_NET_C;
+ token_id_t m_tok_PARAM;
+ token_id_t m_tok_NET_MODEL;
+ token_id_t m_tok_NETLIST_START;
+ token_id_t m_tok_NETLIST_END;
+ token_id_t m_tok_SUBMODEL;
+ token_id_t m_tok_INCLUDE;
- netlist_setup_t &m_setup;
+ netlist_setup_t &m_setup;
- const char *m_buf;
+ const char *m_buf;
};
class netlist_source_t
{
public:
- typedef netlist_list_t<netlist_source_t> list_t;
-
- enum source_e
- {
- EMPTY,
- STRING,
- PROC,
- MEMORY
- };
-
- netlist_source_t()
- : m_type(EMPTY),
- m_setup_func(NULL),
- m_setup_func_name(""),
- m_mem(NULL)
- {
- }
-
- netlist_source_t(pstring name, void (*setup_func)(netlist_setup_t &))
- : m_type(PROC),
- m_setup_func(setup_func),
- m_setup_func_name(name),
- m_mem(NULL)
- {
- }
-
- netlist_source_t(const char *mem)
- : m_type(MEMORY),
- m_setup_func(NULL),
- m_setup_func_name(""),
- m_mem(mem)
- {
- }
-
- ~netlist_source_t() { }
-
- bool parse(netlist_setup_t &setup, const pstring name)
- {
- switch (m_type)
- {
- case PROC:
- if (name == m_setup_func_name)
- {
- m_setup_func(setup);
- return true;
- }
- break;
- case MEMORY:
- {
- netlist_parser p(setup);
- return p.parse(m_mem, name);
- }
- break;
- case STRING:
- case EMPTY:
- break;
- }
- return false;
- }
+ typedef netlist_list_t<netlist_source_t> list_t;
+
+ enum source_e
+ {
+ EMPTY,
+ STRING,
+ PROC,
+ MEMORY
+ };
+
+ netlist_source_t()
+ : m_type(EMPTY),
+ m_setup_func(NULL),
+ m_setup_func_name(""),
+ m_mem(NULL)
+ {
+ }
+
+ netlist_source_t(pstring name, void (*setup_func)(netlist_setup_t &))
+ : m_type(PROC),
+ m_setup_func(setup_func),
+ m_setup_func_name(name),
+ m_mem(NULL)
+ {
+ }
+
+ netlist_source_t(const char *mem)
+ : m_type(MEMORY),
+ m_setup_func(NULL),
+ m_setup_func_name(""),
+ m_mem(mem)
+ {
+ }
+
+ ~netlist_source_t() { }
+
+ bool parse(netlist_setup_t &setup, const pstring name)
+ {
+ switch (m_type)
+ {
+ case PROC:
+ if (name == m_setup_func_name)
+ {
+ m_setup_func(setup);
+ return true;
+ }
+ break;
+ case MEMORY:
+ {
+ netlist_parser p(setup);
+ return p.parse(m_mem, name);
+ }
+ break;
+ case STRING:
+ case EMPTY:
+ break;
+ }
+ return false;
+ }
private:
- source_e m_type;
+ source_e m_type;
- void (*m_setup_func)(netlist_setup_t &);
- pstring m_setup_func_name;
- const char *m_mem;
+ void (*m_setup_func)(netlist_setup_t &);
+ pstring m_setup_func_name;
+ const char *m_mem;
};
class netlist_sources_t
{
public:
- void add(netlist_source_t src)
- {
- m_list.add(src);
- }
-
- void parse(netlist_setup_t &setup, const pstring name)
- {
- for (int i=0; i < m_list.count(); i++)
- {
- if (m_list[i].parse(setup, name))
- return;
- }
- setup.netlist().error("unable to find %s in source collection", name.cstr());
- }
+ void add(netlist_source_t src)
+ {
+ m_list.add(src);
+ }
+
+ void parse(netlist_setup_t &setup, const pstring name)
+ {
+ for (int i=0; i < m_list.count(); i++)
+ {
+ if (m_list[i].parse(setup, name))
+ return;
+ }
+ setup.netlist().error("unable to find %s in source collection", name.cstr());
+ }
private:
- netlist_source_t::list_t m_list;
+ netlist_source_t::list_t m_list;
};
#endif /* NL_PARSER_H_ */
diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c
index b8d93b2f865..0644a73b38d 100644
--- a/src/emu/netlist/nl_setup.c
+++ b/src/emu/netlist/nl_setup.c
@@ -19,8 +19,8 @@ static NETLIST_START(base)
TTL_INPUT(ttllow, 0)
NET_REGISTER_DEV(gnd, GND)
- INCLUDE(diode_models);
- INCLUDE(bjt_models);
+ INCLUDE(diode_models);
+ INCLUDE(bjt_models);
NETLIST_END()
@@ -58,31 +58,31 @@ netlist_setup_t::~netlist_setup_t()
ATTR_COLD pstring netlist_setup_t::build_fqn(const pstring &obj_name) const
{
- if (m_stack.empty())
- return netlist().name() + "." + obj_name;
- else
- return m_stack.peek() + "." + obj_name;
+ if (m_stack.empty())
+ return netlist().name() + "." + obj_name;
+ else
+ return m_stack.peek() + "." + obj_name;
}
void netlist_setup_t::namespace_push(const pstring &aname)
{
- if (m_stack.empty())
- m_stack.push(netlist().name() + "." + aname);
- else
- m_stack.push(m_stack.peek() + "." + aname);
+ if (m_stack.empty())
+ m_stack.push(netlist().name() + "." + aname);
+ else
+ m_stack.push(m_stack.peek() + "." + aname);
}
void netlist_setup_t::namespace_pop()
{
- m_stack.pop();
+ m_stack.pop();
}
netlist_device_t *netlist_setup_t::register_dev(netlist_device_t *dev, const pstring &name)
{
- pstring fqn = build_fqn(name);
+ pstring fqn = build_fqn(name);
- dev->init(netlist(), fqn);
+ dev->init(netlist(), fqn);
if (!(netlist().m_devices.add(fqn, dev, false)==TMERR_NONE))
netlist().error("Error adding %s to device list\n", name.cstr());
@@ -120,7 +120,7 @@ void netlist_setup_t::remove_dev(const pstring &name)
const link_t *p = m_links.first();
while (p != NULL)
{
- const link_t *n = m_links.next(p);
+ const link_t *n = m_links.next(p);
if (temp.equals(p->e1.substr(0,temp.len())) || temp.equals(p->e2.substr(0,temp.len())))
m_links.remove(*p);
p = n;
@@ -135,15 +135,15 @@ void netlist_setup_t::register_model(const pstring &model)
void netlist_setup_t::register_alias_nofqn(const pstring &alias, const pstring &out)
{
- if (!(m_alias.add(alias, out, false)==TMERR_NONE))
- netlist().error("Error adding alias %s to alias list\n", alias.cstr());
+ if (!(m_alias.add(alias, out, false)==TMERR_NONE))
+ netlist().error("Error adding alias %s to alias list\n", alias.cstr());
}
void netlist_setup_t::register_alias(const pstring &alias, const pstring &out)
{
- pstring alias_fqn = build_fqn(alias);
- pstring out_fqn = build_fqn(out);
- register_alias_nofqn(alias_fqn, out_fqn);
+ pstring alias_fqn = build_fqn(alias);
+ pstring out_fqn = build_fqn(out);
+ register_alias_nofqn(alias_fqn, out_fqn);
}
pstring netlist_setup_t::objtype_as_astr(netlist_object_t &in) const
@@ -241,7 +241,7 @@ void netlist_setup_t::register_object(netlist_device_t &dev, const pstring &name
//int pl=m_models[i].find("(");
//int pr=m_models[i].find(")");
//dynamic_cast<netlist_param_model_t &>(param).initial(m_models[i].substr(pl+1,pr-pl-1));
- dynamic_cast<netlist_param_model_t &>(param).initial(m_models[i]);
+ dynamic_cast<netlist_param_model_t &>(param).initial(m_models[i]);
found = true;
break;
}
@@ -269,15 +269,15 @@ void netlist_setup_t::register_object(netlist_device_t &dev, const pstring &name
void netlist_setup_t::register_link_arr(const pstring &terms)
{
- nl_util::pstring_list list = nl_util::split(terms,", ");
- if (list.count() < 2)
- netlist().error("You must pass at least 2 terminals to NET_C");
- pstring last = list[0];
- for (int i = 1; i < list.count(); i++)
- {
- register_link(last, list[i]);
- last = list[i];
- }
+ nl_util::pstring_list list = nl_util::split(terms,", ");
+ if (list.count() < 2)
+ netlist().error("You must pass at least 2 terminals to NET_C");
+ pstring last = list[0];
+ for (int i = 1; i < list.count(); i++)
+ {
+ register_link(last, list[i]);
+ last = list[i];
+ }
}
@@ -298,7 +298,7 @@ void netlist_setup_t::register_param(const pstring &param, const double value)
void netlist_setup_t::register_param(const pstring &param, const pstring &value)
{
- pstring fqn = build_fqn(param);
+ pstring fqn = build_fqn(param);
if (!(m_params_temp.add(fqn, value, false)==TMERR_NONE))
netlist().error("Error adding parameter %s to parameter list\n", param.cstr());
@@ -368,7 +368,7 @@ netlist_core_terminal_t *netlist_setup_t::find_terminal(const pstring &terminal_
netlist_param_t *netlist_setup_t::find_param(const pstring &param_in, bool required)
{
- const pstring param_in_fqn = build_fqn(param_in);
+ const pstring param_in_fqn = build_fqn(param_in);
const pstring &outname = resolve_alias(param_in_fqn);
netlist_param_t *ret;
@@ -383,41 +383,41 @@ netlist_param_t *netlist_setup_t::find_param(const pstring &param_in, bool requi
nld_base_d_to_a_proxy *netlist_setup_t::get_d_a_proxy(netlist_output_t &out)
{
- assert(out.isFamily(netlist_terminal_t::LOGIC));
+ assert(out.isFamily(netlist_terminal_t::LOGIC));
- //printf("proxy for %s\n", out.name().cstr());;
- netlist_logic_output_t &out_cast = dynamic_cast<netlist_logic_output_t &>(out);
- nld_base_d_to_a_proxy *proxy = out_cast.get_proxy();
+ //printf("proxy for %s\n", out.name().cstr());;
+ netlist_logic_output_t &out_cast = dynamic_cast<netlist_logic_output_t &>(out);
+ nld_base_d_to_a_proxy *proxy = out_cast.get_proxy();
- if (proxy == NULL)
- {
- // create a new one ...
- proxy = new nld_d_to_a_proxy(out);
- pstring x = pstring::sprintf("proxy_da_%d", m_proxy_cnt);
- m_proxy_cnt++;
+ if (proxy == NULL)
+ {
+ // create a new one ...
+ proxy = new nld_d_to_a_proxy(out);
+ pstring x = pstring::sprintf("proxy_da_%d", m_proxy_cnt);
+ m_proxy_cnt++;
- register_dev(proxy, x);
- proxy->start_dev();
+ register_dev(proxy, x);
+ proxy->start_dev();
#if 1
- /* connect all existing terminals to new net */
-
- netlist_core_terminal_t *p = out.net().m_list.first();
- while (p != NULL)
- {
- netlist_core_terminal_t *np = out.net().m_list.next(p);
- p->clear_net(); // de-link from all nets ...
- connect(proxy->out(), *p);
- p = np;
- }
- out.net().m_list.clear(); // clear the list
- out.net().m_num_cons = 0;
+ /* connect all existing terminals to new net */
+
+ netlist_core_terminal_t *p = out.net().m_list.first();
+ while (p != NULL)
+ {
+ netlist_core_terminal_t *np = out.net().m_list.next(p);
+ p->clear_net(); // de-link from all nets ...
+ connect(proxy->out(), *p);
+ p = np;
+ }
+ out.net().m_list.clear(); // clear the list
+ out.net().m_num_cons = 0;
#endif
- out.net().register_con(proxy->m_I);
- out_cast.set_proxy(proxy);
+ out.net().register_con(proxy->m_I);
+ out_cast.set_proxy(proxy);
- }
- return proxy;
+ }
+ return proxy;
}
void netlist_setup_t::connect_input_output(netlist_input_t &in, netlist_output_t &out)
@@ -429,7 +429,7 @@ void netlist_setup_t::connect_input_output(netlist_input_t &in, netlist_output_t
m_proxy_cnt++;
register_dev(proxy, x);
- proxy->start_dev();
+ proxy->start_dev();
proxy->m_Q.net().register_con(in);
out.net().register_con(proxy->m_I);
@@ -437,10 +437,10 @@ void netlist_setup_t::connect_input_output(netlist_input_t &in, netlist_output_t
}
else if (out.isFamily(netlist_terminal_t::LOGIC) && in.isFamily(netlist_terminal_t::ANALOG))
{
- nld_base_d_to_a_proxy *proxy = get_d_a_proxy(out);
+ nld_base_d_to_a_proxy *proxy = get_d_a_proxy(out);
- connect_terminals(proxy->out(), in);
- //proxy->out().net().register_con(in);
+ connect_terminals(proxy->out(), in);
+ //proxy->out().net().register_con(in);
}
else
{
@@ -462,7 +462,7 @@ void netlist_setup_t::connect_terminal_input(netlist_terminal_t &term, netlist_i
m_proxy_cnt++;
register_dev(proxy, x);
- proxy->start_dev();
+ proxy->start_dev();
connect_terminals(term, proxy->m_I);
@@ -536,13 +536,13 @@ void netlist_setup_t::connect_terminals(netlist_core_terminal_t &t1, netlist_cor
static netlist_core_terminal_t &resolve_proxy(netlist_core_terminal_t &term)
{
- if (term.isType(netlist_core_terminal_t::OUTPUT) && term.isFamily(netlist_core_terminal_t::LOGIC))
- {
- netlist_logic_output_t &out = dynamic_cast<netlist_logic_output_t &>(term);
- if (out.has_proxy())
- return out.get_proxy()->out();
- }
- return term;
+ if (term.isType(netlist_core_terminal_t::OUTPUT) && term.isFamily(netlist_core_terminal_t::LOGIC))
+ {
+ netlist_logic_output_t &out = dynamic_cast<netlist_logic_output_t &>(term);
+ if (out.has_proxy())
+ return out.get_proxy()->out();
+ }
+ return term;
}
void netlist_setup_t::connect(netlist_core_terminal_t &t1_in, netlist_core_terminal_t &t2_in)
@@ -560,7 +560,7 @@ void netlist_setup_t::connect(netlist_core_terminal_t &t1_in, netlist_core_termi
else if (t1.isType(netlist_core_terminal_t::INPUT) && t2.isType(netlist_core_terminal_t::OUTPUT))
{
if (t1.has_net() && t1.net().isRailNet())
- netlist().error("Input %s already connected\n", t1.name().cstr());
+ netlist().error("Input %s already connected\n", t1.name().cstr());
connect_input_output(dynamic_cast<netlist_input_t &>(t1), dynamic_cast<netlist_output_t &>(t2));
}
else if (t1.isType(netlist_core_terminal_t::OUTPUT) && t2.isType(netlist_core_terminal_t::TERMINAL))
@@ -589,9 +589,9 @@ void netlist_setup_t::connect(netlist_core_terminal_t &t1_in, netlist_core_termi
void netlist_setup_t::resolve_inputs()
{
- bool has_twoterms = false;
+ bool has_twoterms = false;
- netlist().log("Resolving inputs ...");
+ netlist().log("Resolving inputs ...");
for (const link_t *entry = m_links.first(); entry != NULL; entry = m_links.next(entry))
{
@@ -612,68 +612,68 @@ void netlist_setup_t::resolve_inputs()
//VERBOSE_OUT(("%s %d\n", out->netdev()->name(), *out->Q_ptr()));
}
- netlist().log("deleting empty nets ...");
+ netlist().log("deleting empty nets ...");
// delete empty nets ... and save m_list ...
- netlist_net_t::list_t todelete;
+ netlist_net_t::list_t todelete;
for (netlist_net_t *const *pn = netlist().m_nets.first(); pn != NULL; pn = netlist().m_nets.next(pn))
{
if ((*pn)->m_list.is_empty())
{
- todelete.add(*pn);
+ todelete.add(*pn);
}
else
{
- for (netlist_core_terminal_t *p = (*pn)->m_list.first(); p != NULL; p = (*pn)->m_list.next(p))
- (*pn)->m_registered.add(p);
+ for (netlist_core_terminal_t *p = (*pn)->m_list.first(); p != NULL; p = (*pn)->m_list.next(p))
+ (*pn)->m_registered.add(p);
+ }
+ }
+
+ for (int i=0; i < todelete.count(); i++)
+ {
+ netlist().log("Deleting net %s ...", todelete[i]->name().cstr());
+ netlist().m_nets.remove(todelete[i]);
+ if (!todelete[i]->isRailNet())
+ delete todelete[i];
+ }
+
+ pstring errstr("");
+
+ netlist().log("looking for terminals not connected ...");
+ for (tagmap_terminal_t::entry_t *entry = m_terminals.first(); entry != NULL; entry = m_terminals.next(entry))
+ {
+ if (!entry->object()->has_net())
+ errstr += pstring::sprintf("Found terminal %s without a net\n",
+ entry->object()->name().cstr());
+ else if (entry->object()->net().num_cons() == 0)
+ netlist().warning("Found terminal %s without connections",
+ entry->object()->name().cstr());
+ }
+ if (errstr != "")
+ netlist().error("%s", errstr.cstr());
+
+
+ netlist().log("looking for two terms connected to rail nets ...\n");
+ for (tagmap_devices_t::entry_t *entry = netlist().m_devices.first(); entry != NULL; entry = netlist().m_devices.next(entry))
+ {
+ NETLIB_NAME(twoterm) *t = dynamic_cast<NETLIB_NAME(twoterm) *>(entry->object());
+ if (t != NULL)
+ {
+ has_twoterms = true;
+ if (t->m_N.net().isRailNet() && t->m_P.net().isRailNet())
+ netlist().error("Found device %s connected only to railterminals %s/%s\n",
+ t->name().cstr(), t->m_N.net().name().cstr(), t->m_P.net().name().cstr());
}
}
- for (int i=0; i < todelete.count(); i++)
- {
- netlist().log("Deleting net %s ...", todelete[i]->name().cstr());
- netlist().m_nets.remove(todelete[i]);
- if (!todelete[i]->isRailNet())
- delete todelete[i];
- }
-
- pstring errstr("");
-
- netlist().log("looking for terminals not connected ...");
- for (tagmap_terminal_t::entry_t *entry = m_terminals.first(); entry != NULL; entry = m_terminals.next(entry))
- {
- if (!entry->object()->has_net())
- errstr += pstring::sprintf("Found terminal %s without a net\n",
- entry->object()->name().cstr());
- else if (entry->object()->net().num_cons() == 0)
- netlist().warning("Found terminal %s without connections",
- entry->object()->name().cstr());
- }
- if (errstr != "")
- netlist().error("%s", errstr.cstr());
-
-
- netlist().log("looking for two terms connected to rail nets ...\n");
- for (tagmap_devices_t::entry_t *entry = netlist().m_devices.first(); entry != NULL; entry = netlist().m_devices.next(entry))
- {
- NETLIB_NAME(twoterm) *t = dynamic_cast<NETLIB_NAME(twoterm) *>(entry->object());
- if (t != NULL)
- {
- has_twoterms = true;
- if (t->m_N.net().isRailNet() && t->m_P.net().isRailNet())
- netlist().error("Found device %s connected only to railterminals %s/%s\n",
- t->name().cstr(), t->m_N.net().name().cstr(), t->m_P.net().name().cstr());
- }
- }
-
- netlist().log("initialize solver ...\n");
+ netlist().log("initialize solver ...\n");
if (m_netlist.solver() == NULL)
{
- if (has_twoterms)
- netlist().error("No solver found for this net although analog elements are present\n");
+ if (has_twoterms)
+ netlist().error("No solver found for this net although analog elements are present\n");
}
else
m_netlist.solver()->post_start();
diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h
index b6f474cde94..0c2546afff2 100644
--- a/src/emu/netlist/nl_setup.h
+++ b/src/emu/netlist/nl_setup.h
@@ -39,7 +39,7 @@
setup.register_link(# _name "." # _input, # _output);
#define NET_C(_term1, ...) \
- setup.register_link_arr( #_term1 ", " # __VA_ARGS__);
+ setup.register_link_arr( #_term1 ", " # __VA_ARGS__);
#define PARAM(_name, _val) \
setup.register_param(# _name, _val);
@@ -55,17 +55,15 @@ ATTR_COLD void NETLIST_NAME(_name)(netlist_setup_t &setup)
#define NETLIST_START(_name) \
ATTR_COLD void NETLIST_NAME(_name)(netlist_setup_t &setup) \
{
-
-
#define NETLIST_END() }
#define INCLUDE(_name) \
NETLIST_NAME(_name)(setup);
#define SUBMODEL(_name, _model) \
- setup.namespace_push(# _name); \
- NETLIST_NAME(_model)(setup); \
- setup.namespace_pop();
+ setup.namespace_push(# _name); \
+ NETLIST_NAME(_model)(setup); \
+ setup.namespace_pop();
// ----------------------------------------------------------------------------------------
// FIXME: Clean this up
@@ -117,9 +115,9 @@ public:
netlist_base_t &netlist() { return m_netlist; }
const netlist_base_t &netlist() const { return m_netlist; }
netlist_factory_t &factory() { return m_factory; }
- const netlist_factory_t &factory() const { return m_factory; }
+ const netlist_factory_t &factory() const { return m_factory; }
- pstring build_fqn(const pstring &obj_name) const;
+ pstring build_fqn(const pstring &obj_name) const;
netlist_device_t *register_dev(netlist_device_t *dev, const pstring &name);
void remove_dev(const pstring &name);
@@ -127,7 +125,7 @@ public:
void register_model(const pstring &model);
void register_alias(const pstring &alias, const pstring &out);
void register_alias_nofqn(const pstring &alias, const pstring &out);
- void register_link_arr(const pstring &terms);
+ void register_link_arr(const pstring &terms);
void register_link(const pstring &sin, const pstring &sout);
void register_param(const pstring &param, const pstring &value);
void register_param(const pstring &param, const double value);
@@ -148,7 +146,7 @@ public:
/* handle namespace */
void namespace_push(const pstring &aname);
- void namespace_pop();
+ void namespace_pop();
/* not ideal, but needed for save_state */
tagmap_terminal_t m_terminals;
@@ -172,7 +170,7 @@ private:
int m_proxy_cnt;
- netlist_stack_t<pstring> m_stack;
+ netlist_stack_t<pstring> m_stack;
void connect_terminals(netlist_core_terminal_t &in, netlist_core_terminal_t &out);
diff --git a/src/emu/netlist/pstate.c b/src/emu/netlist/pstate.c
index 1bc08410a7f..5b07692e460 100644
--- a/src/emu/netlist/pstate.c
+++ b/src/emu/netlist/pstate.c
@@ -17,10 +17,10 @@ ATTR_COLD void pstate_manager_t::save_state_ptr(const pstring &stname, const pst
pstring fullname = stname;
ATTR_UNUSED pstring ts[] = {
"NOT_SUPPORTED",
- "DT_CUSTOM",
+ "DT_CUSTOM",
"DT_DOUBLE",
"DT_INT64",
- "DT_INT16",
+ "DT_INT16",
"DT_INT8",
"DT_INT",
"DT_BOOLEAN"
@@ -33,30 +33,30 @@ ATTR_COLD void pstate_manager_t::save_state_ptr(const pstring &stname, const pst
ATTR_COLD void pstate_manager_t::remove_save_items(const void *owner)
{
- pstate_entry_t::list_t todelete;
-
- for (int i=0; i < m_save.count(); i++)
- {
- if (m_save[i]->m_owner == owner)
- todelete.add(m_save[i]);
- }
- for (int i=0; i < todelete.count(); i++)
- {
- m_save.remove(todelete[i]);
- }
- todelete.clear_and_free();
+ pstate_entry_t::list_t todelete;
+
+ for (int i=0; i < m_save.count(); i++)
+ {
+ if (m_save[i]->m_owner == owner)
+ todelete.add(m_save[i]);
+ }
+ for (int i=0; i < todelete.count(); i++)
+ {
+ m_save.remove(todelete[i]);
+ }
+ todelete.clear_and_free();
}
ATTR_COLD void pstate_manager_t::pre_save()
{
for (int i=0; i < m_save.count(); i++)
- if (m_save[i]->m_dt == DT_CUSTOM)
- m_save[i]->m_callback->on_pre_save();
+ if (m_save[i]->m_dt == DT_CUSTOM)
+ m_save[i]->m_callback->on_pre_save();
}
ATTR_COLD void pstate_manager_t::post_load()
{
- for (int i=0; i < m_save.count(); i++)
- if (m_save[i]->m_dt == DT_CUSTOM)
- m_save[i]->m_callback->on_post_load();
+ for (int i=0; i < m_save.count(); i++)
+ if (m_save[i]->m_dt == DT_CUSTOM)
+ m_save[i]->m_callback->on_post_load();
}
diff --git a/src/emu/netlist/pstate.h b/src/emu/netlist/pstate.h
index 4265da06b8d..3e1f73e7cc5 100644
--- a/src/emu/netlist/pstate.h
+++ b/src/emu/netlist/pstate.h
@@ -29,7 +29,7 @@ enum pstate_data_type_e {
DT_CUSTOM,
DT_DOUBLE,
DT_INT64,
- DT_INT16,
+ DT_INT16,
DT_INT8,
DT_INT,
DT_BOOLEAN
@@ -70,22 +70,22 @@ protected:
struct pstate_entry_t
{
- typedef netlist_list_t<pstate_entry_t *> list_t;
-
- pstate_entry_t(const pstring &stname, const pstate_data_type_e dt, const void *owner,
- const int size, const int count, void *ptr)
- : m_name(stname), m_dt(dt), m_owner(owner), m_callback(NULL), m_size(size), m_count(count), m_ptr(ptr) { }
-
- pstate_entry_t(const pstring &stname, const void *owner, pstate_callback_t *callback)
- : m_name(stname), m_dt(DT_CUSTOM), m_owner(owner), m_callback(callback), m_size(0), m_count(0), m_ptr(NULL) { }
-
- pstring m_name;
- const pstate_data_type_e m_dt;
- const void *m_owner;
- pstate_callback_t *m_callback;
- const int m_size;
- const int m_count;
- void *m_ptr;
+ typedef netlist_list_t<pstate_entry_t *> list_t;
+
+ pstate_entry_t(const pstring &stname, const pstate_data_type_e dt, const void *owner,
+ const int size, const int count, void *ptr)
+ : m_name(stname), m_dt(dt), m_owner(owner), m_callback(NULL), m_size(size), m_count(count), m_ptr(ptr) { }
+
+ pstate_entry_t(const pstring &stname, const void *owner, pstate_callback_t *callback)
+ : m_name(stname), m_dt(DT_CUSTOM), m_owner(owner), m_callback(callback), m_size(0), m_count(0), m_ptr(NULL) { }
+
+ pstring m_name;
+ const pstate_data_type_e m_dt;
+ const void *m_owner;
+ pstate_callback_t *m_callback;
+ const int m_size;
+ const int m_count;
+ void *m_ptr;
};
class pstate_manager_t
@@ -125,8 +125,8 @@ private:
template<> ATTR_COLD inline void pstate_manager_t::save_item(pstate_callback_t &state, const void *owner, const pstring &stname)
{
//save_state_ptr(stname, DT_CUSTOM, 0, 1, &state);
- pstate_entry_t *p = new pstate_entry_t(stname, owner, &state);
- m_save.add(p);
+ pstate_entry_t *p = new pstate_entry_t(stname, owner, &state);
+ m_save.add(p);
state.register_state(*this, stname);
}
diff --git a/src/emu/netlist/pstring.h b/src/emu/netlist/pstring.h
index d3bf7f61840..1928a580b01 100644
--- a/src/emu/netlist/pstring.h
+++ b/src/emu/netlist/pstring.h
@@ -97,7 +97,7 @@ public:
inline const char *cstr() const { return m_ptr->str(); }
// concatenation operators
- pstring& operator+=(const char c) { char buf[2] = { c, 0 }; pcat(buf); return *this; }
+ pstring& operator+=(const char c) { char buf[2] = { c, 0 }; pcat(buf); return *this; }
pstring& operator+=(const pstring &string) { pcat(string.cstr()); return *this; }
friend pstring operator+(const pstring &lhs, const pstring &rhs) { return pstring(lhs) += rhs; }
friend pstring operator+(const pstring &lhs, const char *rhs) { return pstring(lhs) += rhs; }
@@ -133,12 +133,12 @@ public:
return (result != NULL) ? (result - cstr()) : -1;
}
- inline int find(const char search, int start = 0) const
- {
- int alen = len();
- const char *result = strchr(cstr() + MIN(start, alen), search);
- return (result != NULL) ? (result - cstr()) : -1;
- }
+ inline int find(const char search, int start = 0) const
+ {
+ int alen = len();
+ const char *result = strchr(cstr() + MIN(start, alen), search);
+ return (result != NULL) ? (result - cstr()) : -1;
+ }
// various
@@ -174,7 +174,7 @@ protected:
struct str_t
{
- str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; }
+ str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; }
str_t(int alen) : m_ref_count(1), m_len(alen) { m_str[0] = 0; }
char *str() { return &m_str[0]; }