From c6eebfaa0ac271047067dcc56dd60c9e0b6dc493 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sun, 7 Apr 2019 19:04:04 +0200 Subject: netlist: Add LM2902, code refactoring. (nw) --- src/lib/netlist/analog/nld_bjt.cpp | 26 ++++++-------------------- src/lib/netlist/analog/nld_opamps.cpp | 13 +++---------- src/lib/netlist/analog/nlid_twoterm.h | 13 +------------ src/lib/netlist/macro/nlm_opamp.cpp | 12 ++++++++++++ src/lib/netlist/macro/nlm_opamp.h | 9 ++++++--- src/lib/netlist/nl_base.h | 5 +++++ 6 files changed, 33 insertions(+), 45 deletions(-) diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp index 98a0d80836f..7118d77c3a3 100644 --- a/src/lib/netlist/analog/nld_bjt.cpp +++ b/src/lib/netlist/analog/nld_bjt.cpp @@ -126,7 +126,7 @@ namespace analog // Have a common start for transistors - NETLIB_OBJECT(Q) + NETLIB_OBJECT(QBJT) { public: enum q_type { @@ -134,8 +134,8 @@ namespace analog BJT_PNP }; - NETLIB_CONSTRUCTOR(Q) - , m_model(*this, "MODEL", "NPN") + NETLIB_CONSTRUCTOR_EX(QBJT, pstring model = "NPN") + , m_model(*this, "MODEL", model) , m_qtype(BJT_NPN) { } @@ -155,20 +155,6 @@ namespace analog q_type m_qtype; }; - NETLIB_OBJECT_DERIVED(QBJT, Q) - { - public: - NETLIB_CONSTRUCTOR_DERIVED(QBJT, Q) - { } - - protected: - - private: - }; - - - - // ----------------------------------------------------------------------------- // nld_QBJT_switch // ----------------------------------------------------------------------------- @@ -301,7 +287,7 @@ namespace analog // nld_Q // ---------------------------------------------------------------------------------------- - NETLIB_UPDATE(Q) + NETLIB_UPDATE(QBJT) { // netlist().solver()->schedule1(); } @@ -313,7 +299,7 @@ namespace analog NETLIB_RESET(QBJT_switch) { - NETLIB_NAME(Q)::reset(); + NETLIB_NAME(QBJT)::reset(); m_state_on = 0; @@ -399,7 +385,7 @@ namespace analog NETLIB_RESET(QBJT_EB) { - NETLIB_NAME(Q)::reset(); + NETLIB_NAME(QBJT)::reset(); if (m_CJE) { m_CJE->reset(); diff --git a/src/lib/netlist/analog/nld_opamps.cpp b/src/lib/netlist/analog/nld_opamps.cpp index 009795e9a00..6fe4657a628 100644 --- a/src/lib/netlist/analog/nld_opamps.cpp +++ b/src/lib/netlist/analog/nld_opamps.cpp @@ -169,10 +169,10 @@ namespace netlist } NETLIB_UPDATEI(); - NETLIB_RESETI(); - NETLIB_UPDATE_PARAMI() + NETLIB_RESETI() { } + NETLIB_UPDATE_PARAMI(); private: @@ -206,9 +206,8 @@ namespace netlist m_VREF.push((m_VCC() + m_GND()) / 2.0); } - NETLIB_RESET(opamp) + NETLIB_UPDATE_PARAM(opamp) { - m_G1.reset(); m_G1.m_RI.setTo(m_model.m_RI); if (m_type == 1) @@ -220,10 +219,6 @@ namespace netlist } if (m_type == 3 || m_type == 2) { - m_EBUF->reset(); - m_CP->reset(); - m_RP.reset(); - double CP = m_model.m_DAB / m_model.m_SLEW; double RP = 0.5 / constants::pi() / CP / m_model.m_FPF; double G = m_model.m_UGF / m_model.m_FPF / RP; @@ -244,8 +239,6 @@ namespace netlist } if (m_type == 3) { - m_DP->reset(); - m_DN->reset(); m_EBUF->m_G.setTo(1.0); m_EBUF->m_RO.setTo(m_model.m_RO); } diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h index 00812911550..5f900adb652 100644 --- a/src/lib/netlist/analog/nlid_twoterm.h +++ b/src/lib/netlist/analog/nlid_twoterm.h @@ -351,18 +351,7 @@ namespace analog NETLIB_OBJECT_DERIVED(D, twoterm) { public: - NETLIB_CONSTRUCTOR_DERIVED(D, twoterm) - , m_model(*this, "MODEL", "D") - , m_D(*this, "m_D") - { - register_subalias("A", m_P); - register_subalias("K", m_N); - } - - /* needed by nld_opamp ... */ - template - NETLIB_NAME(D)(CLASS &owner, const pstring &name, const pstring &model) - : NETLIB_NAME(twoterm)(owner, name) + NETLIB_CONSTRUCTOR_DERIVED_EX(D, twoterm, pstring model = "D") , m_model(*this, "MODEL", model) , m_D(*this, "m_D") { diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp.cpp index cfa25cd88b4..f59fea119f6 100644 --- a/src/lib/netlist/macro/nlm_opamp.cpp +++ b/src/lib/netlist/macro/nlm_opamp.cpp @@ -137,6 +137,17 @@ static NETLIST_START(LM324_DIP) NETLIST_END() +static NETLIST_START(LM2902_DIP) + // Same datasheet and mostly same characteristics as LM324 + OPAMP(A, "LM324") + OPAMP(B, "LM324") + OPAMP(C, "LM324") + OPAMP(D, "LM324") + + INCLUDE(opamp_layout_4_4_11) + +NETLIST_END() + static NETLIST_START(LM358_DIP) OPAMP(A, "LM358") OPAMP(B, "LM358") @@ -233,6 +244,7 @@ NETLIST_START(OPAMP_lib) LOCAL_LIB_ENTRY(MB3614_DIP) LOCAL_LIB_ENTRY(LM324_DIP) LOCAL_LIB_ENTRY(LM358_DIP) + LOCAL_LIB_ENTRY(LM2902_DIP) LOCAL_LIB_ENTRY(UA741_DIP8) LOCAL_LIB_ENTRY(UA741_DIP10) LOCAL_LIB_ENTRY(UA741_DIP14) diff --git a/src/lib/netlist/macro/nlm_opamp.h b/src/lib/netlist/macro/nlm_opamp.h index fbd7547c976..13d2254d952 100644 --- a/src/lib/netlist/macro/nlm_opamp.h +++ b/src/lib/netlist/macro/nlm_opamp.h @@ -13,13 +13,16 @@ #ifndef NL_AUTO_DEVICES -#define MB3614_DIP(name) \ +#define MB3614_DIP(name) \ NET_REGISTER_DEV(MB3614_DIP, name) -#define LM324_DIP(name) \ +#define LM324_DIP(name) \ NET_REGISTER_DEV(LM324_DIP, name) -#define LM358_DIP(name) \ +#define LM2902_DIP(name) \ + NET_REGISTER_DEV(LM2902_DIP, name) + +#define LM358_DIP(name) \ NET_REGISTER_DEV(LM358_DIP, name) #define LM3900(name) \ diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index c1de785b4c5..cd43b5688ad 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -59,6 +59,11 @@ class NETLIB_NAME(name) : public device_t public: template NETLIB_NAME(cname)(CLASS &owner, const pstring &name) \ : NETLIB_NAME(pclass)(owner, name) +#define NETLIB_CONSTRUCTOR_DERIVED_EX(cname, pclass, ...) \ + private: detail::family_setter_t m_famsetter; \ + public: template NETLIB_NAME(cname)(CLASS &owner, const pstring &name, __VA_ARGS__) \ + : NETLIB_NAME(pclass)(owner, name) + /*! Used to define the constructor of a netlist device. * Use this to define the constructor of a netlist device. Please refer to * #NETLIB_OBJECT for an example. -- cgit v1.2.3