diff options
96 files changed, 1146 insertions, 1124 deletions
diff --git a/src/devices/machine/netlist.h b/src/devices/machine/netlist.h index a5a71ae2318..671085443c0 100644 --- a/src/devices/machine/netlist.h +++ b/src/devices/machine/netlist.h @@ -503,8 +503,8 @@ private: class NETLIB_NAME(analog_callback) : public netlist::device_t { public: - NETLIB_NAME(analog_callback)() - : device_t(), m_cpu_device(nullptr), m_last(0) { } + NETLIB_NAME(analog_callback)(netlist::netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name), m_cpu_device(nullptr), m_last(0) { } ATTR_COLD void start() override { @@ -552,8 +552,8 @@ private: class NETLIB_NAME(sound_out) : public netlist::device_t { public: - NETLIB_NAME(sound_out)() - : netlist::device_t() { } + NETLIB_NAME(sound_out)(netlist::netlist_t &anetlist, const pstring &name) + : netlist::device_t(anetlist, name) { } static const int BUFSIZE = 2048; @@ -626,8 +626,8 @@ private: class NETLIB_NAME(sound_in) : public netlist::device_t { public: - NETLIB_NAME(sound_in)() - : netlist::device_t() { } + NETLIB_NAME(sound_in)(netlist::netlist_t &anetlist, const pstring &name) + : netlist::device_t(anetlist, name) { } static const int MAX_INPUT_CHANNELS = 10; diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp index 5f5a3611b97..4d2335113ca 100644 --- a/src/lib/netlist/analog/nld_bjt.cpp +++ b/src/lib/netlist/analog/nld_bjt.cpp @@ -44,8 +44,8 @@ private: // nld_Q // ---------------------------------------------------------------------------------------- -NETLIB_NAME(Q)::NETLIB_NAME(Q)(const family_t afamily) -: device_t(afamily) +NETLIB_NAME(Q)::NETLIB_NAME(Q)(const family_t afamily, netlist_t &anetlist, const pstring &name) +: device_t(afamily, anetlist, name) , m_qtype(BJT_NPN) { } NETLIB_NAME(Q)::~NETLIB_NAME(Q)() diff --git a/src/lib/netlist/analog/nld_bjt.h b/src/lib/netlist/analog/nld_bjt.h index 07f5923c17c..5448964a335 100644 --- a/src/lib/netlist/analog/nld_bjt.h +++ b/src/lib/netlist/analog/nld_bjt.h @@ -40,7 +40,7 @@ public: BJT_PNP }; - NETLIB_NAME(Q)(const family_t afamily); + NETLIB_NAME(Q)(const family_t afamily, netlist_t &anetlist, const pstring &name); virtual ~NETLIB_NAME(Q)(); inline q_type qtype() const { return m_qtype; } @@ -60,8 +60,8 @@ class NETLIB_NAME(QBJT) : public NETLIB_NAME(Q) { public: - NETLIB_NAME(QBJT)(const family_t afamily) - : NETLIB_NAME(Q)(afamily) { } + NETLIB_NAME(QBJT)(const family_t afamily, netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(Q)(afamily, anetlist, name) { } virtual ~NETLIB_NAME(QBJT)() { } @@ -94,12 +94,15 @@ private: class NETLIB_NAME(QBJT_switch) : public NETLIB_NAME(QBJT) { public: - ATTR_COLD NETLIB_NAME(QBJT_switch)() - : NETLIB_NAME(QBJT)(BJT_SWITCH), - m_RB(object_t::ANALOG), - m_RC(object_t::ANALOG), - m_BC_dummy(object_t::ANALOG), - m_gB(NETLIST_GMIN_DEFAULT), m_gC(NETLIST_GMIN_DEFAULT), m_V(0.0), m_state_on(0) { } + ATTR_COLD NETLIB_NAME(QBJT_switch)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(QBJT)(BJT_SWITCH, anetlist, name), + m_RB(object_t::ANALOG, anetlist, "m_RB"), + m_RC(object_t::ANALOG, anetlist, "m_RC"), + m_BC_dummy(object_t::ANALOG, anetlist, "m_BC"), + m_gB(NETLIST_GMIN_DEFAULT), + m_gC(NETLIST_GMIN_DEFAULT), + m_V(0.0), + m_state_on(0) { } ATTR_HOT void virtual update() override; @@ -134,11 +137,11 @@ 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(object_t::ANALOG), - m_D_EB(object_t::ANALOG), - m_D_EC(object_t::ANALOG), + ATTR_COLD NETLIB_NAME(QBJT_EB)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(QBJT)(BJT_EB, anetlist, name), + m_D_CB(object_t::ANALOG, anetlist, "m_D_CB"), + m_D_EB(object_t::ANALOG, anetlist, "m_D_EB"), + m_D_EC(object_t::ANALOG, anetlist, "m_D_EC"), m_alpha_f(0), m_alpha_r(0) { } diff --git a/src/lib/netlist/analog/nld_fourterm.cpp b/src/lib/netlist/analog/nld_fourterm.cpp index 51502319f83..7cba4b15588 100644 --- a/src/lib/netlist/analog/nld_fourterm.cpp +++ b/src/lib/netlist/analog/nld_fourterm.cpp @@ -34,8 +34,8 @@ void NETLIB_NAME(VCCS)::start_internal(const nl_double def_RI) register_terminal("_OP1", m_OP1); register_terminal("_ON1", m_ON1); - m_IP.m_otherterm = &m_IN; // <= this should be nullptr and terminal be filtered out prior to solving... - m_IN.m_otherterm = &m_IP; // <= this should be nullptr 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; diff --git a/src/lib/netlist/analog/nld_fourterm.h b/src/lib/netlist/analog/nld_fourterm.h index 7bed4e71a52..4f40eea3dc8 100644 --- a/src/lib/netlist/analog/nld_fourterm.h +++ b/src/lib/netlist/analog/nld_fourterm.h @@ -54,10 +54,10 @@ NETLIB_NAMESPACE_DEVICES_START() class NETLIB_NAME(VCCS) : public device_t { public: - ATTR_COLD NETLIB_NAME(VCCS)() - : device_t(VCCS), m_gfac(1.0) { } - ATTR_COLD NETLIB_NAME(VCCS)(const family_t afamily) - : device_t(afamily), m_gfac(1.0) { } + ATTR_COLD NETLIB_NAME(VCCS)(netlist_t &anetlist, const pstring &name) + : device_t(VCCS, anetlist, name), m_gfac(1.0) { } + ATTR_COLD NETLIB_NAME(VCCS)(const family_t afamily, netlist_t &anetlist, const pstring &name) + : device_t(afamily, anetlist, name), m_gfac(1.0) { } param_double_t m_G; param_double_t m_RI; @@ -87,10 +87,10 @@ protected: class NETLIB_NAME(LVCCS) : public NETLIB_NAME(VCCS) { public: - ATTR_COLD NETLIB_NAME(LVCCS)() - : NETLIB_NAME(VCCS)(LVCCS), m_vi(0.0) { } - ATTR_COLD NETLIB_NAME(LVCCS)(const family_t afamily) - : NETLIB_NAME(VCCS)(afamily), m_vi(0.0) { } + ATTR_COLD NETLIB_NAME(LVCCS)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(VCCS)(LVCCS, anetlist, name), m_vi(0.0) { } + ATTR_COLD NETLIB_NAME(LVCCS)(const family_t afamily, netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(VCCS)(afamily, anetlist, name), m_vi(0.0) { } param_double_t m_cur_limit; /* current limit */ @@ -130,8 +130,8 @@ protected: class NETLIB_NAME(CCCS) : public NETLIB_NAME(VCCS) { public: - ATTR_COLD NETLIB_NAME(CCCS)() - : NETLIB_NAME(VCCS)(CCCS), m_gfac(1.0) { } + ATTR_COLD NETLIB_NAME(CCCS)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(VCCS)(CCCS, anetlist, name), m_gfac(1.0) { } protected: virtual void start() override; @@ -174,8 +174,8 @@ protected: class NETLIB_NAME(VCVS) : public NETLIB_NAME(VCCS) { public: - ATTR_COLD NETLIB_NAME(VCVS)() - : NETLIB_NAME(VCCS)(VCVS) { } + ATTR_COLD NETLIB_NAME(VCVS)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(VCCS)(VCVS, anetlist, name) { } param_double_t m_RO; diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp index 38a32b0d211..7a844d01a6a 100644 --- a/src/lib/netlist/analog/nld_opamps.cpp +++ b/src/lib/netlist/analog/nld_opamps.cpp @@ -123,36 +123,36 @@ NETLIB_UPDATE(OPAMP) NETLIB_RESET(OPAMP) { - m_G1.do_reset(); - m_G1.m_RI.setTo(m_model.model_value("RI")); + m_G1->do_reset(); + m_G1->m_RI.setTo(m_model.model_value("RI")); if (m_type == 1) { double RO = m_model.model_value("RO"); double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RO; - m_RP.set_R(RO); - m_G1.m_G.setTo(G); + m_RP->set_R(RO); + m_G1->m_G.setTo(G); } else if (m_type == 3) { - m_EBUF.do_reset(); - m_DP.do_reset(); - m_DN.do_reset(); - m_CP.do_reset(); - m_RP.do_reset(); + m_EBUF->do_reset(); + m_DP->do_reset(); + m_DN->do_reset(); + m_CP->do_reset(); + m_RP->do_reset(); - m_EBUF.m_G.setTo(1.0); - m_EBUF.m_RO.setTo(m_model.model_value("RO")); - m_DP.m_model.setTo("D(IS=1e-15 N=1)"); - m_DN.m_model.setTo("D(IS=1e-15 N=1)"); + m_EBUF->m_G.setTo(1.0); + m_EBUF->m_RO.setTo(m_model.model_value("RO")); + m_DP->m_model.setTo("D(IS=1e-15 N=1)"); + m_DN->m_model.setTo("D(IS=1e-15 N=1)"); double CP = m_model.model_value("DAB") / m_model.model_value("SLEW"); double RP = 0.5 / 3.1459 / CP / m_model.model_value("FPF"); double G = m_model.model_value("UGF") / m_model.model_value("FPF") / RP; - m_CP.m_C.setTo(CP); - m_RP.set_R(RP); - m_G1.m_G.setTo(G); + m_CP->m_C.setTo(CP); + m_RP->set_R(RP); + m_G1->m_G.setTo(G); } diff --git a/src/lib/netlist/analog/nld_opamps.h b/src/lib/netlist/analog/nld_opamps.h index 2cee8696bca..65ad97b2b42 100644 --- a/src/lib/netlist/analog/nld_opamps.h +++ b/src/lib/netlist/analog/nld_opamps.h @@ -35,12 +35,12 @@ NETLIST_EXTERNAL(opamp_lm3900) NETLIB_NAMESPACE_DEVICES_START() NETLIB_DEVICE_WITH_PARAMS(OPAMP, - NETLIB_NAME(R) m_RP; - NETLIB_NAME(C) m_CP; - NETLIB_NAME(VCCS) m_G1; - NETLIB_NAME(VCVS) m_EBUF; - NETLIB_NAME(D) m_DP; - NETLIB_NAME(D) m_DN; + NETLIB_SUB(R) m_RP; + NETLIB_SUB(C) m_CP; + NETLIB_SUB(VCCS) m_G1; + NETLIB_SUB(VCVS) m_EBUF; + NETLIB_SUB(D) m_DP; + NETLIB_SUB(D) m_DN; analog_input_t m_VCC; analog_input_t m_GND; diff --git a/src/lib/netlist/analog/nld_switches.cpp b/src/lib/netlist/analog/nld_switches.cpp index 6166463c6f8..57a895f1d18 100644 --- a/src/lib/netlist/analog/nld_switches.cpp +++ b/src/lib/netlist/analog/nld_switches.cpp @@ -23,29 +23,29 @@ NETLIB_START(switch1) register_param("POS", m_POS, 0); - register_subalias("1", m_R.m_P); - register_subalias("2", m_R.m_N); + register_subalias("1", m_R->m_P); + register_subalias("2", m_R->m_N); } NETLIB_RESET(switch1) { - m_R.do_reset(); + m_R->do_reset(); - m_R.set_R(R_OFF); + m_R->set_R(R_OFF); } NETLIB_UPDATE(switch1) { if (m_POS.Value() == 0) { - m_R.set_R(R_OFF); + m_R->set_R(R_OFF); } else { - m_R.set_R(R_ON); + m_R->set_R(R_ON); } - m_R.update_dev(); + m_R->update_dev(); } NETLIB_UPDATE_PARAM(switch1) @@ -65,38 +65,38 @@ NETLIB_START(switch2) register_param("POS", m_POS, 0); - connect_late(m_R[0].m_N, m_R[1].m_N); + connect_late(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); + 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]->set_R(R_OFF); + m_R[1]->set_R(R_ON); } - m_R[0].update_dev(); - m_R[1].update_dev(); + m_R[0]->update_dev(); + m_R[1]->update_dev(); } NETLIB_UPDATE_PARAM(switch2) diff --git a/src/lib/netlist/analog/nld_switches.h b/src/lib/netlist/analog/nld_switches.h index 6cec34ceb4c..590761b01e6 100644 --- a/src/lib/netlist/analog/nld_switches.h +++ b/src/lib/netlist/analog/nld_switches.h @@ -30,13 +30,13 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_DEVICE_WITH_PARAMS(switch1, - NETLIB_NAME(R_base) m_R; + NETLIB_SUB(R_base) m_R; param_int_t m_POS; ); NETLIB_DEVICE_WITH_PARAMS(switch2, - NETLIB_NAME(R_base) m_R[2]; + NETLIB_SUB(R_base) m_R[2]; param_int_t m_POS; ); diff --git a/src/lib/netlist/analog/nld_twoterm.cpp b/src/lib/netlist/analog/nld_twoterm.cpp index 819c2c2e11e..867d90423ec 100644 --- a/src/lib/netlist/analog/nld_twoterm.cpp +++ b/src/lib/netlist/analog/nld_twoterm.cpp @@ -48,15 +48,15 @@ ATTR_COLD void generic_diode::save(pstring name, object_t &parent) // nld_twoterm // ---------------------------------------------------------------------------------------- -ATTR_COLD NETLIB_NAME(twoterm)::NETLIB_NAME(twoterm)(const family_t afamily) - : device_t(afamily) +ATTR_COLD NETLIB_NAME(twoterm)::NETLIB_NAME(twoterm)(const family_t afamily, netlist_t &anetlist, const pstring &name) + : device_t(afamily, anetlist, name) { m_P.m_otherterm = &m_N; m_N.m_otherterm = &m_P; } -ATTR_COLD NETLIB_NAME(twoterm)::NETLIB_NAME(twoterm)() - : device_t(TWOTERM) +ATTR_COLD NETLIB_NAME(twoterm)::NETLIB_NAME(twoterm)(netlist_t &anetlist, const pstring &name) + : device_t(TWOTERM, anetlist, name) { m_P.m_otherterm = &m_N; m_N.m_otherterm = &m_P; @@ -137,11 +137,11 @@ NETLIB_START(POT) register_sub("R1", m_R1); register_sub("R2", m_R2); - register_subalias("1", m_R1.m_P); - register_subalias("2", m_R1.m_N); - register_subalias("3", m_R2.m_N); + register_subalias("1", m_R1->m_P); + register_subalias("2", m_R1->m_N); + register_subalias("3", m_R2->m_N); - connect_late(m_R2.m_P, m_R1.m_N); + connect_late(m_R2->m_P, m_R1->m_N); register_param("R", m_R, 1.0 / netlist().gmin()); register_param("DIAL", m_Dial, 0.5); @@ -151,14 +151,14 @@ 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) { - m_R1.update_dev(); - m_R2.update_dev(); + m_R1->update_dev(); + m_R2->update_dev(); } NETLIB_UPDATE_PARAM(POT) @@ -167,11 +167,11 @@ NETLIB_UPDATE_PARAM(POT) if (m_DialIsLog.Value()) v = (nl_math::exp(v) - 1.0) / (nl_math::exp(1.0) - 1.0); - m_R1.update_dev(); - m_R2.update_dev(); + m_R1->update_dev(); + m_R2->update_dev(); - m_R1.set_R(std::max(m_R.Value() * v, netlist().gmin())); - m_R2.set_R(std::max(m_R.Value() * (NL_FCONST(1.0) - v), netlist().gmin())); + m_R1->set_R(std::max(m_R.Value() * v, netlist().gmin())); + m_R2->set_R(std::max(m_R.Value() * (NL_FCONST(1.0) - v), netlist().gmin())); } @@ -183,8 +183,8 @@ NETLIB_START(POT2) { register_sub("R1", m_R1); - register_subalias("1", m_R1.m_P); - register_subalias("2", m_R1.m_N); + register_subalias("1", m_R1->m_P); + register_subalias("2", m_R1->m_N); register_param("R", m_R, 1.0 / netlist().gmin()); register_param("DIAL", m_Dial, 0.5); @@ -195,12 +195,12 @@ NETLIB_START(POT2) NETLIB_RESET(POT2) { - m_R1.do_reset(); + m_R1->do_reset(); } NETLIB_UPDATE(POT2) { - m_R1.update_dev(); + m_R1->update_dev(); } NETLIB_UPDATE_PARAM(POT2) @@ -212,9 +212,9 @@ NETLIB_UPDATE_PARAM(POT2) if (m_Reverse.Value()) v = 1.0 - v; - m_R1.update_dev(); + m_R1->update_dev(); - m_R1.set_R(std::max(m_R.Value() * v, netlist().gmin())); + m_R1->set_R(std::max(m_R.Value() * v, netlist().gmin())); } // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h index 9a716094163..bd61617af61 100644 --- a/src/lib/netlist/analog/nld_twoterm.h +++ b/src/lib/netlist/analog/nld_twoterm.h @@ -103,8 +103,8 @@ NETLIB_NAMESPACE_DEVICES_START() class NETLIB_NAME(twoterm) : public device_t { public: - ATTR_COLD NETLIB_NAME(twoterm)(const family_t afamily); - ATTR_COLD NETLIB_NAME(twoterm)(); + ATTR_COLD NETLIB_NAME(twoterm)(const family_t afamily, netlist_t &anetlist, const pstring &name); + ATTR_COLD NETLIB_NAME(twoterm)(netlist_t &anetlist, const pstring &name); terminal_t m_P; terminal_t m_N; @@ -147,7 +147,8 @@ private: class NETLIB_NAME(R_base) : public NETLIB_NAME(twoterm) { public: - ATTR_COLD NETLIB_NAME(R_base)() : NETLIB_NAME(twoterm)(RESISTOR) { } + ATTR_COLD NETLIB_NAME(R_base)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(twoterm)(RESISTOR, anetlist, name) { } inline void set_R(const nl_double R) { @@ -169,8 +170,8 @@ NETLIB_DEVICE_WITH_PARAMS_DERIVED(R, R_base, // ----------------------------------------------------------------------------- NETLIB_DEVICE_WITH_PARAMS(POT, - NETLIB_NAME(R_base) m_R1; - NETLIB_NAME(R_base) m_R2; + NETLIB_SUB(R_base) m_R1; + NETLIB_SUB(R_base) m_R2; param_double_t m_R; param_double_t m_Dial; @@ -178,7 +179,7 @@ NETLIB_DEVICE_WITH_PARAMS(POT, ); NETLIB_DEVICE_WITH_PARAMS(POT2, - NETLIB_NAME(R_base) m_R1; + NETLIB_SUB(R_base) m_R1; param_double_t m_R; param_double_t m_Dial; @@ -194,7 +195,8 @@ NETLIB_DEVICE_WITH_PARAMS(POT2, class NETLIB_NAME(C) : public NETLIB_NAME(twoterm) { public: - ATTR_COLD NETLIB_NAME(C)() : NETLIB_NAME(twoterm)(CAPACITOR), m_GParallel(0.0) { } + ATTR_COLD NETLIB_NAME(C)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(twoterm)(CAPACITOR, anetlist, name), m_GParallel(0.0) { } ATTR_HOT void step_time(const nl_double st) override; @@ -291,7 +293,8 @@ private: class NETLIB_NAME(D) : public NETLIB_NAME(twoterm) { public: - ATTR_COLD NETLIB_NAME(D)() : NETLIB_NAME(twoterm)(DIODE) { } + ATTR_COLD NETLIB_NAME(D)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(twoterm)(DIODE, anetlist, name) { } NETLIB_UPDATE_TERMINALSI(); @@ -314,7 +317,8 @@ protected: class NETLIB_NAME(VS) : public NETLIB_NAME(twoterm) { public: - ATTR_COLD NETLIB_NAME(VS)() : NETLIB_NAME(twoterm)(VS) { } + ATTR_COLD NETLIB_NAME(VS)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(twoterm)(VS, anetlist, name) { } protected: virtual void start() override; @@ -332,7 +336,8 @@ protected: class NETLIB_NAME(CS) : public NETLIB_NAME(twoterm) { public: - ATTR_COLD NETLIB_NAME(CS)() : NETLIB_NAME(twoterm)(CS) { } + ATTR_COLD NETLIB_NAME(CS)(netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(twoterm)(CS, anetlist, name) { } protected: virtual void start() override; diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp index efb52d063b4..226d8c44c48 100644 --- a/src/lib/netlist/devices/nld_4020.cpp +++ b/src/lib/netlist/devices/nld_4020.cpp @@ -15,26 +15,26 @@ NETLIB_START(CD4020) register_sub("supply", m_supply); register_input("RESET", m_RESET); - register_subalias("IP", sub.m_IP); - register_subalias("Q1", sub.m_Q[0]); - register_subalias("Q4", sub.m_Q[3]); - register_subalias("Q5", sub.m_Q[4]); - register_subalias("Q6", sub.m_Q[5]); - register_subalias("Q7", sub.m_Q[6]); - register_subalias("Q8", sub.m_Q[7]); - register_subalias("Q9", sub.m_Q[8]); - register_subalias("Q10", sub.m_Q[9]); - register_subalias("Q11", sub.m_Q[10]); - register_subalias("Q12", sub.m_Q[11]); - register_subalias("Q13", sub.m_Q[12]); - register_subalias("Q14", sub.m_Q[13]); - register_subalias("VDD", m_supply.m_vdd); - register_subalias("VSS", m_supply.m_vss); + register_subalias("IP", sub->m_IP); + register_subalias("Q1", sub->m_Q[0]); + register_subalias("Q4", sub->m_Q[3]); + register_subalias("Q5", sub->m_Q[4]); + register_subalias("Q6", sub->m_Q[5]); + register_subalias("Q7", sub->m_Q[6]); + register_subalias("Q8", sub->m_Q[7]); + register_subalias("Q9", sub->m_Q[8]); + register_subalias("Q10", sub->m_Q[9]); + register_subalias("Q11", sub->m_Q[10]); + register_subalias("Q12", sub->m_Q[11]); + register_subalias("Q13", sub->m_Q[12]); + register_subalias("Q14", sub->m_Q[13]); + register_subalias("VDD", m_supply->m_vdd); + register_subalias("VSS", m_supply->m_vss); } NETLIB_RESET(CD4020) { - sub.do_reset(); + sub->do_reset(); } @@ -76,15 +76,15 @@ NETLIB_UPDATE(CD4020) { if (INPLOGIC(m_RESET)) { - sub.m_cnt = 0; - sub.m_IP.inactivate(); + sub->m_cnt = 0; + sub->m_IP.inactivate(); /* static */ const netlist_time reset_time = netlist_time::from_nsec(140); - OUTLOGIC(sub.m_Q[0], 0, reset_time); + OUTLOGIC(sub->m_Q[0], 0, reset_time); for (int i=3; i<14; i++) - OUTLOGIC(sub.m_Q[i], 0, reset_time); + OUTLOGIC(sub->m_Q[i], 0, reset_time); } else - sub.m_IP.activate_hl(); + sub->m_IP.activate_hl(); } inline NETLIB_FUNC_VOID(CD4020_sub, update_outputs, (const UINT16 cnt)) diff --git a/src/lib/netlist/devices/nld_4020.h b/src/lib/netlist/devices/nld_4020.h index 78d7199db1b..759e7dc177f 100644 --- a/src/lib/netlist/devices/nld_4020.h +++ b/src/lib/netlist/devices/nld_4020.h @@ -57,8 +57,8 @@ NETLIB_SUBDEVICE(CD4020_sub, NETLIB_DEVICE(CD4020, NETLIB_LOGIC_FAMILY(CD4XXX) - NETLIB_NAME(CD4020_sub) sub; - NETLIB_NAME(vdd_vss) m_supply; + NETLIB_SUB(CD4020_sub) sub; + NETLIB_SUB(vdd_vss) m_supply; logic_input_t m_RESET; ); diff --git a/src/lib/netlist/devices/nld_4066.cpp b/src/lib/netlist/devices/nld_4066.cpp index 535314c0aa4..7dd471c0ae0 100644 --- a/src/lib/netlist/devices/nld_4066.cpp +++ b/src/lib/netlist/devices/nld_4066.cpp @@ -19,15 +19,15 @@ NETLIB_START(CD4066_GATE) NETLIB_RESET(CD4066_GATE) { - m_R.do_reset(); + m_R->do_reset(); } NETLIB_UPDATE(CD4066_GATE) { - nl_double sup = (m_supply.vdd() - m_supply.vss()); + nl_double sup = (m_supply->vdd() - m_supply->vss()); nl_double low = NL_FCONST(0.45) * sup; nl_double high = NL_FCONST(0.55) * sup; - nl_double in = INPANALOG(m_control) - m_supply.vss(); + nl_double in = INPANALOG(m_control) - m_supply->vss(); nl_double rON = m_base_r * NL_FCONST(5.0) / sup; nl_double R = -1.0; @@ -44,14 +44,14 @@ NETLIB_UPDATE(CD4066_GATE) // We only need to update the net first if this is a time stepping net if (1) // m_R.m_P.net().as_analog().solver()->is_timestep()) { - m_R.update_dev(); - m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R->update_dev(); + m_R->set_R(R); + m_R->m_P.schedule_after(NLTIME_FROM_NS(1)); } else { - m_R.set_R(R); - m_R.update_dev(); + m_R->set_R(R); + m_R->update_dev(); } } } diff --git a/src/lib/netlist/devices/nld_4066.h b/src/lib/netlist/devices/nld_4066.h index abfe321a7c4..87378d6b6c1 100644 --- a/src/lib/netlist/devices/nld_4066.h +++ b/src/lib/netlist/devices/nld_4066.h @@ -37,9 +37,9 @@ NETLIB_DEVICE(CD4066_GATE, public: analog_input_t m_control; - NETLIB_NAME(R) m_R; + NETLIB_SUB(R) m_R; - NETLIB_NAME(vdd_vss) m_supply; + NETLIB_SUB(vdd_vss) m_supply; param_double_t m_base_r; ); diff --git a/src/lib/netlist/devices/nld_7402.cpp b/src/lib/netlist/devices/nld_7402.cpp index 0e5695bebc9..5cd201e8d32 100644 --- a/src/lib/netlist/devices/nld_7402.cpp +++ b/src/lib/netlist/devices/nld_7402.cpp @@ -28,38 +28,38 @@ NETLIB_START(7402_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("1", m_1.m_Q[0]); - register_subalias("2", m_1.m_I[0]); - register_subalias("3", m_1.m_I[1]); + register_subalias("1", m_1->m_Q[0]); + register_subalias("2", m_1->m_I[0]); + register_subalias("3", m_1->m_I[1]); - register_subalias("4", m_2.m_Q[0]); - register_subalias("5", m_2.m_I[0]); - register_subalias("6", m_2.m_I[1]); + register_subalias("4", m_2->m_Q[0]); + 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[0]); + register_subalias("8", m_3->m_I[0]); + register_subalias("9", m_3->m_I[1]); + register_subalias("10", m_3->m_Q[0]); - register_subalias("11", m_4.m_I[0]); - register_subalias("12", m_4.m_I[1]); - register_subalias("13", m_4.m_Q[0]); + register_subalias("11", m_4->m_I[0]); + register_subalias("12", m_4->m_I[1]); + register_subalias("13", m_4->m_Q[0]); } NETLIB_UPDATE(7402_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7402.h b/src/lib/netlist/devices/nld_7402.h index 1d11236488b..6f8ae8bc57b 100644 --- a/src/lib/netlist/devices/nld_7402.h +++ b/src/lib/netlist/devices/nld_7402.h @@ -54,10 +54,10 @@ 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_SUB(7402) m_1; + NETLIB_SUB(7402) m_2; + NETLIB_SUB(7402) m_3; + NETLIB_SUB(7402) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7404.cpp b/src/lib/netlist/devices/nld_7404.cpp index 5bfd08c7d1e..2f1b712a479 100644 --- a/src/lib/netlist/devices/nld_7404.cpp +++ b/src/lib/netlist/devices/nld_7404.cpp @@ -46,45 +46,45 @@ NETLIB_START(7404_dip) register_sub("5", m_5); register_sub("6", m_6); - register_subalias("1", m_1.m_I[0]); - register_subalias("2", m_1.m_Q[0]); + register_subalias("1", m_1->m_I[0]); + register_subalias("2", m_1->m_Q[0]); - register_subalias("3", m_2.m_I[0]); - register_subalias("4", m_2.m_Q[0]); + register_subalias("3", m_2->m_I[0]); + register_subalias("4", m_2->m_Q[0]); - register_subalias("5", m_3.m_I[0]); - register_subalias("6", m_3.m_Q[0]); + register_subalias("5", m_3->m_I[0]); + register_subalias("6", m_3->m_Q[0]); - register_subalias("8", m_4.m_Q[0]); - register_subalias("9", m_4.m_I[0]); + register_subalias("8", m_4->m_Q[0]); + register_subalias("9", m_4->m_I[0]); - register_subalias("10", m_5.m_Q[0]); - register_subalias("11", m_5.m_I[0]); + register_subalias("10", m_5->m_Q[0]); + register_subalias("11", m_5->m_I[0]); - register_subalias("12", m_6.m_Q[0]); - register_subalias("13", m_6.m_I[0]); + register_subalias("12", m_6->m_Q[0]); + register_subalias("13", m_6->m_I[0]); } NETLIB_UPDATE(7404_dip) { /* 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7404.h b/src/lib/netlist/devices/nld_7404.h index 18e7fe8087d..197f36c3c0f 100644 --- a/src/lib/netlist/devices/nld_7404.h +++ b/src/lib/netlist/devices/nld_7404.h @@ -54,12 +54,12 @@ public: 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_SUB(7404) m_1; + NETLIB_SUB(7404) m_2; + NETLIB_SUB(7404) m_3; + NETLIB_SUB(7404) m_4; + NETLIB_SUB(7404) m_5; + NETLIB_SUB(7404) m_6; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7408.cpp b/src/lib/netlist/devices/nld_7408.cpp index a0a54d6cf82..5489ec3abdb 100644 --- a/src/lib/netlist/devices/nld_7408.cpp +++ b/src/lib/netlist/devices/nld_7408.cpp @@ -28,38 +28,38 @@ NETLIB_START(7408_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("1", m_1.m_I[0]); - register_subalias("2", m_1.m_I[1]); - register_subalias("3", m_1.m_Q[0]); + register_subalias("1", m_1->m_I[0]); + register_subalias("2", m_1->m_I[1]); + register_subalias("3", m_1->m_Q[0]); - register_subalias("4", m_2.m_I[0]); - register_subalias("5", m_2.m_I[1]); - register_subalias("6", m_2.m_Q[0]); + register_subalias("4", m_2->m_I[0]); + register_subalias("5", m_2->m_I[1]); + register_subalias("6", m_2->m_Q[0]); - register_subalias("9", m_3.m_I[0]); - register_subalias("10", m_3.m_I[1]); - register_subalias("8", m_3.m_Q[0]); + register_subalias("9", m_3->m_I[0]); + register_subalias("10", m_3->m_I[1]); + register_subalias("8", m_3->m_Q[0]); - register_subalias("12", m_4.m_I[0]); - register_subalias("13", m_4.m_I[1]); - register_subalias("11", m_4.m_Q[0]); + register_subalias("12", m_4->m_I[0]); + register_subalias("13", m_4->m_I[1]); + register_subalias("11", m_4->m_Q[0]); } NETLIB_UPDATE(7408_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + m_1->update_dev(); + m_2->update_dev(); + m_3->update_dev(); + m_4->update_dev(); } NETLIB_RESET(7408_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7408.h b/src/lib/netlist/devices/nld_7408.h index 9304d5c554d..327cfa44dd0 100644 --- a/src/lib/netlist/devices/nld_7408.h +++ b/src/lib/netlist/devices/nld_7408.h @@ -54,10 +54,10 @@ NETLIB_SIGNAL(7408, 2, 0, 1); NETLIB_DEVICE(7408_dip, - NETLIB_NAME(7408) m_1; - NETLIB_NAME(7408) m_2; - NETLIB_NAME(7408) m_3; - NETLIB_NAME(7408) m_4; + NETLIB_SUB(7408) m_1; + NETLIB_SUB(7408) m_2; + NETLIB_SUB(7408) m_3; + NETLIB_SUB(7408) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7410.cpp b/src/lib/netlist/devices/nld_7410.cpp index 9564ecd4e4f..8039afd9625 100644 --- a/src/lib/netlist/devices/nld_7410.cpp +++ b/src/lib/netlist/devices/nld_7410.cpp @@ -29,35 +29,35 @@ NETLIB_START(7410_dip) register_sub("2", m_2); register_sub("3", m_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[0]); - - register_subalias("8", m_3.m_Q[0]); - 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[0]); - register_subalias("13", m_1.m_I[2]); + 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[0]); + + register_subalias("8", m_3->m_Q[0]); + 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[0]); + 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(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7410.h b/src/lib/netlist/devices/nld_7410.h index d6e97838c7b..db1fe5f3b4d 100644 --- a/src/lib/netlist/devices/nld_7410.h +++ b/src/lib/netlist/devices/nld_7410.h @@ -54,9 +54,9 @@ NETLIB_SIGNAL(7410, 3, 0, 0); NETLIB_DEVICE(7410_dip, - NETLIB_NAME(7410) m_1; - NETLIB_NAME(7410) m_2; - NETLIB_NAME(7410) m_3; + NETLIB_SUB(7410) m_1; + NETLIB_SUB(7410) m_2; + NETLIB_SUB(7410) m_3; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp index 542c80a5b43..062e3690d0f 100644 --- a/src/lib/netlist/devices/nld_74107.cpp +++ b/src/lib/netlist/devices/nld_74107.cpp @@ -35,18 +35,18 @@ NETLIB_START(74107A) { register_sub("sub", sub); - register_subalias("CLK", sub.m_clk); + register_subalias("CLK", sub->m_clk); register_input("J", m_J); register_input("K", m_K); register_input("CLRQ", m_clrQ); - register_subalias("Q", sub.m_Q); - register_subalias("QQ", sub.m_QQ); + register_subalias("Q", sub->m_Q); + register_subalias("QQ", sub->m_QQ); } NETLIB_RESET(74107A) { - sub.reset(); + sub->reset(); } ATTR_HOT inline void NETLIB_NAME(74107Asub)::newstate(const netlist_sig_t state) @@ -72,25 +72,25 @@ NETLIB_UPDATE(74107A) switch (JK) { case 0: - sub.m_Q1 = 0; - sub.m_Q2 = 1; - sub.m_F = 0; - sub.m_clk.inactivate(); + sub->m_Q1 = 0; + sub->m_Q2 = 1; + sub->m_F = 0; + sub->m_clk.inactivate(); break; case 1: // (!INPLOGIC(m_J) & INPLOGIC(m_K)) - sub.m_Q1 = 0; - sub.m_Q2 = 0; - sub.m_F = 0; + sub->m_Q1 = 0; + sub->m_Q2 = 0; + sub->m_F = 0; break; case 2: // (INPLOGIC(m_J) & !INPLOGIC(m_K)) - sub.m_Q1 = 0; - sub.m_Q2 = 0; - sub.m_F = 1; + sub->m_Q1 = 0; + sub->m_Q2 = 0; + sub->m_F = 1; break; case 3: // (INPLOGIC(m_J) & INPLOGIC(m_K)) - sub.m_Q1 = 1; - sub.m_Q2 = 0; - sub.m_F = 0; + sub->m_Q1 = 1; + sub->m_Q2 = 0; + sub->m_F = 0; break; default: break; @@ -98,11 +98,11 @@ NETLIB_UPDATE(74107A) if (!INPLOGIC(m_clrQ)) { - sub.m_clk.inactivate(); - sub.newstate(0); + sub->m_clk.inactivate(); + sub->newstate(0); } - else if (!sub.m_Q2) - sub.m_clk.activate_hl(); + else if (!sub->m_Q2) + sub->m_clk.activate_hl(); } NETLIB_START(74107_dip) @@ -110,38 +110,38 @@ NETLIB_START(74107_dip) register_sub("1", m_1); register_sub("2", m_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("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 } 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(); + m_1->update_dev(); + m_2->update_dev(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74107.h b/src/lib/netlist/devices/nld_74107.h index b0b38ee66fd..bddb3e88f0a 100644 --- a/src/lib/netlist/devices/nld_74107.h +++ b/src/lib/netlist/devices/nld_74107.h @@ -92,7 +92,7 @@ NETLIB_SUBDEVICE(74107Asub, NETLIB_DEVICE(74107A, public: - NETLIB_NAME(74107Asub) sub; + NETLIB_SUB(74107Asub) sub; logic_input_t m_J; logic_input_t m_K; @@ -103,15 +103,15 @@ public: class NETLIB_NAME(74107) : public NETLIB_NAME(74107A) { public: - NETLIB_NAME(74107) () - : NETLIB_NAME(74107A) () {} + NETLIB_NAME(74107) (netlist_t &anetlist, const pstring &name) + : NETLIB_NAME(74107A) (anetlist, name) {} }; NETLIB_DEVICE(74107_dip, - NETLIB_NAME(74107) m_1; - NETLIB_NAME(74107) m_2; + NETLIB_SUB(74107) m_1; + NETLIB_SUB(74107) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7411.cpp b/src/lib/netlist/devices/nld_7411.cpp index 2db034577cb..23a1dd8ff33 100644 --- a/src/lib/netlist/devices/nld_7411.cpp +++ b/src/lib/netlist/devices/nld_7411.cpp @@ -27,35 +27,35 @@ NETLIB_START(7411_dip) register_sub("2", m_2); register_sub("3", m_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[0]); - - register_subalias("8", m_3.m_Q[0]); - 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[0]); - register_subalias("13", m_1.m_I[2]); + 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[0]); + + register_subalias("8", m_3->m_Q[0]); + 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[0]); + register_subalias("13", m_1->m_I[2]); } NETLIB_UPDATE(7411_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); + m_1->update_dev(); + m_2->update_dev(); + m_3->update_dev(); } NETLIB_RESET(7411_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7411.h b/src/lib/netlist/devices/nld_7411.h index 11d4d45a20f..d07594afd8b 100644 --- a/src/lib/netlist/devices/nld_7411.h +++ b/src/lib/netlist/devices/nld_7411.h @@ -55,9 +55,9 @@ NETLIB_SIGNAL(7411, 3, 0, 1); NETLIB_DEVICE(7411_dip, - NETLIB_NAME(7411) m_1; - NETLIB_NAME(7411) m_2; - NETLIB_NAME(7411) m_3; + NETLIB_SUB(7411) m_1; + NETLIB_SUB(7411) m_2; + NETLIB_SUB(7411) m_3; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74123.cpp b/src/lib/netlist/devices/nld_74123.cpp index ccd8eba012e..059ea406751 100644 --- a/src/lib/netlist/devices/nld_74123.cpp +++ b/src/lib/netlist/devices/nld_74123.cpp @@ -31,10 +31,10 @@ NETLIB_START(74123) register_input("_CV", m_CV); // internal - register_subalias("GND", m_RN.m_R.m_N); - register_subalias("VCC", m_RP.m_R.m_P); - register_subalias("C", m_RN.m_R.m_N); - register_subalias("RC", m_RN.m_R.m_P); + register_subalias("GND", m_RN->m_R->m_N); + register_subalias("VCC", m_RP->m_R->m_P); + register_subalias("C", m_RN->m_R->m_N); + register_subalias("RC", m_RN->m_R->m_P); if (m_dev_type == 4538) register_param("K", m_K, 0.4); @@ -43,11 +43,11 @@ NETLIB_START(74123) register_param("RI", m_RI, 400.0); // around 250 for HC series, 400 on LS/TTL, estimated from datasheets - connect_late(m_RP_Q, m_RP.m_I); - connect_late(m_RN_Q, m_RN.m_I); + connect_late(m_RP_Q, m_RP->m_I); + connect_late(m_RN_Q, m_RN->m_I); - connect_late(m_RN.m_R.m_P, m_RP.m_R.m_N); - connect_late(m_CV, m_RN.m_R.m_P); + connect_late(m_RN->m_R->m_P, m_RP->m_R->m_N); + connect_late(m_CV, m_RN->m_R->m_P); save(NLNAME(m_last_trig)); save(NLNAME(m_state)); @@ -107,7 +107,7 @@ NETLIB_UPDATE(74123) if (m_state == 1) { - const nl_double vLow = m_KP * TERMANALOG(m_RP.m_R.m_P); + const nl_double vLow = m_KP * TERMANALOG(m_RP->m_R->m_P); if (INPANALOG(m_CV) < vLow) { OUTLOGIC(m_RN_Q, 0, NLTIME_FROM_NS(10)); // R_OFF @@ -116,7 +116,7 @@ NETLIB_UPDATE(74123) } if (m_state == 2) { - const nl_double vHigh = TERMANALOG(m_RP.m_R.m_P) * (1.0 - m_KP); + const nl_double vHigh = TERMANALOG(m_RP->m_R->m_P) * (1.0 - m_KP); if (INPANALOG(m_CV) > vHigh) { OUTLOGIC(m_RP_Q, 0, NLTIME_FROM_NS(10)); // R_OFF @@ -132,11 +132,11 @@ NETLIB_RESET(74123) { m_KP = 1.0 / (1.0 + exp(m_K.Value())); - m_RP.do_reset(); - m_RN.do_reset(); + m_RP->do_reset(); + m_RN->do_reset(); - //m_RP.set_R(R_OFF); - //m_RN.set_R(R_OFF); + //m_RP->set_R(R_OFF); + //m_RN->set_R(R_OFF); m_last_trig = 0; m_state = 0; @@ -147,122 +147,123 @@ NETLIB_START(74123_dip) register_sub("1", m_1); register_sub("2", m_2); - register_subalias("1", m_1.m_A); - register_subalias("2", m_1.m_B); - register_subalias("3", m_1.m_CLRQ); - register_subalias("4", m_1.m_QQ); - register_subalias("5", m_2.m_Q); - register_subalias("6", m_2.m_RN.m_R.m_N); - register_subalias("7", m_2.m_RN.m_R.m_P); - register_subalias("8", m_1.m_RN.m_R.m_N); - connect_late(m_1.m_RN.m_R.m_N, m_2.m_RN.m_R.m_N); - - register_subalias("9", m_2.m_A); - register_subalias("10", m_2.m_B); - register_subalias("11", m_2.m_CLRQ); - register_subalias("12", m_2.m_QQ); - register_subalias("13", m_1.m_Q); - register_subalias("14", m_1.m_RN.m_R.m_N); - register_subalias("15", m_1.m_RN.m_R.m_P); - register_subalias("16", m_1.m_RP.m_R.m_P); - connect_late(m_1.m_RP.m_R.m_P, m_2.m_RP.m_R.m_P); + register_subalias("1", m_1->m_A); + register_subalias("2", m_1->m_B); + register_subalias("3", m_1->m_CLRQ); + register_subalias("4", m_1->m_QQ); + register_subalias("5", m_2->m_Q); + register_subalias("6", m_2->m_RN->m_R->m_N); + register_subalias("7", m_2->m_RN->m_R->m_P); + register_subalias("8", m_1->m_RN->m_R->m_N); + connect_late(m_1->m_RN->m_R->m_N, m_2->m_RN->m_R->m_N); + + register_subalias("9", m_2->m_A); + register_subalias("10", m_2->m_B); + register_subalias("11", m_2->m_CLRQ); + register_subalias("12", m_2->m_QQ); + register_subalias("13", m_1->m_Q); + register_subalias("14", m_1->m_RN->m_R->m_N); + register_subalias("15", m_1->m_RN->m_R->m_P); + register_subalias("16", m_1->m_RP->m_R->m_P); + connect_late(m_1->m_RP->m_R->m_P, m_2->m_RP->m_R->m_P); } NETLIB_UPDATE(74123_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); + m_1->update_dev(); + m_2->update_dev(); } NETLIB_RESET(74123_dip) { - m_1.do_reset(); - m_2.do_reset(); + m_1->do_reset(); + m_2->do_reset(); } NETLIB_START(9602_dip) { - m_1.m_dev_type = 9602; - m_2.m_dev_type = 9602; register_sub("1", m_1); register_sub("2", m_2); - register_subalias("1", m_1.m_RN.m_R.m_N); // C1 - register_subalias("2", m_1.m_RN.m_R.m_P); // RC1 - register_subalias("3", m_1.m_CLRQ); - register_subalias("4", m_1.m_B); - register_subalias("5", m_1.m_A); - register_subalias("6", m_1.m_Q); - register_subalias("7", m_1.m_QQ); - register_subalias("8", m_1.m_RN.m_R.m_N); - connect_late(m_1.m_RN.m_R.m_N, m_2.m_RN.m_R.m_N); - - register_subalias("9", m_2.m_QQ); - register_subalias("10", m_2.m_Q); - register_subalias("11", m_2.m_A); - register_subalias("12", m_2.m_B); - register_subalias("13", m_2.m_CLRQ); - register_subalias("14", m_2.m_RN.m_R.m_P); // RC2 - register_subalias("15", m_2.m_RN.m_R.m_N); // C2 - register_subalias("16", m_1.m_RP.m_R.m_P); - connect_late(m_1.m_RP.m_R.m_P, m_2.m_RP.m_R.m_P); + m_1->m_dev_type = 9602; + m_2->m_dev_type = 9602; + + register_subalias("1", m_1->m_RN->m_R->m_N); // C1 + register_subalias("2", m_1->m_RN->m_R->m_P); // RC1 + register_subalias("3", m_1->m_CLRQ); + register_subalias("4", m_1->m_B); + register_subalias("5", m_1->m_A); + register_subalias("6", m_1->m_Q); + register_subalias("7", m_1->m_QQ); + register_subalias("8", m_1->m_RN->m_R->m_N); + connect_late(m_1->m_RN->m_R->m_N, m_2->m_RN->m_R->m_N); + + register_subalias("9", m_2->m_QQ); + register_subalias("10", m_2->m_Q); + register_subalias("11", m_2->m_A); + register_subalias("12", m_2->m_B); + register_subalias("13", m_2->m_CLRQ); + register_subalias("14", m_2->m_RN->m_R->m_P); // RC2 + register_subalias("15", m_2->m_RN->m_R->m_N); // C2 + register_subalias("16", m_1->m_RP->m_R->m_P); + connect_late(m_1->m_RP->m_R->m_P, m_2->m_RP->m_R->m_P); } NETLIB_UPDATE(9602_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); + m_1->update_dev(); + m_2->update_dev(); } NETLIB_RESET(9602_dip) { - m_1.do_reset(); - m_2.do_reset(); + m_1->do_reset(); + m_2->do_reset(); } NETLIB_START(4538_dip) { - m_1.m_dev_type = 4538; - m_2.m_dev_type = 4538; + m_1->m_dev_type = 4538; + m_2->m_dev_type = 4538; register_sub("1", m_1); register_sub("2", m_2); - register_subalias("1", m_1.m_RN.m_R.m_N); // C1 - register_subalias("2", m_1.m_RN.m_R.m_P); // RC1 - register_subalias("3", m_1.m_CLRQ); - register_subalias("4", m_1.m_A); - register_subalias("5", m_1.m_B); - register_subalias("6", m_1.m_Q); - register_subalias("7", m_1.m_QQ); - register_subalias("8", m_1.m_RN.m_R.m_N); - connect_late(m_1.m_RN.m_R.m_N, m_2.m_RN.m_R.m_N); - - register_subalias("9", m_2.m_QQ); - register_subalias("10", m_2.m_Q); - register_subalias("11", m_2.m_B); - register_subalias("12", m_2.m_A); - register_subalias("13", m_2.m_CLRQ); - register_subalias("14", m_2.m_RN.m_R.m_P); // RC2 - register_subalias("15", m_2.m_RN.m_R.m_N); // C2 - register_subalias("16", m_1.m_RP.m_R.m_P); - connect_late(m_1.m_RP.m_R.m_P, m_2.m_RP.m_R.m_P); + register_subalias("1", m_1->m_RN->m_R->m_N); // C1 + register_subalias("2", m_1->m_RN->m_R->m_P); // RC1 + register_subalias("3", m_1->m_CLRQ); + register_subalias("4", m_1->m_A); + register_subalias("5", m_1->m_B); + register_subalias("6", m_1->m_Q); + register_subalias("7", m_1->m_QQ); + register_subalias("8", m_1->m_RN->m_R->m_N); + connect_late(m_1->m_RN->m_R->m_N, m_2->m_RN->m_R->m_N); + + register_subalias("9", m_2->m_QQ); + register_subalias("10", m_2->m_Q); + register_subalias("11", m_2->m_B); + register_subalias("12", m_2->m_A); + register_subalias("13", m_2->m_CLRQ); + register_subalias("14", m_2->m_RN->m_R->m_P); // RC2 + register_subalias("15", m_2->m_RN->m_R->m_N); // C2 + register_subalias("16", m_1->m_RP->m_R->m_P); + connect_late(m_1->m_RP->m_R->m_P, m_2->m_RP->m_R->m_P); } NETLIB_UPDATE(4538_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); + m_1->update_dev(); + m_2->update_dev(); } NETLIB_RESET(4538_dip) { - m_1.do_reset(); - m_2.do_reset(); + m_1->do_reset(); + m_2->do_reset(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74123.h b/src/lib/netlist/devices/nld_74123.h index 7539c9ce6c3..0379245aedd 100644 --- a/src/lib/netlist/devices/nld_74123.h +++ b/src/lib/netlist/devices/nld_74123.h @@ -60,8 +60,8 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_DEVICE(74123, public: - NETLIB_NAME(res_sw) m_RP; - NETLIB_NAME(res_sw) m_RN; + NETLIB_SUB(res_sw) m_RP; + NETLIB_SUB(res_sw) m_RN; logic_output_t m_RP_Q; logic_output_t m_RN_Q; @@ -89,8 +89,8 @@ public: NETLIB_DEVICE(74123_dip, - NETLIB_NAME(74123) m_1; - NETLIB_NAME(74123) m_2; + NETLIB_SUB(74123) m_1; + NETLIB_SUB(74123) m_2; ); @@ -103,8 +103,8 @@ NETLIB_DEVICE(74123_dip, NETLIB_DEVICE(9602_dip, - NETLIB_NAME(74123) m_1; - NETLIB_NAME(74123) m_2; + NETLIB_SUB(74123) m_1; + NETLIB_SUB(74123) m_2; ); @@ -117,8 +117,8 @@ NETLIB_DEVICE(9602_dip, NETLIB_DEVICE(4538_dip, NETLIB_LOGIC_FAMILY(CD4XXX) - NETLIB_NAME(74123) m_1; - NETLIB_NAME(74123) m_2; + NETLIB_SUB(74123) m_1; + NETLIB_SUB(74123) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74153.cpp b/src/lib/netlist/devices/nld_74153.cpp index ab52808c4cc..5d0a6caf2f9 100644 --- a/src/lib/netlist/devices/nld_74153.cpp +++ b/src/lib/netlist/devices/nld_74153.cpp @@ -53,15 +53,15 @@ NETLIB_START(74153) { register_sub("sub", m_sub); - register_subalias("C0", m_sub.m_C[0]); - register_subalias("C1", m_sub.m_C[1]); - register_subalias("C2", m_sub.m_C[2]); - register_subalias("C3", m_sub.m_C[3]); + register_subalias("C0", m_sub->m_C[0]); + register_subalias("C1", m_sub->m_C[1]); + register_subalias("C2", m_sub->m_C[2]); + register_subalias("C3", m_sub->m_C[3]); register_input("A", m_A); register_input("B", m_B); - register_subalias("G", m_sub.m_G); + register_subalias("G", m_sub->m_G); - register_subalias("AY", m_sub.m_Y); //FIXME: Change netlists + register_subalias("AY", m_sub->m_Y); //FIXME: Change netlists } NETLIB_RESET(74153) @@ -72,8 +72,8 @@ 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(); } @@ -82,35 +82,35 @@ NETLIB_START(74153_dip) register_sub("1", m_1); register_sub("2", m_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_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74153.h b/src/lib/netlist/devices/nld_74153.h index 54364ac5671..08d0c7a7bf9 100644 --- a/src/lib/netlist/devices/nld_74153.h +++ b/src/lib/netlist/devices/nld_74153.h @@ -73,15 +73,15 @@ NETLIB_SUBDEVICE(74153sub, NETLIB_DEVICE(74153, public: - NETLIB_NAME(74153sub) m_sub; + NETLIB_SUB(74153sub) m_sub; logic_input_t m_A; logic_input_t m_B; ); NETLIB_DEVICE(74153_dip, - NETLIB_NAME(74153sub) m_1; - NETLIB_NAME(74153sub) m_2; + NETLIB_SUB(74153sub) m_1; + NETLIB_SUB(74153sub) m_2; logic_input_t m_A; logic_input_t m_B; ); diff --git a/src/lib/netlist/devices/nld_74175.cpp b/src/lib/netlist/devices/nld_74175.cpp index ec9d49a923b..c025fd4a8ef 100644 --- a/src/lib/netlist/devices/nld_74175.cpp +++ b/src/lib/netlist/devices/nld_74175.cpp @@ -57,19 +57,19 @@ NETLIB_UPDATE(74175) { d |= (INPLOGIC(m_D[i]) << i); } - m_sub.m_clrq = INPLOGIC(m_CLRQ); - if (!m_sub.m_clrq) + m_sub->m_clrq = INPLOGIC(m_CLRQ); + if (!m_sub->m_clrq) { for (int i=0; i<4; i++) { - OUTLOGIC(m_sub.m_Q[i], 0, delay_clear[0]); - OUTLOGIC(m_sub.m_QQ[i], 1, delay_clear[1]); + OUTLOGIC(m_sub->m_Q[i], 0, delay_clear[0]); + OUTLOGIC(m_sub->m_QQ[i], 1, delay_clear[1]); } - m_sub.m_data = 0; - } else if (d != m_sub.m_data) + m_sub->m_data = 0; + } else if (d != m_sub->m_data) { - m_sub.m_data = d; - m_sub.m_CLK.activate_lh(); + m_sub->m_data = d; + m_sub->m_CLK.activate_lh(); } } @@ -77,55 +77,55 @@ NETLIB_START(74175) { register_sub("sub", m_sub); - register_subalias("CLK", m_sub.m_CLK); + register_subalias("CLK", m_sub->m_CLK); register_input("CLRQ", m_CLRQ); register_input("D1", m_D[0]); - register_subalias("Q1", m_sub.m_Q[0]); - register_subalias("Q1Q", m_sub.m_QQ[0]); + register_subalias("Q1", m_sub->m_Q[0]); + register_subalias("Q1Q", m_sub->m_QQ[0]); register_input("D2", m_D[1]); - register_subalias("Q2", m_sub.m_Q[1]); - register_subalias("Q2Q", m_sub.m_QQ[1]); + register_subalias("Q2", m_sub->m_Q[1]); + register_subalias("Q2Q", m_sub->m_QQ[1]); register_input("D3", m_D[2]); - register_subalias("Q3", m_sub.m_Q[2]); - register_subalias("Q3Q", m_sub.m_QQ[2]); + register_subalias("Q3", m_sub->m_Q[2]); + register_subalias("Q3Q", m_sub->m_QQ[2]); register_input("D4", m_D[3]); - register_subalias("Q4", m_sub.m_Q[3]); - register_subalias("Q4Q", m_sub.m_QQ[3]); + register_subalias("Q4", m_sub->m_Q[3]); + register_subalias("Q4Q", m_sub->m_QQ[3]); } NETLIB_RESET(74175) { - m_sub.do_reset(); + m_sub->do_reset(); } NETLIB_START(74175_dip) { register_sub("sub", m_sub); - register_subalias("9", m_sub.m_CLK); + register_subalias("9", m_sub->m_CLK); register_input("1", m_CLRQ); register_input("4", m_D[0]); - register_subalias("2", m_sub.m_Q[0]); - register_subalias("3", m_sub.m_QQ[0]); + register_subalias("2", m_sub->m_Q[0]); + register_subalias("3", m_sub->m_QQ[0]); register_input("5", m_D[1]); - register_subalias("7", m_sub.m_Q[1]); - register_subalias("6", m_sub.m_QQ[1]); + register_subalias("7", m_sub->m_Q[1]); + register_subalias("6", m_sub->m_QQ[1]); register_input("12", m_D[2]); - register_subalias("10", m_sub.m_Q[2]); - register_subalias("11", m_sub.m_QQ[2]); + register_subalias("10", m_sub->m_Q[2]); + register_subalias("11", m_sub->m_QQ[2]); register_input("13", m_D[3]); - register_subalias("15", m_sub.m_Q[3]); - register_subalias("14", m_sub.m_QQ[3]); + register_subalias("15", m_sub->m_Q[3]); + register_subalias("14", m_sub->m_QQ[3]); } diff --git a/src/lib/netlist/devices/nld_74175.h b/src/lib/netlist/devices/nld_74175.h index f74165a5839..4ec224c7da3 100644 --- a/src/lib/netlist/devices/nld_74175.h +++ b/src/lib/netlist/devices/nld_74175.h @@ -57,7 +57,7 @@ NETLIB_SUBDEVICE(74175_sub, NETLIB_DEVICE(74175, - NETLIB_NAME(74175_sub) m_sub; + NETLIB_SUB(74175_sub) m_sub; logic_input_t m_D[4]; logic_input_t m_CLRQ; ); diff --git a/src/lib/netlist/devices/nld_74192.cpp b/src/lib/netlist/devices/nld_74192.cpp index c07affc8b6a..ebbf3c9b3b6 100644 --- a/src/lib/netlist/devices/nld_74192.cpp +++ b/src/lib/netlist/devices/nld_74192.cpp @@ -14,10 +14,10 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_START(74192) { register_sub("subABCD", m_ABCD); - register_subalias("A", m_ABCD.m_A); - register_subalias("B", m_ABCD.m_B); - register_subalias("C", m_ABCD.m_C); - register_subalias("D", m_ABCD.m_D); + register_subalias("A", m_ABCD->m_A); + register_subalias("B", m_ABCD->m_B); + register_subalias("C", m_ABCD->m_C); + register_subalias("D", m_ABCD->m_D); register_input("CLEAR", m_CLEAR); register_input("LOADQ", m_LOADQ); register_input("CU", m_CU); @@ -62,7 +62,7 @@ NETLIB_UPDATE(74192) } else if (!INPLOGIC(m_LOADQ)) { - m_cnt = m_ABCD.read_ABCD(); + m_cnt = m_ABCD->read_ABCD(); } else { @@ -105,7 +105,7 @@ NETLIB_START(74192_dip) { NETLIB_NAME(74192)::start(); - register_subalias("1", m_ABCD.m_B); + register_subalias("1", m_ABCD->m_B); register_subalias("2", m_Q[1]); register_subalias("3", m_Q[0]); register_subalias("4", m_CD); @@ -113,13 +113,13 @@ NETLIB_START(74192_dip) register_subalias("6", m_Q[2]); register_subalias("7", m_Q[3]); - register_subalias("9", m_ABCD.m_D); - register_subalias("10", m_ABCD.m_C); + register_subalias("9", m_ABCD->m_D); + register_subalias("10", m_ABCD->m_C); register_subalias("11", m_LOADQ); register_subalias("12", m_CARRYQ); register_subalias("13", m_BORROWQ); register_subalias("14", m_CLEAR); - register_subalias("15", m_ABCD.m_A); + register_subalias("15", m_ABCD->m_A); } diff --git a/src/lib/netlist/devices/nld_74192.h b/src/lib/netlist/devices/nld_74192.h index a8b26335eb2..26126d96e06 100644 --- a/src/lib/netlist/devices/nld_74192.h +++ b/src/lib/netlist/devices/nld_74192.h @@ -43,7 +43,7 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_DEVICE(74192, ATTR_HOT void update_outputs(); - NETLIB_NAME(9316_subABCD) m_ABCD; + NETLIB_SUB(9316_subABCD) m_ABCD; logic_input_t m_CLEAR; logic_input_t m_LOADQ; logic_input_t m_CU; diff --git a/src/lib/netlist/devices/nld_7420.cpp b/src/lib/netlist/devices/nld_7420.cpp index 57a25b5d7b7..da38a60c19f 100644 --- a/src/lib/netlist/devices/nld_7420.cpp +++ b/src/lib/netlist/devices/nld_7420.cpp @@ -27,33 +27,33 @@ NETLIB_START(7420_dip) register_sub("1", m_1); register_sub("2", m_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[0]); + register_subalias("4", m_1->m_I[2]); + register_subalias("5", m_1->m_I[3]); + register_subalias("6", m_1->m_Q[0]); - register_subalias("8", m_2.m_Q[0]); - register_subalias("9", m_2.m_I[0]); - register_subalias("10", m_2.m_I[1]); + register_subalias("8", m_2->m_Q[0]); + 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(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7420.h b/src/lib/netlist/devices/nld_7420.h index 2ce7020c7e5..af7cc79b5f9 100644 --- a/src/lib/netlist/devices/nld_7420.h +++ b/src/lib/netlist/devices/nld_7420.h @@ -57,8 +57,8 @@ NETLIB_SIGNAL(7420, 4, 0, 0); NETLIB_DEVICE(7420_dip, - NETLIB_NAME(7420) m_1; - NETLIB_NAME(7420) m_2; + NETLIB_SUB(7420) m_1; + NETLIB_SUB(7420) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7425.cpp b/src/lib/netlist/devices/nld_7425.cpp index c432960a02d..01e033d2f06 100644 --- a/src/lib/netlist/devices/nld_7425.cpp +++ b/src/lib/netlist/devices/nld_7425.cpp @@ -14,37 +14,37 @@ NETLIB_START(7425_dip) register_sub("1", m_1); register_sub("2", m_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("4", m_1.m_I[2]); - register_subalias("5", m_1.m_I[3]); - register_subalias("6", m_1.m_Q[0]); + register_subalias("4", m_1->m_I[2]); + register_subalias("5", m_1->m_I[3]); + register_subalias("6", m_1->m_Q[0]); - register_subalias("8", m_2.m_Q[0]); - register_subalias("9", m_2.m_I[0]); - register_subalias("10", m_2.m_I[1]); + register_subalias("8", m_2->m_Q[0]); + register_subalias("9", m_2->m_I[0]); + register_subalias("10", m_2->m_I[1]); //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(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7425.h b/src/lib/netlist/devices/nld_7425.h index 816c0cba100..80331fa9068 100644 --- a/src/lib/netlist/devices/nld_7425.h +++ b/src/lib/netlist/devices/nld_7425.h @@ -54,8 +54,8 @@ NETLIB_SIGNAL(7425, 4, 1, 0); NETLIB_DEVICE(7425_dip, - NETLIB_NAME(7425) m_1; - NETLIB_NAME(7425) m_2; + NETLIB_SUB(7425) m_1; + NETLIB_SUB(7425) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7427.cpp b/src/lib/netlist/devices/nld_7427.cpp index fb193f74679..51616f1281e 100644 --- a/src/lib/netlist/devices/nld_7427.cpp +++ b/src/lib/netlist/devices/nld_7427.cpp @@ -29,35 +29,35 @@ NETLIB_START(7427_dip) register_sub("2", m_2); register_sub("3", m_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[0]); - - register_subalias("8", m_3.m_Q[0]); - 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[0]); - register_subalias("13", m_1.m_I[2]); + 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[0]); + + register_subalias("8", m_3->m_Q[0]); + 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[0]); + 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(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7427.h b/src/lib/netlist/devices/nld_7427.h index 6ba726a17fc..16302e3fd54 100644 --- a/src/lib/netlist/devices/nld_7427.h +++ b/src/lib/netlist/devices/nld_7427.h @@ -54,9 +54,9 @@ NETLIB_SIGNAL(7427, 3, 1, 0); NETLIB_DEVICE(7427_dip, - NETLIB_NAME(7427) m_1; - NETLIB_NAME(7427) m_2; - NETLIB_NAME(7427) m_3; + NETLIB_SUB(7427) m_1; + NETLIB_SUB(7427) m_2; + NETLIB_SUB(7427) m_3; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74279.cpp b/src/lib/netlist/devices/nld_74279.cpp index ca633cfa8be..6f8922cc018 100644 --- a/src/lib/netlist/devices/nld_74279.cpp +++ b/src/lib/netlist/devices/nld_74279.cpp @@ -127,40 +127,40 @@ NETLIB_START(74279_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("1", m_1.m_I[2]); //R - register_subalias("2", m_1.m_I[0]); - register_subalias("3", m_1.m_I[1]); - register_subalias("4", m_1.m_Q[0]); - - register_subalias("5", m_2.m_I[1]); //R - register_subalias("6", m_2.m_I[0]); - register_subalias("7", m_2.m_Q[0]); - - register_subalias("9", m_3.m_Q[0]); - register_subalias("10", m_3.m_I[2]); //R - register_subalias("11", m_3.m_I[0]); - register_subalias("12", m_3.m_I[1]); - - register_subalias("13", m_4.m_Q[0]); - register_subalias("14", m_4.m_I[1]); //R - register_subalias("15", m_4.m_I[0]); + register_subalias("1", m_1->m_I[2]); //R + register_subalias("2", m_1->m_I[0]); + register_subalias("3", m_1->m_I[1]); + register_subalias("4", m_1->m_Q[0]); + + register_subalias("5", m_2->m_I[1]); //R + register_subalias("6", m_2->m_I[0]); + register_subalias("7", m_2->m_Q[0]); + + register_subalias("9", m_3->m_Q[0]); + register_subalias("10", m_3->m_I[2]); //R + register_subalias("11", m_3->m_I[0]); + register_subalias("12", m_3->m_I[1]); + + register_subalias("13", m_4->m_Q[0]); + register_subalias("14", m_4->m_I[1]); //R + register_subalias("15", m_4->m_I[0]); } NETLIB_UPDATE(74279_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + m_1->update_dev(); + m_2->update_dev(); + m_3->update_dev(); + m_4->update_dev(); } NETLIB_RESET(74279_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74279.h b/src/lib/netlist/devices/nld_74279.h index aecd8435f6d..c134eaaa6a3 100644 --- a/src/lib/netlist/devices/nld_74279.h +++ b/src/lib/netlist/devices/nld_74279.h @@ -55,10 +55,10 @@ NETLIB_TRUTHTABLE(74279B, 4, 1, 0); NETLIB_DEVICE(74279_dip, - NETLIB_NAME(74279B) m_1; - NETLIB_NAME(74279A) m_2; - NETLIB_NAME(74279B) m_3; - NETLIB_NAME(74279A) m_4; + NETLIB_SUB(74279B) m_1; + NETLIB_SUB(74279A) m_2; + NETLIB_SUB(74279B) m_3; + NETLIB_SUB(74279A) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7430.cpp b/src/lib/netlist/devices/nld_7430.cpp index 31ea833cb27..29a9e048ba9 100644 --- a/src/lib/netlist/devices/nld_7430.cpp +++ b/src/lib/netlist/devices/nld_7430.cpp @@ -32,28 +32,28 @@ NETLIB_START(7430_dip) { register_sub("1", m_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[0]); + register_subalias("8", m_1->m_Q[0]); - 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(); + m_1->update_dev(); } NETLIB_RESET(7430_dip) { - m_1.do_reset(); + m_1->do_reset(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7430.h b/src/lib/netlist/devices/nld_7430.h index 126aa491429..fbe4e4f1919 100644 --- a/src/lib/netlist/devices/nld_7430.h +++ b/src/lib/netlist/devices/nld_7430.h @@ -66,7 +66,7 @@ NETLIB_SIGNAL(7430, 8, 0, 0); NETLIB_DEVICE(7430_dip, - NETLIB_NAME(7430) m_1; + NETLIB_SUB(7430) m_1; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7432.cpp b/src/lib/netlist/devices/nld_7432.cpp index d0b358482f8..fcf761e7473 100644 --- a/src/lib/netlist/devices/nld_7432.cpp +++ b/src/lib/netlist/devices/nld_7432.cpp @@ -28,38 +28,38 @@ NETLIB_START(7432_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("3", m_1.m_Q[0]); - register_subalias("1", m_1.m_I[0]); - register_subalias("2", m_1.m_I[1]); + register_subalias("3", m_1->m_Q[0]); + register_subalias("1", m_1->m_I[0]); + register_subalias("2", m_1->m_I[1]); - register_subalias("6", m_2.m_Q[0]); - register_subalias("4", m_2.m_I[0]); - register_subalias("5", m_2.m_I[1]); + register_subalias("6", m_2->m_Q[0]); + register_subalias("4", m_2->m_I[0]); + register_subalias("5", m_2->m_I[1]); - register_subalias("9", m_3.m_I[0]); - register_subalias("10", m_3.m_I[1]); - register_subalias("8", m_3.m_Q[0]); + register_subalias("9", m_3->m_I[0]); + register_subalias("10", m_3->m_I[1]); + register_subalias("8", m_3->m_Q[0]); - register_subalias("12", m_4.m_I[0]); - register_subalias("13", m_4.m_I[1]); - register_subalias("11", m_4.m_Q[0]); + register_subalias("12", m_4->m_I[0]); + register_subalias("13", m_4->m_I[1]); + register_subalias("11", m_4->m_Q[0]); } NETLIB_UPDATE(7432_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + m_1->update_dev(); + m_2->update_dev(); + m_3->update_dev(); + m_4->update_dev(); } NETLIB_RESET(7432_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7432.h b/src/lib/netlist/devices/nld_7432.h index f3655407143..6e928e0520b 100644 --- a/src/lib/netlist/devices/nld_7432.h +++ b/src/lib/netlist/devices/nld_7432.h @@ -53,10 +53,10 @@ NETLIB_SIGNAL(7432, 2, 1, 1); NETLIB_DEVICE(7432_dip, - NETLIB_NAME(7432) m_1; - NETLIB_NAME(7432) m_2; - NETLIB_NAME(7432) m_3; - NETLIB_NAME(7432) m_4; + NETLIB_SUB(7432) m_1; + NETLIB_SUB(7432) m_2; + NETLIB_SUB(7432) m_3; + NETLIB_SUB(7432) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7437.cpp b/src/lib/netlist/devices/nld_7437.cpp index 79fcaa5c4c5..bc1fdf83727 100644 --- a/src/lib/netlist/devices/nld_7437.cpp +++ b/src/lib/netlist/devices/nld_7437.cpp @@ -28,38 +28,38 @@ NETLIB_START(7437_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("1", m_1.m_I[0]); - register_subalias("2", m_1.m_I[1]); - register_subalias("3", m_1.m_Q[0]); + register_subalias("1", m_1->m_I[0]); + register_subalias("2", m_1->m_I[1]); + register_subalias("3", m_1->m_Q[0]); - register_subalias("4", m_2.m_I[0]); - register_subalias("5", m_2.m_I[1]); - register_subalias("6", m_2.m_Q[0]); + register_subalias("4", m_2->m_I[0]); + register_subalias("5", m_2->m_I[1]); + register_subalias("6", m_2->m_Q[0]); - register_subalias("9", m_3.m_I[0]); - register_subalias("10", m_3.m_I[1]); - register_subalias("8", m_3.m_Q[0]); + register_subalias("9", m_3->m_I[0]); + register_subalias("10", m_3->m_I[1]); + register_subalias("8", m_3->m_Q[0]); - register_subalias("12", m_4.m_I[0]); - register_subalias("13", m_4.m_I[1]); - register_subalias("11", m_4.m_Q[0]); + register_subalias("12", m_4->m_I[0]); + register_subalias("13", m_4->m_I[1]); + register_subalias("11", m_4->m_Q[0]); } NETLIB_UPDATE(7437_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + m_1->update_dev(); + m_2->update_dev(); + m_3->update_dev(); + m_4->update_dev(); } NETLIB_RESET(7437_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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7437.h b/src/lib/netlist/devices/nld_7437.h index 6b2f193b374..0d7f421e2bc 100644 --- a/src/lib/netlist/devices/nld_7437.h +++ b/src/lib/netlist/devices/nld_7437.h @@ -56,10 +56,10 @@ NETLIB_SIGNAL(7437, 2, 0, 0); NETLIB_DEVICE(7437_dip, - NETLIB_NAME(7437) m_1; - NETLIB_NAME(7437) m_2; - NETLIB_NAME(7437) m_3; - NETLIB_NAME(7437) m_4; + NETLIB_SUB(7437) m_1; + NETLIB_SUB(7437) m_2; + NETLIB_SUB(7437) m_3; + NETLIB_SUB(7437) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7448.cpp b/src/lib/netlist/devices/nld_7448.cpp index 618b61d8c6e..9cc4e0ab94c 100644 --- a/src/lib/netlist/devices/nld_7448.cpp +++ b/src/lib/netlist/devices/nld_7448.cpp @@ -67,55 +67,55 @@ 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_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("RBIQ",sub->m_RBIQ); - register_subalias("a", sub.m_Q[0]); - register_subalias("b", sub.m_Q[1]); - register_subalias("c", sub.m_Q[2]); - register_subalias("d", sub.m_Q[3]); - register_subalias("e", sub.m_Q[4]); - register_subalias("f", sub.m_Q[5]); - register_subalias("g", sub.m_Q[6]); + register_subalias("a", sub->m_Q[0]); + register_subalias("b", sub->m_Q[1]); + register_subalias("c", sub->m_Q[2]); + register_subalias("d", sub->m_Q[3]); + register_subalias("e", sub->m_Q[4]); + register_subalias("f", sub->m_Q[5]); + register_subalias("g", sub->m_Q[6]); } NETLIB_RESET(7448) { - sub.do_reset(); + sub->do_reset(); } NETLIB_UPDATE(7448) { if (INPLOGIC(m_BIQ) && !INPLOGIC(m_LTQ)) { - sub.update_outputs(8); + sub->update_outputs(8); } else if (!INPLOGIC(m_BIQ)) { - sub.update_outputs(15); + 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(); + 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(); + sub->m_RBIQ.activate(); + sub->m_D.activate(); + sub->m_C.activate(); + sub->m_B.activate(); + sub->m_A.activate(); + sub->update(); } } @@ -191,21 +191,21 @@ NETLIB_START(7448_dip) { NETLIB_NAME(7448)::start(); - register_subalias("1", sub.m_B); - register_subalias("2", sub.m_C); + 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_Q[4]); // e - register_subalias("10", sub.m_Q[3]); // d - register_subalias("11", sub.m_Q[2]); // c - register_subalias("12", sub.m_Q[1]); // b - register_subalias("13", sub.m_Q[0]); // a - register_subalias("14", sub.m_Q[6]); // g - register_subalias("15", sub.m_Q[5]); // f + register_subalias("5",sub->m_RBIQ); + register_subalias("6", sub->m_D); + register_subalias("7", sub->m_A); + + register_subalias("9", sub->m_Q[4]); // e + register_subalias("10", sub->m_Q[3]); // d + register_subalias("11", sub->m_Q[2]); // c + register_subalias("12", sub->m_Q[1]); // b + register_subalias("13", sub->m_Q[0]); // a + register_subalias("14", sub->m_Q[6]); // g + register_subalias("15", sub->m_Q[5]); // f } #endif diff --git a/src/lib/netlist/devices/nld_7448.h b/src/lib/netlist/devices/nld_7448.h index e633858dad5..deaf9389cb0 100644 --- a/src/lib/netlist/devices/nld_7448.h +++ b/src/lib/netlist/devices/nld_7448.h @@ -68,7 +68,7 @@ NETLIB_SUBDEVICE(7448_sub, NETLIB_DEVICE(7448, public: - NETLIB_NAME(7448_sub) sub; + NETLIB_SUB(7448_sub) sub; logic_input_t m_LTQ; logic_input_t m_BIQ; diff --git a/src/lib/netlist/devices/nld_7450.cpp b/src/lib/netlist/devices/nld_7450.cpp index 30d7916acf0..27a7fc92112 100644 --- a/src/lib/netlist/devices/nld_7450.cpp +++ b/src/lib/netlist/devices/nld_7450.cpp @@ -61,34 +61,34 @@ NETLIB_START(7450_dip) register_sub("1", m_1); register_sub("2", m_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("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("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(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7450.h b/src/lib/netlist/devices/nld_7450.h index 43b73636be3..ddcb61f0ed6 100644 --- a/src/lib/netlist/devices/nld_7450.h +++ b/src/lib/netlist/devices/nld_7450.h @@ -49,8 +49,8 @@ public: NETLIB_DEVICE(7450_dip, - NETLIB_NAME(7450) m_1; - NETLIB_NAME(7450) m_2; + NETLIB_SUB(7450) m_1; + NETLIB_SUB(7450) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7474.cpp b/src/lib/netlist/devices/nld_7474.cpp index 11088c89a79..2347e971f62 100644 --- a/src/lib/netlist/devices/nld_7474.cpp +++ b/src/lib/netlist/devices/nld_7474.cpp @@ -31,25 +31,25 @@ NETLIB_UPDATE(7474) if (INPLOGIC(m_PREQ) && INPLOGIC(m_CLRQ)) { m_D.activate(); - sub.m_nextD = INPLOGIC(m_D); - sub.m_CLK.activate_lh(); + sub->m_nextD = INPLOGIC(m_D); + sub->m_CLK.activate_lh(); } else if (!INPLOGIC(m_PREQ)) { - sub.newstate(1, 0); - sub.m_CLK.inactivate(); + sub->newstate(1, 0); + sub->m_CLK.inactivate(); m_D.inactivate(); } else if (!INPLOGIC(m_CLRQ)) { - sub.newstate(0, 1); - sub.m_CLK.inactivate(); + sub->newstate(0, 1); + sub->m_CLK.inactivate(); m_D.inactivate(); } else { - sub.newstate(1, 1); - sub.m_CLK.inactivate(); + sub->newstate(1, 1); + sub->m_CLK.inactivate(); m_D.inactivate(); } } @@ -58,19 +58,19 @@ NETLIB_START(7474) { register_sub("sub", sub); - register_subalias("CLK", sub.m_CLK); + register_subalias("CLK", sub->m_CLK); register_input("D", m_D); register_input("CLRQ", m_CLRQ); register_input("PREQ", m_PREQ); - register_subalias("Q", sub.m_Q); - register_subalias("QQ", sub.m_QQ); + register_subalias("Q", sub->m_Q); + register_subalias("QQ", sub->m_QQ); } NETLIB_RESET(7474) { - sub.do_reset(); + sub->do_reset(); } NETLIB_START(7474sub) @@ -95,33 +95,33 @@ NETLIB_START(7474_dip) register_sub("1", m_1); register_sub("2", m_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("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("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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7474.h b/src/lib/netlist/devices/nld_7474.h index f98de117350..3eefd4f6556 100644 --- a/src/lib/netlist/devices/nld_7474.h +++ b/src/lib/netlist/devices/nld_7474.h @@ -68,7 +68,7 @@ NETLIB_SUBDEVICE(7474sub, NETLIB_DEVICE(7474, public: - NETLIB_NAME(7474sub) sub; + NETLIB_SUB(7474sub) sub; logic_input_t m_D; logic_input_t m_CLRQ; @@ -77,8 +77,8 @@ public: NETLIB_DEVICE(7474_dip, - NETLIB_NAME(7474) m_1; - NETLIB_NAME(7474) m_2; + NETLIB_SUB(7474) m_1; + NETLIB_SUB(7474) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7486.cpp b/src/lib/netlist/devices/nld_7486.cpp index 5957c2c0433..3b1697a5639 100644 --- a/src/lib/netlist/devices/nld_7486.cpp +++ b/src/lib/netlist/devices/nld_7486.cpp @@ -80,38 +80,38 @@ NETLIB_START(7486_dip) register_sub("3", m_3); register_sub("4", m_4); - register_subalias("1", m_1.m_I[0]); - register_subalias("2", m_1.m_I[1]); - register_subalias("3", m_1.m_Q[0]); + register_subalias("1", m_1->m_I[0]); + register_subalias("2", m_1->m_I[1]); + register_subalias("3", m_1->m_Q[0]); - register_subalias("4", m_2.m_I[0]); - register_subalias("5", m_2.m_I[1]); - register_subalias("6", m_2.m_Q[0]); + register_subalias("4", m_2->m_I[0]); + register_subalias("5", m_2->m_I[1]); + register_subalias("6", m_2->m_Q[0]); - register_subalias("9", m_3.m_I[0]); - register_subalias("10", m_3.m_I[1]); - register_subalias("8", m_3.m_Q[0]); + register_subalias("9", m_3->m_I[0]); + register_subalias("10", m_3->m_I[1]); + register_subalias("8", m_3->m_Q[0]); - register_subalias("12", m_4.m_I[0]); - register_subalias("13", m_4.m_I[1]); - register_subalias("11", m_4.m_Q[0]); + register_subalias("12", m_4->m_I[0]); + register_subalias("13", m_4->m_I[1]); + register_subalias("11", m_4->m_Q[0]); } NETLIB_UPDATE(7486_dip) { /* only called during startup */ - m_1.update_dev(); - m_2.update_dev(); - m_3.update_dev(); - m_4.update_dev(); + 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(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7486.h b/src/lib/netlist/devices/nld_7486.h index affc57b51ed..80c92fc243d 100644 --- a/src/lib/netlist/devices/nld_7486.h +++ b/src/lib/netlist/devices/nld_7486.h @@ -62,10 +62,10 @@ public: 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_SUB(7486) m_1; + NETLIB_SUB(7486) m_2; + NETLIB_SUB(7486) m_3; + NETLIB_SUB(7486) m_4; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_7493.cpp b/src/lib/netlist/devices/nld_7493.cpp index b7979152f09..1fc89293b6f 100644 --- a/src/lib/netlist/devices/nld_7493.cpp +++ b/src/lib/netlist/devices/nld_7493.cpp @@ -17,26 +17,26 @@ NETLIB_START(7493) register_sub("C", C); register_sub("D", D); - register_subalias("CLKA", A.m_I); - register_subalias("CLKB", B.m_I); + register_subalias("CLKA", A->m_I); + register_subalias("CLKB", B->m_I); register_input("R1", m_R1); register_input("R2", m_R2); - register_subalias("QA", A.m_Q); - register_subalias("QB", B.m_Q); - register_subalias("QC", C.m_Q); - register_subalias("QD", D.m_Q); + register_subalias("QA", A->m_Q); + register_subalias("QB", B->m_Q); + register_subalias("QC", C->m_Q); + register_subalias("QD", D->m_Q); - connect_late(C.m_I, B.m_Q); - connect_late(D.m_I, C.m_Q); + connect_late(C->m_I, B->m_Q); + connect_late(D->m_I, C->m_Q); } 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) @@ -71,20 +71,20 @@ NETLIB_UPDATE(7493) if (r) { - A.m_I.inactivate(); - B.m_I.inactivate(); - OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40)); - A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0; - A.m_state = B.m_state = C.m_state = D.m_state = 0; + A->m_I.inactivate(); + B->m_I.inactivate(); + OUTLOGIC(A->m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(B->m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(C->m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(D->m_Q, 0, NLTIME_FROM_NS(40)); + A->m_reset = B->m_reset = C->m_reset = D->m_reset = 0; + A->m_state = B->m_state = C->m_state = D->m_state = 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_I.activate_hl(); + B->m_I.activate_hl(); + A->m_reset = B->m_reset = C->m_reset = D->m_reset = 1; } } @@ -92,7 +92,7 @@ NETLIB_START(7493_dip) { NETLIB_NAME(7493)::start(); - register_subalias("1", B.m_I); + register_subalias("1", B->m_I); register_subalias("2", m_R1); register_subalias("3", m_R2); @@ -101,13 +101,13 @@ NETLIB_START(7493_dip) // register_subalias("6", ); --> NC // register_subalias("7", ); --> NC - register_subalias("8", C.m_Q); - register_subalias("9", B.m_Q); + 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("11", D->m_Q); + register_subalias("12", A->m_Q); // register_subalias("13", ); --> NC - register_subalias("14", A.m_I); + register_subalias("14", A->m_I); } diff --git a/src/lib/netlist/devices/nld_7493.h b/src/lib/netlist/devices/nld_7493.h index 39a969d3b02..e58fdc03c16 100644 --- a/src/lib/netlist/devices/nld_7493.h +++ b/src/lib/netlist/devices/nld_7493.h @@ -83,10 +83,10 @@ NETLIB_DEVICE(7493, logic_input_t m_R1; logic_input_t m_R2; - NETLIB_NAME(7493ff) A; - NETLIB_NAME(7493ff) B; - NETLIB_NAME(7493ff) C; - NETLIB_NAME(7493ff) D; + NETLIB_SUB(7493ff) A; + NETLIB_SUB(7493ff) B; + NETLIB_SUB(7493ff) C; + NETLIB_SUB(7493ff) D; ); NETLIB_DEVICE_DERIVED_PURE(7493_dip, 7493); diff --git a/src/lib/netlist/devices/nld_74ls629.cpp b/src/lib/netlist/devices/nld_74ls629.cpp index a659fef032b..2310d1d2ef3 100644 --- a/src/lib/netlist/devices/nld_74ls629.cpp +++ b/src/lib/netlist/devices/nld_74ls629.cpp @@ -87,21 +87,21 @@ NETLIB_START(SN74LS629) register_input("ENQ", m_ENQ); register_input("RNG", m_RNG); register_input("FC", m_FC); - register_subalias("GND", m_R_FC.m_N); + register_subalias("GND", m_R_FC->m_N); - connect_late(m_FC, m_R_FC.m_P); - connect_late(m_RNG, m_R_RNG.m_P); - connect_late(m_R_FC.m_N, m_R_RNG.m_N); + connect_late(m_FC, m_R_FC->m_P); + connect_late(m_RNG, m_R_RNG->m_P); + connect_late(m_R_FC->m_N, m_R_RNG->m_N); - register_subalias("Y", m_clock.m_Y); + 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) @@ -147,23 +147,23 @@ NETLIB_UPDATE(SN74LS629) // FIXME: we need a possibility to remove entries from queue ... // or an exact model ... - m_clock.m_inc = netlist_time::from_double(0.5 / (double) freq); + m_clock->m_inc = netlist_time::from_double(0.5 / (double) freq); //m_clock.update(); //NL_VERBOSE_OUT(("{1} {2} {3} {4}\n", name(), v_freq, v_rng, freq)); } - if (!m_clock.m_enableq && INPLOGIC(m_ENQ)) + if (!m_clock->m_enableq && INPLOGIC(m_ENQ)) { - m_clock.m_enableq = 1; - m_clock.m_out = m_clock.m_out ^ 1; - OUTLOGIC(m_clock.m_Y, m_clock.m_out, netlist_time::from_nsec(1)); + m_clock->m_enableq = 1; + m_clock->m_out = m_clock->m_out ^ 1; + OUTLOGIC(m_clock->m_Y, m_clock->m_out, netlist_time::from_nsec(1)); } - else if (m_clock.m_enableq && !INPLOGIC(m_ENQ)) + else if (m_clock->m_enableq && !INPLOGIC(m_ENQ)) { - m_clock.m_enableq = 0; - m_clock.m_out = m_clock.m_out ^ 1; - OUTLOGIC(m_clock.m_Y, m_clock.m_out, netlist_time::from_nsec(1)); + m_clock->m_enableq = 0; + m_clock->m_out = m_clock->m_out ^ 1; + OUTLOGIC(m_clock->m_Y, m_clock->m_out, netlist_time::from_nsec(1)); } } @@ -179,21 +179,21 @@ NETLIB_START(SN74LS629_dip) register_sub("1", m_1); register_sub("2", m_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_late(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_late(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); } @@ -203,8 +203,8 @@ NETLIB_UPDATE(SN74LS629_dip) NETLIB_RESET(SN74LS629_dip) { - m_1.do_reset(); - m_2.do_reset(); + m_1->do_reset(); + m_2->do_reset(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_74ls629.h b/src/lib/netlist/devices/nld_74ls629.h index 433c2c32a11..e8f94c9ca75 100644 --- a/src/lib/netlist/devices/nld_74ls629.h +++ b/src/lib/netlist/devices/nld_74ls629.h @@ -48,9 +48,9 @@ NETLIB_SUBDEVICE(SN74LS629clk, 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_SUB(SN74LS629clk) m_clock; + NETLIB_SUB(R_base) m_R_FC; + NETLIB_SUB(R_base) m_R_RNG; logic_input_t m_ENQ; analog_input_t m_RNG; @@ -65,8 +65,8 @@ public: NETDEV_PARAMI(_name, 2.CAP, _cap2) NETLIB_DEVICE(SN74LS629_dip, - NETLIB_NAME(SN74LS629) m_1; - NETLIB_NAME(SN74LS629) m_2; + NETLIB_SUB(SN74LS629) m_1; + NETLIB_SUB(SN74LS629) m_2; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_9310.cpp b/src/lib/netlist/devices/nld_9310.cpp index 586f1b47c05..6e856a9a4a7 100644 --- a/src/lib/netlist/devices/nld_9310.cpp +++ b/src/lib/netlist/devices/nld_9310.cpp @@ -14,33 +14,33 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_START(9310) { register_sub("subABCD", subABCD); - sub.m_ABCD = &subABCD; register_sub("sub", sub); + sub->m_ABCD = &(*subABCD); - register_subalias("CLK", sub.m_CLK); + register_subalias("CLK", sub->m_CLK); register_input("ENP", m_ENP); register_input("ENT", m_ENT); register_input("CLRQ", m_CLRQ); register_input("LOADQ", m_LOADQ); - register_subalias("A", subABCD.m_A); - register_subalias("B", subABCD.m_B); - register_subalias("C", subABCD.m_C); - register_subalias("D", subABCD.m_D); + register_subalias("A", subABCD->m_A); + register_subalias("B", subABCD->m_B); + register_subalias("C", subABCD->m_C); + register_subalias("D", subABCD->m_D); - register_subalias("QA", sub.m_QA); - register_subalias("QB", sub.m_QB); - register_subalias("QC", sub.m_QC); - register_subalias("QD", sub.m_QD); - register_subalias("RC", sub.m_RC); + register_subalias("QA", sub->m_QA); + register_subalias("QB", sub->m_QB); + register_subalias("QC", sub->m_QC); + register_subalias("QD", sub->m_QD); + register_subalias("RC", sub->m_RC); } NETLIB_RESET(9310) { - sub.do_reset(); - subABCD.do_reset(); + sub->do_reset(); + subABCD->do_reset(); } NETLIB_START(9310_subABCD) @@ -126,25 +126,25 @@ NETLIB_UPDATE(9310_sub) NETLIB_UPDATE(9310) { - sub.m_loadq = INPLOGIC(m_LOADQ); - sub.m_ent = INPLOGIC(m_ENT); + sub->m_loadq = INPLOGIC(m_LOADQ); + sub->m_ent = INPLOGIC(m_ENT); const netlist_sig_t clrq = INPLOGIC(m_CLRQ); - if ((!sub.m_loadq || (sub.m_ent & INPLOGIC(m_ENP))) && clrq) + if ((!sub->m_loadq || (sub->m_ent & INPLOGIC(m_ENP))) && clrq) { - sub.m_CLK.activate_lh(); - OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); + sub->m_CLK.activate_lh(); + OUTLOGIC(sub->m_RC, sub->m_ent & (sub->m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } else { - sub.m_CLK.inactivate(); - if (!clrq && (sub.m_cnt>0)) + sub->m_CLK.inactivate(); + if (!clrq && (sub->m_cnt>0)) { - sub.update_outputs_all(0, NLTIME_FROM_NS(36)); - sub.m_cnt = 0; + sub->update_outputs_all(0, NLTIME_FROM_NS(36)); + sub->m_cnt = 0; //return; } - OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); + OUTLOGIC(sub->m_RC, sub->m_ent & (sub->m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } } @@ -206,21 +206,21 @@ NETLIB_START(9310_dip) NETLIB_NAME(9310)::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("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("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 } diff --git a/src/lib/netlist/devices/nld_9310.h b/src/lib/netlist/devices/nld_9310.h index 00c39605ac2..af6834160d3 100644 --- a/src/lib/netlist/devices/nld_9310.h +++ b/src/lib/netlist/devices/nld_9310.h @@ -96,8 +96,8 @@ NETLIB_SUBDEVICE(9310_sub, ); NETLIB_DEVICE(9310, - NETLIB_NAME(9310_sub) sub; - NETLIB_NAME(9310_subABCD) subABCD; + NETLIB_SUB(9310_sub) sub; + NETLIB_SUB(9310_subABCD) subABCD; logic_input_t m_ENP; logic_input_t m_ENT; logic_input_t m_CLRQ; diff --git a/src/lib/netlist/devices/nld_9312.cpp b/src/lib/netlist/devices/nld_9312.cpp index 0821861dea4..eaf405dd685 100644 --- a/src/lib/netlist/devices/nld_9312.cpp +++ b/src/lib/netlist/devices/nld_9312.cpp @@ -130,41 +130,41 @@ NETLIB_START(9312_dip) #if (1 && USE_TRUTHTABLE) - register_subalias("13", m_sub.m_I[0]); - register_subalias("12", m_sub.m_I[1]); - register_subalias("11", m_sub.m_I[2]); - register_subalias("10", m_sub.m_I[3]); - - register_subalias("1", m_sub.m_I[4]); - register_subalias("2", m_sub.m_I[5]); - register_subalias("3", m_sub.m_I[6]); - register_subalias("4", m_sub.m_I[7]); - register_subalias("5", m_sub.m_I[8]); - register_subalias("6", m_sub.m_I[9]); - register_subalias("7", m_sub.m_I[10]); - register_subalias("9", m_sub.m_I[11]); - - register_subalias("15", m_sub.m_Q[0]); // Y - register_subalias("14", m_sub.m_Q[1]); // YQ + register_subalias("13", m_sub->m_I[0]); + register_subalias("12", m_sub->m_I[1]); + register_subalias("11", m_sub->m_I[2]); + register_subalias("10", m_sub->m_I[3]); + + register_subalias("1", m_sub->m_I[4]); + register_subalias("2", m_sub->m_I[5]); + register_subalias("3", m_sub->m_I[6]); + register_subalias("4", m_sub->m_I[7]); + register_subalias("5", m_sub->m_I[8]); + register_subalias("6", m_sub->m_I[9]); + register_subalias("7", m_sub->m_I[10]); + register_subalias("9", m_sub->m_I[11]); + + register_subalias("15", m_sub->m_Q[0]); // Y + register_subalias("14", m_sub->m_Q[1]); // YQ #else - register_subalias("13", m_sub.m_C); - register_subalias("12", m_sub.m_B); - register_subalias("11", m_sub.m_A); - register_subalias("10", m_sub.m_G); + register_subalias("13", m_sub->m_C); + register_subalias("12", m_sub->m_B); + register_subalias("11", m_sub->m_A); + register_subalias("10", m_sub->m_G); - register_subalias("1", m_sub.m_D[0]); - register_subalias("2", m_sub.m_D[1]); - register_subalias("3", m_sub.m_D[2]); - register_subalias("4", m_sub.m_D[3]); - register_subalias("5", m_sub.m_D[4]); - register_subalias("6", m_sub.m_D[5]); - register_subalias("7", m_sub.m_D[6]); - register_subalias("9", m_sub.m_D[7]); + register_subalias("1", m_sub->m_D[0]); + register_subalias("2", m_sub->m_D[1]); + register_subalias("3", m_sub->m_D[2]); + register_subalias("4", m_sub->m_D[3]); + register_subalias("5", m_sub->m_D[4]); + register_subalias("6", m_sub->m_D[5]); + register_subalias("7", m_sub->m_D[6]); + register_subalias("9", m_sub->m_D[7]); - register_subalias("15", m_sub.m_Y); // Y - register_subalias("14", m_sub.m_YQ); // YQ + register_subalias("15", m_sub->m_Y); // Y + register_subalias("14", m_sub->m_YQ); // YQ #endif } @@ -172,11 +172,11 @@ NETLIB_START(9312_dip) NETLIB_UPDATE(9312_dip) { /* only called during startup */ - m_sub.update_dev(); + m_sub->update_dev(); } NETLIB_RESET(9312_dip) { - m_sub.do_reset(); + m_sub->do_reset(); } NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_9312.h b/src/lib/netlist/devices/nld_9312.h index 2d982474377..9b2359057e8 100644 --- a/src/lib/netlist/devices/nld_9312.h +++ b/src/lib/netlist/devices/nld_9312.h @@ -73,7 +73,7 @@ public: #endif NETLIB_DEVICE(9312_dip, - NETLIB_NAME(9312) m_sub; + NETLIB_SUB(9312) m_sub; ); NETLIB_NAMESPACE_DEVICES_END() diff --git a/src/lib/netlist/devices/nld_9316.cpp b/src/lib/netlist/devices/nld_9316.cpp index 220487f1037..a8ce31c0125 100644 --- a/src/lib/netlist/devices/nld_9316.cpp +++ b/src/lib/netlist/devices/nld_9316.cpp @@ -13,34 +13,34 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_START(9316) { - register_sub("subABCD", subABCD); - sub.m_ABCD = &subABCD; register_sub("sub", sub); + register_sub("subABCD", subABCD); + sub->m_ABCD = &(*subABCD); - register_subalias("CLK", sub.m_CLK); + register_subalias("CLK", sub->m_CLK); register_input("ENP", m_ENP); register_input("ENT", m_ENT); register_input("CLRQ", m_CLRQ); register_input("LOADQ", m_LOADQ); - register_subalias("A", subABCD.m_A); - register_subalias("B", subABCD.m_B); - register_subalias("C", subABCD.m_C); - register_subalias("D", subABCD.m_D); + register_subalias("A", subABCD->m_A); + register_subalias("B", subABCD->m_B); + register_subalias("C", subABCD->m_C); + register_subalias("D", subABCD->m_D); - register_subalias("QA", sub.m_QA); - register_subalias("QB", sub.m_QB); - register_subalias("QC", sub.m_QC); - register_subalias("QD", sub.m_QD); - register_subalias("RC", sub.m_RC); + register_subalias("QA", sub->m_QA); + register_subalias("QB", sub->m_QB); + register_subalias("QC", sub->m_QC); + register_subalias("QD", sub->m_QD); + register_subalias("RC", sub->m_RC); } NETLIB_RESET(9316) { - sub.do_reset(); - subABCD.do_reset(); + sub->do_reset(); + subABCD->do_reset(); } NETLIB_START(9316_subABCD) @@ -121,25 +121,25 @@ NETLIB_UPDATE(9316_sub) NETLIB_UPDATE(9316) { - sub.m_loadq = INPLOGIC(m_LOADQ); - sub.m_ent = INPLOGIC(m_ENT); + sub->m_loadq = INPLOGIC(m_LOADQ); + sub->m_ent = INPLOGIC(m_ENT); const netlist_sig_t clrq = INPLOGIC(m_CLRQ); - if (((sub.m_loadq ^ 1) | (sub.m_ent & INPLOGIC(m_ENP))) & clrq) + if (((sub->m_loadq ^ 1) | (sub->m_ent & INPLOGIC(m_ENP))) & clrq) { - sub.m_CLK.activate_lh(); - OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); + sub->m_CLK.activate_lh(); + OUTLOGIC(sub->m_RC, sub->m_ent & (sub->m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } else { - sub.m_CLK.inactivate(); - if (!clrq && (sub.m_cnt>0)) + sub->m_CLK.inactivate(); + if (!clrq && (sub->m_cnt>0)) { - sub.update_outputs_all(0, NLTIME_FROM_NS(36)); - sub.m_cnt = 0; + sub->update_outputs_all(0, NLTIME_FROM_NS(36)); + sub->m_cnt = 0; //return; } - OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); + OUTLOGIC(sub->m_RC, sub->m_ent & (sub->m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } } @@ -201,21 +201,21 @@ 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("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("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 } diff --git a/src/lib/netlist/devices/nld_9316.h b/src/lib/netlist/devices/nld_9316.h index e4d7a901c99..c006f0e98a8 100644 --- a/src/lib/netlist/devices/nld_9316.h +++ b/src/lib/netlist/devices/nld_9316.h @@ -101,8 +101,8 @@ NETLIB_SUBDEVICE(9316_sub, ); NETLIB_DEVICE(9316, - NETLIB_NAME(9316_sub) sub; - NETLIB_NAME(9316_subABCD) subABCD; + NETLIB_SUB(9316_sub) sub; + NETLIB_SUB(9316_subABCD) subABCD; logic_input_t m_ENP; logic_input_t m_ENT; logic_input_t m_CLRQ; diff --git a/src/lib/netlist/devices/nld_cmos.h b/src/lib/netlist/devices/nld_cmos.h index 61e1e8f7dae..d520a1d2761 100644 --- a/src/lib/netlist/devices/nld_cmos.h +++ b/src/lib/netlist/devices/nld_cmos.h @@ -16,8 +16,8 @@ NETLIB_NAMESPACE_DEVICES_START() class nld_vdd_vss : public device_t { public: - nld_vdd_vss () - : device_t() + nld_vdd_vss (netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name) { } analog_input_t m_vdd; diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp index 82e774b4923..ce3d30a14f5 100644 --- a/src/lib/netlist/devices/nld_mm5837.cpp +++ b/src/lib/netlist/devices/nld_mm5837.cpp @@ -24,15 +24,15 @@ NETLIB_START(MM5837_dip) /* output */ register_sub("RV", m_RV); - register_terminal("_RV1", m_RV.m_P); - register_terminal("_RV2", m_RV.m_N); + register_terminal("_RV1", m_RV->m_P); + register_terminal("_RV2", m_RV->m_N); register_output("_Q", m_V0); - connect_late(m_RV.m_N, m_V0); + connect_late(m_RV->m_N, m_V0); /* device */ register_input("1", m_VDD); register_input("2", m_VGG); - register_subalias("3", m_RV.m_P); + register_subalias("3", m_RV->m_P); register_input("4", m_VSS); save(NLNAME(m_shift)); @@ -41,11 +41,11 @@ NETLIB_START(MM5837_dip) NETLIB_RESET(MM5837_dip) { m_V0.initial(0.0); - m_RV.do_reset(); - m_RV.set(NL_FCONST(1.0) / R_LOW, 0.0, 0.0); + m_RV->do_reset(); + m_RV->set(NL_FCONST(1.0) / R_LOW, 0.0, 0.0); m_shift = 0x1ffff; - m_is_timestep = m_RV.m_P.net().solver()->is_timestep(); + m_is_timestep = m_RV->m_P.net().solver()->is_timestep(); } NETLIB_UPDATE(MM5837_dip) @@ -70,9 +70,9 @@ NETLIB_UPDATE(MM5837_dip) // We only need to update the net first if this is a time stepping net if (m_is_timestep) - m_RV.update_dev(); - m_RV.set(NL_FCONST(1.0) / R, V, 0.0); - m_RV.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_RV->update_dev(); + m_RV->set(NL_FCONST(1.0) / R, V, 0.0); + m_RV->m_P.schedule_after(NLTIME_FROM_NS(1)); } } diff --git a/src/lib/netlist/devices/nld_mm5837.h b/src/lib/netlist/devices/nld_mm5837.h index 33b42640e92..7c77da5e11c 100644 --- a/src/lib/netlist/devices/nld_mm5837.h +++ b/src/lib/netlist/devices/nld_mm5837.h @@ -34,7 +34,7 @@ NETLIB_DEVICE(MM5837_dip, analog_input_t m_VSS; /* output stage */ - nld_twoterm m_RV; + std::unique_ptr<nld_twoterm> m_RV; analog_output_t m_V0; /* could be gnd as well */ /* clock stage */ diff --git a/src/lib/netlist/devices/nld_ne555.cpp b/src/lib/netlist/devices/nld_ne555.cpp index efa6d25aec8..17847977a93 100644 --- a/src/lib/netlist/devices/nld_ne555.cpp +++ b/src/lib/netlist/devices/nld_ne555.cpp @@ -17,7 +17,7 @@ NETLIB_NAMESPACE_DEVICES_START() inline nl_double NETLIB_NAME(NE555)::clamp(const nl_double v, const nl_double a, const nl_double b) { nl_double ret = v; - nl_double vcc = TERMANALOG(m_R1.m_P); + nl_double vcc = TERMANALOG(m_R1->m_P); if (ret > vcc - a) ret = vcc - a; @@ -33,18 +33,18 @@ NETLIB_START(NE555) register_sub("R3", m_R3); register_sub("RDIS", m_RDIS); - register_subalias("GND", m_R3.m_N); // Pin 1 + register_subalias("GND", m_R3->m_N); // Pin 1 register_input("TRIG", m_TRIG); // Pin 2 register_output("OUT", m_OUT); // Pin 3 register_input("RESET", m_RESET); // Pin 4 - register_subalias("CONT", m_R1.m_N); // Pin 5 + register_subalias("CONT", m_R1->m_N); // Pin 5 register_input("THRESH", m_THRES); // Pin 6 - register_subalias("DISCH", m_RDIS.m_P); // Pin 7 - register_subalias("VCC", m_R1.m_P); // Pin 8 + register_subalias("DISCH", m_RDIS->m_P); // Pin 7 + register_subalias("VCC", m_R1->m_P); // Pin 8 - connect_late(m_R1.m_N, m_R2.m_P); - connect_late(m_R2.m_N, m_R3.m_P); - connect_late(m_RDIS.m_N, m_R3.m_N); + connect_late(m_R1->m_N, m_R2->m_P); + connect_late(m_R2->m_N, m_R3->m_P); + connect_late(m_RDIS->m_N, m_R3->m_N); save(NLNAME(m_last_out)); save(NLNAME(m_ff)); @@ -52,15 +52,15 @@ 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 = true; } @@ -69,9 +69,9 @@ NETLIB_UPDATE(NE555) { // FIXME: assumes GND is connected to 0V. - nl_double vt = clamp(TERMANALOG(m_R2.m_P), 0.7, 1.4); + nl_double vt = clamp(TERMANALOG(m_R2->m_P), 0.7, 1.4); bool bthresh = (INPANALOG(m_THRES) > vt); - bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2.m_N), 0.7, 1.4)); + bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2->m_N), 0.7, 1.4)); if (!btrig) { @@ -86,16 +86,16 @@ NETLIB_UPDATE(NE555) if (m_last_out && !out) { - m_RDIS.update_dev(); - OUTANALOG(m_OUT, TERMANALOG(m_R3.m_N)); - m_RDIS.set_R(R_ON); + m_RDIS->update_dev(); + OUTANALOG(m_OUT, TERMANALOG(m_R3->m_N)); + m_RDIS->set_R(R_ON); } else if (!m_last_out && out) { - m_RDIS.update_dev(); + m_RDIS->update_dev(); // FIXME: Should be delayed by 100ns - OUTANALOG(m_OUT, TERMANALOG(m_R1.m_P)); - m_RDIS.set_R(R_OFF); + OUTANALOG(m_OUT, TERMANALOG(m_R1->m_P)); + m_RDIS->set_R(R_OFF); } m_last_out = out; } @@ -105,14 +105,14 @@ NETLIB_START(NE555_dip) { NETLIB_NAME(NE555)::start(); - register_subalias("1", m_R3.m_N); // Pin 1 + 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("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("7", m_RDIS->m_P); // Pin 7 + register_subalias("8", m_R1->m_P); // Pin 8 } diff --git a/src/lib/netlist/devices/nld_ne555.h b/src/lib/netlist/devices/nld_ne555.h index 11228ffd447..0029fd6c6ee 100644 --- a/src/lib/netlist/devices/nld_ne555.h +++ b/src/lib/netlist/devices/nld_ne555.h @@ -28,10 +28,10 @@ NETLIB_NAMESPACE_DEVICES_START() NETLIB_DEVICE(NE555, - NETLIB_NAME(R) m_R1; - NETLIB_NAME(R) m_R2; - NETLIB_NAME(R) m_R3; - NETLIB_NAME(R) m_RDIS; + NETLIB_SUB(R) m_R1; + NETLIB_SUB(R) m_R2; + NETLIB_SUB(R) m_R3; + NETLIB_SUB(R) m_RDIS; logic_input_t m_RESET; analog_input_t m_THRES; diff --git a/src/lib/netlist/devices/nld_signal.h b/src/lib/netlist/devices/nld_signal.h index 0e659557e02..8805f9a8914 100644 --- a/src/lib/netlist/devices/nld_signal.h +++ b/src/lib/netlist/devices/nld_signal.h @@ -18,8 +18,8 @@ class NETLIB_NAME(_name) : public net_signal_t<_num_input, _check, _invert> \ { \ public: \ - NETLIB_NAME(_name) () \ - : net_signal_t<_num_input, _check, _invert>() { } \ + NETLIB_NAME(_name) (netlist_t &anetlist, const pstring &name) \ + : net_signal_t<_num_input, _check, _invert>(anetlist, name) { } \ } NETLIB_NAMESPACE_DEVICES_START() @@ -32,8 +32,8 @@ template <int _numdev, int _check, int _invert> class net_signal_t : public device_t { public: - net_signal_t() - : device_t(), m_active(1) + net_signal_t(netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name), m_active(1) { } diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp index 3e4565d09d2..77317f778e4 100644 --- a/src/lib/netlist/devices/nld_system.cpp +++ b/src/lib/netlist/devices/nld_system.cpp @@ -196,7 +196,7 @@ void nld_d_to_a_proxy::start() { nld_base_d_to_a_proxy::start(); - register_sub("RV", m_RV); + register_sub(m_RV); register_terminal("1", m_RV.m_P); register_terminal("2", m_RV.m_N); @@ -248,8 +248,8 @@ NETLIB_START(res_sw) register_param("RON", m_RON, 1.0); register_param("ROFF", m_ROFF, 1.0E20); - register_subalias("1", m_R.m_P); - register_subalias("2", m_R.m_N); + register_subalias("1", m_R->m_P); + register_subalias("2", m_R->m_N); save(NLNAME(m_last_state)); } @@ -257,7 +257,7 @@ NETLIB_START(res_sw) NETLIB_RESET(res_sw) { m_last_state = 0; - m_R.set_R(m_ROFF.Value()); + m_R->set_R(m_ROFF.Value()); } NETLIB_UPDATE(res_sw) @@ -269,17 +269,17 @@ NETLIB_UPDATE(res_sw) const nl_double R = state ? m_RON.Value() : m_ROFF.Value(); // We only need to update the net first if this is a time stepping net - if (0) // m_R.m_P.net().as_analog().solver()->is_timestep()) + if (0) // m_R->m_P.net().as_analog().solver()->is_timestep()) { - m_R.update_dev(); - m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R->update_dev(); + m_R->set_R(R); + m_R->m_P.schedule_after(NLTIME_FROM_NS(1)); } else { - m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); - //m_R.update_dev(); + m_R->set_R(R); + m_R->m_P.schedule_after(NLTIME_FROM_NS(1)); + //m_R->update_dev(); } } } diff --git a/src/lib/netlist/devices/nld_system.h b/src/lib/netlist/devices/nld_system.h index 7b9cb7298e5..674e81e7608 100644 --- a/src/lib/netlist/devices/nld_system.h +++ b/src/lib/netlist/devices/nld_system.h @@ -156,8 +156,8 @@ NETLIB_DEVICE_WITH_PARAMS(analog_input, class NETLIB_NAME(gnd) : public device_t { public: - NETLIB_NAME(gnd)() - : device_t(GND) { } + NETLIB_NAME(gnd)(netlist_t &anetlist, const pstring &name) + : device_t(GND, anetlist, name) { } virtual ~NETLIB_NAME(gnd)() {} @@ -189,8 +189,8 @@ private: class NETLIB_NAME(dummy_input) : public device_t { public: - NETLIB_NAME(dummy_input)() - : device_t(DUMMY) { } + NETLIB_NAME(dummy_input)(netlist_t &anetlist, const pstring &name) + : device_t(DUMMY, anetlist, name) { } virtual ~NETLIB_NAME(dummy_input)() {} @@ -221,8 +221,11 @@ private: class NETLIB_NAME(frontier) : public device_t { public: - NETLIB_NAME(frontier)() - : device_t(DUMMY) { } + NETLIB_NAME(frontier)(netlist_t &anetlist, const pstring &name) + : device_t(DUMMY, anetlist, name), + m_RIN(netlist(), "m_RIN"), + m_ROUT(netlist(), "m_ROUT") + { } virtual ~NETLIB_NAME(frontier)() {} @@ -274,8 +277,8 @@ private: class NETLIB_NAME(function) : public device_t { public: - NETLIB_NAME(function)() - : device_t() { } + NETLIB_NAME(function)(netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name) { } virtual ~NETLIB_NAME(function)() {} @@ -319,15 +322,15 @@ private: class NETLIB_NAME(res_sw) : public device_t { public: - NETLIB_NAME(res_sw)() - : device_t() { } + NETLIB_NAME(res_sw)(netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name) { } virtual ~NETLIB_NAME(res_sw)() {} param_double_t m_RON; param_double_t m_ROFF; logic_input_t m_I; - NETLIB_NAME(R) m_R; + NETLIB_SUB(R) m_R; protected: @@ -347,8 +350,8 @@ private: class nld_base_proxy : public device_t { public: - nld_base_proxy(logic_t *inout_proxied, core_terminal_t *proxy_inout) - : device_t() + nld_base_proxy(netlist_t &anetlist, const pstring &name, logic_t *inout_proxied, core_terminal_t *proxy_inout) + : device_t(anetlist, name) { m_logic_family = inout_proxied->logic_family(); m_term_proxied = inout_proxied; @@ -380,8 +383,8 @@ private: class nld_a_to_d_proxy : public nld_base_proxy { public: - nld_a_to_d_proxy(logic_input_t *in_proxied) - : nld_base_proxy(in_proxied, &m_I) + nld_a_to_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *in_proxied) + : nld_base_proxy(anetlist, name, in_proxied, &m_I) { } @@ -427,8 +430,8 @@ public: virtual logic_input_t &in() { return m_I; } protected: - nld_base_d_to_a_proxy(logic_output_t *out_proxied, core_terminal_t &proxy_out) - : nld_base_proxy(out_proxied, &proxy_out) + nld_base_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied, core_terminal_t &proxy_out) + : nld_base_proxy(anetlist, name, out_proxied, &proxy_out) { } @@ -445,9 +448,9 @@ private: class nld_d_to_a_proxy : public nld_base_d_to_a_proxy { public: - nld_d_to_a_proxy(logic_output_t *out_proxied) - : nld_base_d_to_a_proxy(out_proxied, m_RV.m_P) - , m_RV(TWOTERM) + nld_d_to_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *out_proxied) + : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) + , m_RV(TWOTERM, anetlist,"RV") , m_last_state(-1) , m_is_timestep(false) { @@ -482,14 +485,14 @@ public: class wrapper : public device_t { public: - wrapper(const pstring &dev_name) : device_t(), m_dev_name(dev_name) { } - protected: - virtual void init(netlist_t &anetlist, const pstring &aname) override + wrapper(const pstring &dev_name, netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name), m_dev_name(dev_name) { - anetlist.setup().namespace_push(aname); + anetlist.setup().namespace_push(name); anetlist.setup().include(m_dev_name); anetlist.setup().namespace_pop(); } + protected: void start() override { } void reset() override { } void update() override { } @@ -497,10 +500,9 @@ public: pstring m_dev_name; }; - ATTR_COLD device_t *Create() override + ATTR_COLD device_t *Create(netlist_t &anetlist, const pstring &name) override { - device_t *r = palloc(wrapper(this->name())); - return r; + return palloc(wrapper(this->name(), anetlist, name)); } private: diff --git a/src/lib/netlist/devices/nld_truthtable.h b/src/lib/netlist/devices/nld_truthtable.h index d84e3b56a13..328cb5bf69e 100644 --- a/src/lib/netlist/devices/nld_truthtable.h +++ b/src/lib/netlist/devices/nld_truthtable.h @@ -17,8 +17,8 @@ class NETLIB_NAME(_name) : public nld_truthtable_t<_nIN, _nOUT, _state> \ { \ public: \ - NETLIB_NAME(_name)() \ - : nld_truthtable_t<_nIN, _nOUT, _state>(&m_ttbl, m_desc) { } \ + NETLIB_NAME(_name)(netlist_t &anetlist, const pstring &name) \ + : nld_truthtable_t<_nIN, _nOUT, _state>(anetlist, name, &m_ttbl, m_desc) { }\ private: \ static truthtable_t m_ttbl; \ static const char *m_desc[]; \ @@ -100,8 +100,10 @@ public: struct truthtable_t { - truthtable_t() : m_initialized(false), - m_desc(m_NO, m_NI, has_state, &m_initialized, m_outs, m_timing, m_timing_nt) {} + truthtable_t() + : m_initialized(false), + m_desc(m_NO, m_NI, has_state, + &m_initialized, m_outs, m_timing, m_timing_nt) {} bool m_initialized; UINT32 m_outs[m_size]; UINT8 m_timing[m_size * m_NO]; @@ -109,8 +111,8 @@ public: truthtable_desc_t m_desc; }; - nld_truthtable_t(truthtable_t *ttbl, const char *desc[]) - : device_t(), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) + nld_truthtable_t(netlist_t &anetlist, const pstring &name, truthtable_t *ttbl, const char *desc[]) + : device_t(anetlist, name), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) { while (*desc != nullptr && **desc != 0 ) { @@ -120,8 +122,8 @@ public: } - nld_truthtable_t(truthtable_t *ttbl, const pstring_vector_t &desc) - : device_t(), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) + nld_truthtable_t(netlist_t &anetlist, const pstring &name, truthtable_t *ttbl, const pstring_vector_t &desc) + : device_t(anetlist, name), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) { m_desc = desc; } @@ -321,10 +323,10 @@ public: const pstring &def_param) : netlist_base_factory_truthtable_t(name, classname, def_param) { } - device_t *Create() override + device_t *Create(netlist_t &anetlist, const pstring &name) override { typedef nld_truthtable_t<m_NI, m_NO, has_state> tt_type; - device_t *r = palloc(tt_type(&m_ttbl, m_desc)); + device_t *r = palloc(tt_type(anetlist, name, &m_ttbl, m_desc)); r->set_logic_family(m_family); //r->init(setup, name); return r; diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 3cd6f6ba645..8daedc1ff7e 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -38,9 +38,9 @@ public: m_R_high = 130.0; m_is_static = true; } - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const override + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override { - return palloc(devices::nld_d_to_a_proxy(proxied)); + return palloc(devices::nld_d_to_a_proxy(anetlist, name, proxied)); } }; @@ -59,9 +59,9 @@ public: m_R_high = 10.0; m_is_static = true; } - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const override + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override { - return palloc(devices::nld_d_to_a_proxy(proxied)); + return palloc(devices::nld_d_to_a_proxy(anetlist, name, proxied)); } }; @@ -389,7 +389,7 @@ ATTR_HOT void netlist_t::process_queue(const netlist_time &delta) // net_core_device_t // ---------------------------------------------------------------------------------------- -ATTR_COLD core_device_t::core_device_t(const family_t afamily) +ATTR_COLD core_device_t::core_device_t(const family_t afamily, netlist_t &anetlist, const pstring &name) : object_t(DEVICE, afamily), logic_family_t() #if (NL_KEEP_STATISTICS) , stat_total_time(0) @@ -397,23 +397,9 @@ ATTR_COLD core_device_t::core_device_t(const family_t afamily) , stat_call_count(0) #endif { -} - -ATTR_COLD void core_device_t::init(netlist_t &anetlist, const pstring &name) -{ if (logic_family() == nullptr) set_logic_family(this->default_logic_family()); init_object(anetlist, name); - -#if (NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF) - void (core_device_t::* pFunc)() = &core_device_t::update; - m_static_update = pFunc; -#elif (NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF_CONV) - void (core_device_t::* pFunc)() = &core_device_t::update; - m_static_update = reinterpret_cast<net_update_delegate>((this->*pFunc)); -#elif (NL_PMF_TYPE == NL_PMF_TYPE_INTERNAL) - m_static_update = pmfp::get_mfp<net_update_delegate>(&core_device_t::update, this); -#endif } ATTR_COLD core_device_t::~core_device_t() @@ -425,6 +411,15 @@ ATTR_COLD void core_device_t::start_dev() #if (NL_KEEP_STATISTICS) netlist().m_started_devices.add(this, false); #endif +#if (NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF) + void (core_device_t::* pFunc)() = &core_device_t::update; + m_static_update = pFunc; +#elif (NL_PMF_TYPE == NL_PMF_TYPE_GNUC_PMF_CONV) + void (core_device_t::* pFunc)() = &core_device_t::update; + m_static_update = reinterpret_cast<net_update_delegate>((this->*pFunc)); +#elif (NL_PMF_TYPE == NL_PMF_TYPE_INTERNAL) + m_static_update = pmfp::get_mfp<net_update_delegate>(&core_device_t::update, this); +#endif start(); } @@ -453,14 +448,14 @@ ATTR_HOT netlist_sig_t core_device_t::INPLOGIC_PASSIVE(logic_input_t &inp) // device_t // ---------------------------------------------------------------------------------------- -device_t::device_t() - : core_device_t(GENERIC), +device_t::device_t(netlist_t &anetlist, const pstring &name) + : core_device_t(GENERIC, anetlist, name), m_terminals() { } -device_t::device_t(const family_t afamily) - : core_device_t(afamily), +device_t::device_t(const family_t afamily, netlist_t &anetlist, const pstring &name) + : core_device_t(afamily, anetlist, name), m_terminals() { } @@ -475,15 +470,8 @@ ATTR_COLD setup_t &device_t::setup() return netlist().setup(); } -ATTR_COLD void device_t::init(netlist_t &anetlist, const pstring &name) -{ - core_device_t::init(anetlist, name); -} - - -ATTR_COLD void device_t::register_sub(const pstring &name, device_t &dev) +ATTR_COLD void device_t::register_sub_p(device_t &dev) { - dev.init(netlist(), this->name() + "." + name); // subdevices always first inherit the logic family of the parent dev.set_logic_family(this->logic_family()); dev.start_dev(); diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index a0c66a258af..9e762554835 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -185,6 +185,7 @@ typedef unsigned int netlist_sig_t; #define NETLIB_NAMESPACE_DEVICES_END() }} #define NETLIB_NAME(_chip) nld_ ## _chip +#define NETLIB_SUB(_chip) std::unique_ptr< nld_ ## _chip > #define NETLIB_NAME_STR_S(_s) # _s #define NETLIB_NAME_STR(_chip) NETLIB_NAME_STR_S(nld_ ## _chip) @@ -207,8 +208,8 @@ typedef unsigned int netlist_sig_t; class _name : public _pclass \ { \ public: \ - _name() \ - : _pclass() { } \ + _name(netlist_t &anetlist, const pstring &name) \ + : _pclass(anetlist, name) { } \ protected: \ _extra \ ATTR_HOT void update() override; \ @@ -230,8 +231,8 @@ typedef unsigned int netlist_sig_t; class NETLIB_NAME(_name) : public device_t \ { \ public: \ - NETLIB_NAME(_name) () \ - : device_t() \ + NETLIB_NAME(_name) (netlist_t &anetlist, const pstring &name) \ + : device_t(anetlist, name) \ { } \ /*protected:*/ \ ATTR_HOT void update() override; \ @@ -326,7 +327,8 @@ namespace netlist public: logic_family_desc_t() : m_is_static(false) {} virtual ~logic_family_desc_t() {} - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const = 0; + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(netlist_t &anetlist, const pstring &name, + logic_output_t *proxied) const = 0; nl_double m_low_thresh_V; nl_double m_high_thresh_V; @@ -1025,11 +1027,10 @@ namespace netlist typedef pvector_t<core_device_t *> list_t; - ATTR_COLD core_device_t(const family_t afamily); + ATTR_COLD core_device_t(const family_t afamily, netlist_t &anetlist, const pstring &name); virtual ~core_device_t(); - virtual void init(netlist_t &anetlist, const pstring &name); ATTR_HOT virtual void update_param() {} ATTR_HOT void update_dev() @@ -1117,16 +1118,28 @@ namespace netlist P_PREVENT_COPYING(device_t) public: - ATTR_COLD device_t(); - ATTR_COLD device_t(const family_t afamily); + ATTR_COLD device_t(netlist_t &anetlist, const pstring &name); + ATTR_COLD device_t(const family_t afamily, netlist_t &anetlist, const pstring &name); virtual ~device_t(); - virtual void init(netlist_t &anetlist, const pstring &name) override; - ATTR_COLD setup_t &setup(); - ATTR_COLD void register_sub(const pstring &name, device_t &dev); + template<class C> + void register_sub(const pstring &name, std::unique_ptr<C> &dev) + { + dev.reset(new C(this->netlist(), this->name() + "." + name)); + + register_sub_p(*dev); + } + +#if 1 + void register_sub(device_t &dev) + { + register_sub_p(dev); + } +#endif + ATTR_COLD void register_subalias(const pstring &name, core_terminal_t &term); ATTR_COLD void register_subalias(const pstring &name, const pstring &aliased); ATTR_COLD void register_terminal(const pstring &name, terminal_t &port); @@ -1151,6 +1164,7 @@ namespace netlist ATTR_COLD void register_param(const pstring &sname, C ¶m, const T initialVal); private: + ATTR_COLD void register_sub_p(device_t &dev); }; diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp index 397aa756ea3..76ef3c03016 100644 --- a/src/lib/netlist/nl_factory.cpp +++ b/src/lib/netlist/nl_factory.cpp @@ -71,19 +71,19 @@ void factory_list_t::error(const pstring &s) m_setup.log().fatal("{1}", s); } -device_t *factory_list_t::new_device_by_name(const pstring &name) +device_t *factory_list_t::new_device_by_name(const pstring &devname, netlist_t &anetlist, const pstring &name) { - base_factory_t *f = factory_by_name(name); - return f->Create(); + base_factory_t *f = factory_by_name(devname); + return f->Create(anetlist, name); } -base_factory_t * factory_list_t::factory_by_name(const pstring &name) +base_factory_t * factory_list_t::factory_by_name(const pstring &devname) { - if (contains(name)) - return (*this)[name]; + if (contains(devname)) + return (*this)[devname]; else { - m_setup.log().fatal("Class {1} not found!\n", name); + m_setup.log().fatal("Class {1} not found!\n", devname); return nullptr; // appease code analysis } } diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index f9977ae414a..642ccb3e64a 100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h @@ -31,7 +31,7 @@ namespace netlist virtual ~base_factory_t() {} - virtual device_t *Create() = 0; + virtual device_t *Create(netlist_t &anetlist, const pstring &name) = 0; ATTR_COLD const pstring &name() const { return m_name; } ATTR_COLD const pstring &classname() const { return m_classname; } @@ -54,10 +54,9 @@ namespace netlist const pstring &def_param) : base_factory_t(name, classname, def_param) { } - ATTR_COLD device_t *Create() override + ATTR_COLD device_t *Create(netlist_t &anetlist, const pstring &name) override { - device_t *r = palloc(_device_class); - //r->init(setup, name); + device_t *r = palloc(_device_class(anetlist, name)); return r; } }; @@ -83,8 +82,9 @@ namespace netlist } //ATTR_COLD device_t *new_device_by_classname(const pstring &classname) const; - ATTR_COLD device_t *new_device_by_name(const pstring &name); - ATTR_COLD base_factory_t * factory_by_name(const pstring &name); + // FIXME: legacy, should use factory_by_name + ATTR_COLD device_t *new_device_by_name(const pstring &devname, netlist_t &anetlist, const pstring &name); + ATTR_COLD base_factory_t * factory_by_name(const pstring &devname); private: void error(const pstring &s); diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index bcbc788dbce..5521608a111 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -360,8 +360,8 @@ void parser_t::device(const pstring &dev_type) pstring devname = get_identifier(); - dev = f->Create(); - m_setup.register_dev(dev, devname); + dev = f->Create(m_setup.netlist(), m_setup.build_fqn(devname)); + m_setup.register_dev(dev); m_setup.log().debug("Parser: IC: {1}\n", devname); diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 3e347356b5a..e158a5c8673 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -103,15 +103,11 @@ void setup_t::namespace_pop() } -device_t *setup_t::register_dev(device_t *dev, const pstring &name) +device_t *setup_t::register_dev(device_t *dev) { - pstring fqn = build_fqn(name); - - dev->init(netlist(), fqn); - for (auto & d : netlist().m_devices) if (d->name() == dev->name()) - log().fatal("Error adding {1} to device list. Duplicate name \n", name); + log().fatal("Error adding {1} to device list. Duplicate name \n", d->name()); netlist().m_devices.push_back(dev); return dev; @@ -136,11 +132,11 @@ device_t *setup_t::register_dev(const pstring &classname, const pstring &name) } else { - device_t *dev = factory().new_device_by_name(classname); + device_t *dev = factory().new_device_by_name(classname, netlist(), build_fqn(name)); //device_t *dev = factory().new_device_by_classname(classname); if (dev == nullptr) log().fatal("Class {1} not found!\n", classname); - return register_dev(dev, name); + return register_dev(dev); } } @@ -477,11 +473,12 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(core_terminal_t &out) if (proxy == nullptr) { // create a new one ... - devices::nld_base_d_to_a_proxy *new_proxy = out_cast.logic_family()->create_d_a_proxy(&out_cast); pstring x = pfmt("proxy_da_{1}_{2}")(out.name())(m_proxy_cnt); + devices::nld_base_d_to_a_proxy *new_proxy = + out_cast.logic_family()->create_d_a_proxy(netlist(), x, &out_cast); m_proxy_cnt++; - register_dev(new_proxy, x); + register_dev(new_proxy); new_proxy->start_dev(); /* connect all existing terminals to new net */ @@ -506,12 +503,12 @@ void setup_t::connect_input_output(core_terminal_t &in, core_terminal_t &out) if (out.isFamily(terminal_t::ANALOG) && in.isFamily(terminal_t::LOGIC)) { logic_input_t &incast = dynamic_cast<logic_input_t &>(in); - devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(&incast)); - incast.set_proxy(proxy); pstring x = pfmt("proxy_ad_{1}_{2}")(in.name())( m_proxy_cnt); + devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(netlist(), x, &incast)); + incast.set_proxy(proxy); m_proxy_cnt++; - register_dev(proxy, x); + register_dev(proxy); proxy->start_dev(); proxy->m_Q.net().register_con(in); @@ -545,12 +542,12 @@ void setup_t::connect_terminal_input(terminal_t &term, core_terminal_t &inp) { logic_input_t &incast = dynamic_cast<logic_input_t &>(inp); log().debug("connect_terminal_input: connecting proxy\n"); - devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(&incast)); - incast.set_proxy(proxy); pstring x = pfmt("proxy_ad_{1}_{2}")(inp.name())(m_proxy_cnt); + devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(netlist(), x, &incast)); + incast.set_proxy(proxy); m_proxy_cnt++; - register_dev(proxy, x); + register_dev(proxy); proxy->start_dev(); connect_terminals(term, proxy->m_I); @@ -829,9 +826,9 @@ void setup_t::start_devices() pstring_vector_t loglist(env, ":"); for (pstring ll : loglist) { - device_t *nc = factory().new_device_by_name("LOG"); pstring name = "log_" + ll; - register_dev(nc, name); + device_t *nc = factory().new_device_by_name("LOG", netlist(), name); + register_dev(nc); register_link(name + ".I", ll); log().debug(" dynamic link {1}: <{2}>\n",ll, name); } @@ -863,9 +860,10 @@ class logic_family_std_proxy_t : public logic_family_desc_t { public: logic_family_std_proxy_t() { } - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const override + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(netlist_t &anetlist, + const pstring &name, logic_output_t *proxied) const override { - return palloc(devices::nld_d_to_a_proxy(proxied)); + return palloc(devices::nld_d_to_a_proxy(anetlist, name, proxied)); } }; diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 7313ecabcad..147def65405 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -137,7 +137,7 @@ namespace netlist pstring build_fqn(const pstring &obj_name) const; - device_t *register_dev(device_t *dev, const pstring &name); + device_t *register_dev(device_t *dev); device_t *register_dev(const pstring &classname, const pstring &name); void remove_dev(const pstring &name); diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp index 62a8af91b5a..99b395cb268 100644 --- a/src/lib/netlist/prg/nltool.cpp +++ b/src/lib/netlist/prg/nltool.cpp @@ -304,8 +304,7 @@ static void listdevices() pstring out = pfmt("{1} {2}(<id>")(f->classname(),"-20")(f->name()); pstring terms(""); - netlist::device_t *d = f->Create(); - d->init(nt, pfmt("dummy{1}")(i)); + netlist::device_t *d = f->Create(nt.setup().netlist(), pfmt("dummy{1}")(i)); d->start_dev(); // get the list of terminals ... diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h index 89dec8eee65..ccea7dc065e 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.h +++ b/src/lib/netlist/solver/nld_matrix_solver.h @@ -84,7 +84,8 @@ public: DESCENDING }; - matrix_solver_t(const eSortType sort, const solver_parameters_t *params); + matrix_solver_t(netlist_t &anetlist, const pstring &name, + const eSortType sort, const solver_parameters_t *params); virtual ~matrix_solver_t(); void setup(analog_net_t::list_t &nets) { vsetup(nets); } diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h index d6896cbe97d..bfbd0a66c7a 100644 --- a/src/lib/netlist/solver/nld_ms_direct.h +++ b/src/lib/netlist/solver/nld_ms_direct.h @@ -121,8 +121,8 @@ class matrix_solver_direct_t: public matrix_solver_t friend class matrix_solver_t; public: - matrix_solver_direct_t(const solver_parameters_t *params, const int size); - matrix_solver_direct_t(const eSortType sort, const solver_parameters_t *params, const int size); + matrix_solver_direct_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, const int size); + matrix_solver_direct_t(netlist_t &anetlist, const pstring &name, const eSortType sort, const solver_parameters_t *params, const int size); virtual ~matrix_solver_direct_t(); @@ -415,8 +415,9 @@ inline int matrix_solver_direct_t<m_N, _storage_N>::vsolve_non_dynamic(const boo } template <unsigned m_N, unsigned _storage_N> -matrix_solver_direct_t<m_N, _storage_N>::matrix_solver_direct_t(const solver_parameters_t *params, const int size) -: matrix_solver_t(ASCENDING, params) +matrix_solver_direct_t<m_N, _storage_N>::matrix_solver_direct_t(netlist_t &anetlist, const pstring &name, + const solver_parameters_t *params, const int size) +: matrix_solver_t(anetlist, name, ASCENDING, params) , m_dim(size) { #if (NL_USE_DYNAMIC_ALLOCATION) @@ -432,8 +433,9 @@ matrix_solver_direct_t<m_N, _storage_N>::matrix_solver_direct_t(const solver_par } template <unsigned m_N, unsigned _storage_N> -matrix_solver_direct_t<m_N, _storage_N>::matrix_solver_direct_t(const eSortType sort, const solver_parameters_t *params, const int size) -: matrix_solver_t(sort, params) +matrix_solver_direct_t<m_N, _storage_N>::matrix_solver_direct_t(netlist_t &anetlist, const pstring &name, + const eSortType sort, const solver_parameters_t *params, const int size) +: matrix_solver_t(anetlist, name, sort, params) , m_dim(size) { #if (NL_USE_DYNAMIC_ALLOCATION) diff --git a/src/lib/netlist/solver/nld_ms_direct1.h b/src/lib/netlist/solver/nld_ms_direct1.h index de359e5133f..a8e5baf8395 100644 --- a/src/lib/netlist/solver/nld_ms_direct1.h +++ b/src/lib/netlist/solver/nld_ms_direct1.h @@ -17,8 +17,8 @@ class matrix_solver_direct1_t: public matrix_solver_direct_t<1,1> { public: - matrix_solver_direct1_t(const solver_parameters_t *params) - : matrix_solver_direct_t<1, 1>(params, 1) + matrix_solver_direct1_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params) + : matrix_solver_direct_t<1, 1>(anetlist, name, params, 1) {} virtual int vsolve_non_dynamic(const bool newton_raphson) override; diff --git a/src/lib/netlist/solver/nld_ms_direct2.h b/src/lib/netlist/solver/nld_ms_direct2.h index d6e3d665a9f..646291e6e55 100644 --- a/src/lib/netlist/solver/nld_ms_direct2.h +++ b/src/lib/netlist/solver/nld_ms_direct2.h @@ -17,8 +17,8 @@ class matrix_solver_direct2_t: public matrix_solver_direct_t<2,2> { public: - matrix_solver_direct2_t(const solver_parameters_t *params) - : matrix_solver_direct_t<2, 2>(params, 2) + matrix_solver_direct2_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params) + : matrix_solver_direct_t<2, 2>(anetlist, name, params, 2) {} virtual int vsolve_non_dynamic(const bool newton_raphson) override; diff --git a/src/lib/netlist/solver/nld_ms_gcr.h b/src/lib/netlist/solver/nld_ms_gcr.h index 7670e036b8e..5d439496efa 100644 --- a/src/lib/netlist/solver/nld_ms_gcr.h +++ b/src/lib/netlist/solver/nld_ms_gcr.h @@ -30,8 +30,9 @@ class matrix_solver_GCR_t: public matrix_solver_t { public: - matrix_solver_GCR_t(const solver_parameters_t *params, int size) - : matrix_solver_t(matrix_solver_t::ASCENDING, params) + matrix_solver_GCR_t(netlist_t &anetlist, const pstring &name, + const solver_parameters_t *params, int size) + : matrix_solver_t(anetlist, name, matrix_solver_t::ASCENDING, params) , m_dim(size) , m_proc(nullptr) { diff --git a/src/lib/netlist/solver/nld_ms_gmres.h b/src/lib/netlist/solver/nld_ms_gmres.h index 8663da061d6..9e5542f2a42 100644 --- a/src/lib/netlist/solver/nld_ms_gmres.h +++ b/src/lib/netlist/solver/nld_ms_gmres.h @@ -26,8 +26,8 @@ class matrix_solver_GMRES_t: public matrix_solver_direct_t<m_N, _storage_N> { public: - matrix_solver_GMRES_t(const solver_parameters_t *params, int size) - : matrix_solver_direct_t<m_N, _storage_N>(matrix_solver_t::ASCENDING, params, size) + matrix_solver_GMRES_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, int size) + : matrix_solver_direct_t<m_N, _storage_N>(anetlist, name, matrix_solver_t::ASCENDING, params, size) , m_use_iLU_preconditioning(true) , m_use_more_precise_stop_condition(false) , m_accuracy_mult(1.0) diff --git a/src/lib/netlist/solver/nld_ms_sm.h b/src/lib/netlist/solver/nld_ms_sm.h index f38ee5a5783..c5d0e1105b6 100644 --- a/src/lib/netlist/solver/nld_ms_sm.h +++ b/src/lib/netlist/solver/nld_ms_sm.h @@ -52,7 +52,8 @@ class matrix_solver_sm_t: public matrix_solver_t public: - matrix_solver_sm_t(const solver_parameters_t *params, const int size); + matrix_solver_sm_t(netlist_t &anetlist, const pstring &name, + const solver_parameters_t *params, const int size); virtual ~matrix_solver_sm_t(); @@ -324,8 +325,9 @@ inline int matrix_solver_sm_t<m_N, _storage_N>::vsolve_non_dynamic(const bool ne } template <unsigned m_N, unsigned _storage_N> -matrix_solver_sm_t<m_N, _storage_N>::matrix_solver_sm_t(const solver_parameters_t *params, const int size) -: matrix_solver_t(NOSORT, params) +matrix_solver_sm_t<m_N, _storage_N>::matrix_solver_sm_t(netlist_t &anetlist, const pstring &name, + const solver_parameters_t *params, const int size) +: matrix_solver_t(anetlist, name, NOSORT, params) , m_dim(size) { #if (NL_USE_DYNAMIC_ALLOCATION) diff --git a/src/lib/netlist/solver/nld_ms_sor.h b/src/lib/netlist/solver/nld_ms_sor.h index f2df5f1237f..8d210cd79f7 100644 --- a/src/lib/netlist/solver/nld_ms_sor.h +++ b/src/lib/netlist/solver/nld_ms_sor.h @@ -24,8 +24,8 @@ class matrix_solver_SOR_t: public matrix_solver_direct_t<m_N, _storage_N> { public: - matrix_solver_SOR_t(const solver_parameters_t *params, int size) - : matrix_solver_direct_t<m_N, _storage_N>(matrix_solver_t::ASCENDING, params, size) + matrix_solver_SOR_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, int size) + : matrix_solver_direct_t<m_N, _storage_N>(anetlist, name, matrix_solver_t::ASCENDING, params, size) , m_lp_fact(0) { } diff --git a/src/lib/netlist/solver/nld_ms_sor_mat.h b/src/lib/netlist/solver/nld_ms_sor_mat.h index eb59a7a94ac..99a66afd221 100644 --- a/src/lib/netlist/solver/nld_ms_sor_mat.h +++ b/src/lib/netlist/solver/nld_ms_sor_mat.h @@ -27,8 +27,8 @@ class matrix_solver_SOR_mat_t: public matrix_solver_direct_t<m_N, _storage_N> public: - matrix_solver_SOR_mat_t(const solver_parameters_t *params, int size) - : matrix_solver_direct_t<m_N, _storage_N>(matrix_solver_t::DESCENDING, params, size) + matrix_solver_SOR_mat_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, int size) + : matrix_solver_direct_t<m_N, _storage_N>(anetlist, name, matrix_solver_t::DESCENDING, params, size) , m_omega(params->m_sor) , m_lp_fact(0) , m_gs_fail(0) diff --git a/src/lib/netlist/solver/nld_ms_w.h b/src/lib/netlist/solver/nld_ms_w.h index 89f83dea6cc..e976fcf3184 100644 --- a/src/lib/netlist/solver/nld_ms_w.h +++ b/src/lib/netlist/solver/nld_ms_w.h @@ -58,7 +58,7 @@ class matrix_solver_w_t: public matrix_solver_t friend class matrix_solver_t; public: - matrix_solver_w_t(const solver_parameters_t *params, const int size); + matrix_solver_w_t(netlist_t &anetlist, const pstring &name, const solver_parameters_t *params, const int size); virtual ~matrix_solver_w_t(); @@ -389,8 +389,9 @@ inline int matrix_solver_w_t<m_N, _storage_N>::vsolve_non_dynamic(const bool new } template <unsigned m_N, unsigned _storage_N> -matrix_solver_w_t<m_N, _storage_N>::matrix_solver_w_t(const solver_parameters_t *params, const int size) -: matrix_solver_t(NOSORT, params) +matrix_solver_w_t<m_N, _storage_N>::matrix_solver_w_t(netlist_t &anetlist, const pstring &name, + const solver_parameters_t *params, const int size) +: matrix_solver_t(anetlist, name, NOSORT, params) ,m_cnt(0) , m_dim(size) { diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp index 9fa0ee16c60..525cce76eee 100644 --- a/src/lib/netlist/solver/nld_solver.cpp +++ b/src/lib/netlist/solver/nld_solver.cpp @@ -94,8 +94,10 @@ ATTR_COLD void terms_t::set_pointers() // matrix_solver // ---------------------------------------------------------------------------------------- -ATTR_COLD matrix_solver_t::matrix_solver_t(const eSortType sort, const solver_parameters_t *params) -: m_stat_calculations(0), +ATTR_COLD matrix_solver_t::matrix_solver_t(netlist_t &anetlist, const pstring &name, + const eSortType sort, const solver_parameters_t *params) +: device_t(anetlist, name), + m_stat_calculations(0), m_stat_newton_raphson(0), m_stat_vsolver_calls(0), m_iterative_fail(0), @@ -707,10 +709,11 @@ NETLIB_UPDATE(solver) template <int m_N, int _storage_N> matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_specific) { + pstring solvername = pfmt("Solver_{1}")(m_mat_solvers.size()); if (use_specific && m_N == 1) - return palloc(matrix_solver_direct1_t(&m_params)); + return palloc(matrix_solver_direct1_t(netlist(), solvername, &m_params)); else if (use_specific && m_N == 2) - return palloc(matrix_solver_direct2_t(&m_params)); + return palloc(matrix_solver_direct2_t(netlist(), solvername, &m_params)); else { if (size >= m_gs_threshold) @@ -718,39 +721,39 @@ matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_sp if (pstring("SOR_MAT").equals(m_iterative_solver)) { typedef matrix_solver_SOR_mat_t<m_N,_storage_N> solver_sor_mat; - return palloc(solver_sor_mat(&m_params, size)); + return palloc(solver_sor_mat(netlist(), solvername, &m_params, size)); } else if (pstring("MAT_CR").equals(m_iterative_solver)) { typedef matrix_solver_GCR_t<m_N,_storage_N> solver_mat; - return palloc(solver_mat(&m_params, size)); + return palloc(solver_mat(netlist(), solvername, &m_params, size)); } else if (pstring("MAT").equals(m_iterative_solver)) { typedef matrix_solver_direct_t<m_N,_storage_N> solver_mat; - return palloc(solver_mat(&m_params, size)); + return palloc(solver_mat(netlist(), solvername, &m_params, size)); } else if (pstring("SM").equals(m_iterative_solver)) { /* Sherman-Morrison Formula */ typedef matrix_solver_sm_t<m_N,_storage_N> solver_mat; - return palloc(solver_mat(&m_params, size)); + return palloc(solver_mat(netlist(), solvername, &m_params, size)); } else if (pstring("W").equals(m_iterative_solver)) { /* Woodbury Formula */ typedef matrix_solver_w_t<m_N,_storage_N> solver_mat; - return palloc(solver_mat(&m_params, size)); + return palloc(solver_mat(netlist(), solvername, &m_params, size)); } else if (pstring("SOR").equals(m_iterative_solver)) { typedef matrix_solver_SOR_t<m_N,_storage_N> solver_GS; - return palloc(solver_GS(&m_params, size)); + return palloc(solver_GS(netlist(), solvername, &m_params, size)); } else if (pstring("GMRES").equals(m_iterative_solver)) { typedef matrix_solver_GMRES_t<m_N,_storage_N> solver_GMRES; - return palloc(solver_GMRES(&m_params, size)); + return palloc(solver_GMRES(netlist(), solvername, &m_params, size)); } else { @@ -761,7 +764,7 @@ matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const bool use_sp else { typedef matrix_solver_direct_t<m_N,_storage_N> solver_D; - return palloc(solver_D(&m_params, size)); + return palloc(solver_D(netlist(), solvername, &m_params, size)); } } } @@ -900,7 +903,7 @@ ATTR_COLD void NETLIB_NAME(solver)::post_start() break; } - register_sub(pfmt("Solver_{1}")(m_mat_solvers.size()), *ms); + register_sub(*ms); ms->setup(grp); diff --git a/src/lib/netlist/solver/nld_solver.h b/src/lib/netlist/solver/nld_solver.h index 7d11086edac..969b378e5f4 100644 --- a/src/lib/netlist/solver/nld_solver.h +++ b/src/lib/netlist/solver/nld_solver.h @@ -54,8 +54,8 @@ class matrix_solver_t; class NETLIB_NAME(solver) : public device_t { public: - NETLIB_NAME(solver)() - : device_t() { } + NETLIB_NAME(solver)(netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name) { } virtual ~NETLIB_NAME(solver)(); |