diff options
Diffstat (limited to 'src/emu/netlist')
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 ¶m); - ATTR_COLD inline void initial(const pstring &val) { m_param = val; } + ATTR_HOT inline void setTo(const pstring ¶m); + 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 ¶m, const T initialVal); + template <class C, class T> + ATTR_COLD void register_param(const pstring &sname, C ¶m, 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 ¶m) { - 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 ¶m_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 ¶m_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 ¶m, const double value) void netlist_setup_t::register_param(const pstring ¶m, 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 ¶m_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 ¶m_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 ¶m, const pstring &value); void register_param(const pstring ¶m, 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]; } |
