diff --git a/src/lib/netlist/analog/nld_twoterm.cpp b/src/lib/netlist/analog/nld_twoterm.cpp index 9818ea9f86f..977674a2f0e 100644 --- a/src/lib/netlist/analog/nld_twoterm.cpp +++ b/src/lib/netlist/analog/nld_twoterm.cpp @@ -97,6 +97,34 @@ NETLIB_UPDATE(twoterm) m_N.schedule_solve(); } +// ---------------------------------------------------------------------------------------- +// nld_R_base +// ---------------------------------------------------------------------------------------- + +NETLIB_RESET(R_base) +{ + NETLIB_NAME(twoterm)::reset(); + set_R(1.0 / netlist().gmin()); +} + +NETLIB_UPDATE(R_base) +{ + NETLIB_NAME(twoterm)::update(); +} + +// ---------------------------------------------------------------------------------------- +// nld_R +// ---------------------------------------------------------------------------------------- + +NETLIB_UPDATE_PARAM(R) +{ + update_dev(); + if (m_R() > 1e-9) + set_R(m_R()); + else + set_R(1e-9); +} + // ---------------------------------------------------------------------------------------- // nld_POT // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h index 2ff6db1e2c3..4938c569f0d 100644 --- a/src/lib/netlist/analog/nld_twoterm.h +++ b/src/lib/netlist/analog/nld_twoterm.h @@ -173,17 +173,8 @@ public: } protected: - NETLIB_RESETI() - { - NETLIB_NAME(twoterm)::reset(); - set_R(1.0 / netlist().gmin()); - } - - NETLIB_UPDATEI() - { - NETLIB_NAME(twoterm)::update(); - } - + NETLIB_RESETI(); + NETLIB_UPDATEI(); }; @@ -200,15 +191,7 @@ protected: //NETLIB_RESETI() { } //NETLIB_UPDATEI() { } - NETLIB_UPDATE_PARAMI() - { - update_dev(); - if (m_R() > 1e-9) - set_R(m_R()); - else - set_R(1e-9); - } - + NETLIB_UPDATE_PARAMI(); }; // ----------------------------------------------------------------------------- diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 81883053776..d33255759b4 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -120,6 +120,7 @@ NLOBJS := \ $(NLOBJ)/macro/nlm_other.o \ $(NLOBJ)/macro/nlm_ttl74xx.o \ $(NLOBJ)/solver/nld_solver.o \ + $(NLOBJ)/solver/nld_matrix_solver.o \ $(NLOBJ)/tools/nl_convert.o \ ALL_OBJS = $(OBJS) $(NLOBJ)/prg/nltool.o $(NLOBJ)/prg/nlwav.o @@ -167,9 +168,10 @@ maketree: $(sort $(OBJDIRS)) .PHONY: clang mingw doc clang: - $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-Weverything -Werror -Wno-padded -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-cast-align -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-exit-time-destructors -Wno-format-nonliteral -Wno-weak-template-vtables" + $(MAKE) CC=clang++ LD=clang++ CEXTRAFLAGS="-Weverything -Werror -Wno-padded -Wno-weak-vtables -Wno-missing-variable-declarations -Wconversion -Wno-c++98-compat -Wno-float-equal -Wno-global-constructors -Wno-c++98-compat-pedantic -Wno-format-nonliteral -Wno-weak-template-vtables -Wno-exit-time-destructors" -#-Wno-weak-vtables +# +# Mostly done: -Wno-weak-vtables -Wno-cast-align # FIXME: -Wno-weak-vtables -Wno-missing-variable-declarations -Wno-conversion -Wno-exit-time-destructors # diff --git a/src/lib/netlist/devices/nld_truthtable.cpp b/src/lib/netlist/devices/nld_truthtable.cpp index c133a29df79..dfcffa2cdf3 100644 --- a/src/lib/netlist/devices/nld_truthtable.cpp +++ b/src/lib/netlist/devices/nld_truthtable.cpp @@ -259,6 +259,17 @@ void truthtable_desc_t::setup(const plib::pstring_vector_t &truthtable, uint_lea } +netlist_base_factory_truthtable_t::netlist_base_factory_truthtable_t(const pstring &name, const pstring &classname, + const pstring &def_param) +: factory::element_t(name, classname, def_param), m_family(family_TTL()) +{ +} + +netlist_base_factory_truthtable_t::~netlist_base_factory_truthtable_t() +{ +} + + #define ENTRYY(n, m) case (n * 100 + m): \ { using xtype = netlist_factory_truthtable_t; \ ret = new xtype(desc.name, desc.classname, desc.def_param); } break diff --git a/src/lib/netlist/devices/nld_truthtable.h b/src/lib/netlist/devices/nld_truthtable.h index 564699cd89b..a99e54ca2c8 100644 --- a/src/lib/netlist/devices/nld_truthtable.h +++ b/src/lib/netlist/devices/nld_truthtable.h @@ -371,13 +371,9 @@ namespace netlist P_PREVENT_COPYING(netlist_base_factory_truthtable_t) public: netlist_base_factory_truthtable_t(const pstring &name, const pstring &classname, - const pstring &def_param) - : factory::element_t(name, classname, def_param), m_family(family_TTL()) - {} + const pstring &def_param); - virtual ~netlist_base_factory_truthtable_t() - { - } + virtual ~netlist_base_factory_truthtable_t(); plib::pstring_vector_t m_desc; const logic_family_desc_t *m_family; diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index ab643f1ee87..5df0b15f4da 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -81,16 +81,19 @@ public: m_R_low = 1.0; m_R_high = 130.0; } - virtual plib::owned_ptr create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } - virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } + virtual plib::owned_ptr create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override; + virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override; }; +plib::owned_ptr logic_family_ttl_t::create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} +plib::owned_ptr logic_family_ttl_t::create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} + class logic_family_cd4xxx_t : public logic_family_desc_t { public: @@ -105,16 +108,19 @@ public: m_R_low = 10.0; m_R_high = 10.0; } - virtual plib::owned_ptr create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } - virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } + virtual plib::owned_ptr create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const override; + virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override; }; +plib::owned_ptr logic_family_cd4xxx_t::create_d_a_proxy(netlist_t &anetlist, const pstring &name, logic_output_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} +plib::owned_ptr logic_family_cd4xxx_t::create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} + const logic_family_desc_t *family_TTL() { static logic_family_ttl_t obj; @@ -850,6 +856,9 @@ terminal_t::terminal_t(core_device_t &dev, const pstring &aname) netlist().setup().register_term(*this); } +terminal_t::~terminal_t() +{ +} void terminal_t::schedule_solve() { @@ -906,6 +915,10 @@ analog_input_t::analog_input_t(core_device_t &dev, const pstring &aname) netlist().setup().register_term(*this); } +analog_input_t::~analog_input_t() +{ +} + // ---------------------------------------------------------------------------------------- // analog_output_t // ---------------------------------------------------------------------------------------- @@ -979,6 +992,14 @@ param_str_t::param_str_t(device_t &device, const pstring name, const pstring val m_param = device.setup().get_initial_param_val(this->name(),val); } +param_str_t::~param_str_t() +{ +} + +void param_str_t::changed() +{ +} + param_double_t::param_double_t(device_t &device, const pstring name, const double val) : param_t(param_t::DOUBLE, device, name) { @@ -986,6 +1007,10 @@ param_double_t::param_double_t(device_t &device, const pstring name, const doubl netlist().save(*this, m_param, "m_param"); } +param_double_t::~param_double_t() +{ +} + param_int_t::param_int_t(device_t &device, const pstring name, const int val) : param_t(param_t::INTEGER, device, name) { @@ -993,6 +1018,10 @@ param_int_t::param_int_t(device_t &device, const pstring name, const int val) netlist().save(*this, m_param, "m_param"); } +param_int_t::~param_int_t() +{ +} + param_logic_t::param_logic_t(device_t &device, const pstring name, const bool val) : param_t(param_t::LOGIC, device, name) { @@ -1000,6 +1029,10 @@ param_logic_t::param_logic_t(device_t &device, const pstring name, const bool va netlist().save(*this, m_param, "m_param"); } +param_logic_t::~param_logic_t() +{ +} + param_ptr_t::param_ptr_t(device_t &device, const pstring name, uint8_t * val) : param_t(param_t::POINTER, device, name) { @@ -1007,7 +1040,7 @@ param_ptr_t::param_ptr_t(device_t &device, const pstring name, uint8_t * val) //netlist().save(*this, m_param, "m_param"); } -void param_str_t::changed() +param_ptr_t::~param_ptr_t() { } diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index e85a891aaaf..9314c6968ec 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -548,6 +548,7 @@ namespace netlist public: terminal_t(core_device_t &dev, const pstring &aname); + virtual ~terminal_t(); nl_double operator ()() const; @@ -671,6 +672,9 @@ namespace netlist const pstring &aname /*!< name of terminal */ ); + /*! Destructor */ + virtual ~analog_input_t(); + /*! returns voltage at terminal. * \returns voltage at terminal. */ @@ -891,6 +895,7 @@ namespace netlist { public: param_ptr_t(device_t &device, const pstring name, std::uint8_t* val); + virtual ~param_ptr_t(); std::uint8_t * operator()() const { return m_param; } void setTo(std::uint8_t *param) { set(m_param, param); } private: @@ -901,6 +906,7 @@ namespace netlist { public: param_logic_t(device_t &device, const pstring name, const bool val); + virtual ~param_logic_t(); bool operator()() const { return m_param; } void setTo(const bool ¶m) { set(m_param, param); } private: @@ -911,6 +917,7 @@ namespace netlist { public: param_int_t(device_t &device, const pstring name, const int val); + virtual ~param_int_t(); int operator()() const { return m_param; } void setTo(const int ¶m) { set(m_param, param); } private: @@ -921,6 +928,7 @@ namespace netlist { public: param_double_t(device_t &device, const pstring name, const double val); + virtual ~param_double_t(); double operator()() const { return m_param; } void setTo(const double ¶m) { set(m_param, param); } private: @@ -931,6 +939,7 @@ namespace netlist { public: param_str_t(device_t &device, const pstring name, const pstring val); + virtual ~param_str_t(); const pstring operator()() const { return Value(); } void setTo(const pstring ¶m) { diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 39d85e5be1d..f11d2a67b3c 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -864,16 +864,20 @@ class logic_family_std_proxy_t : public logic_family_desc_t public: logic_family_std_proxy_t() { } virtual plib::owned_ptr create_d_a_proxy(netlist_t &anetlist, - const pstring &name, logic_output_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } - virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override - { - return plib::owned_ptr::Create(anetlist, name, proxied); - } + const pstring &name, logic_output_t *proxied) const override; + virtual plib::owned_ptr create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const override; }; +plib::owned_ptr logic_family_std_proxy_t::create_d_a_proxy(netlist_t &anetlist, + const pstring &name, logic_output_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} +plib::owned_ptr logic_family_std_proxy_t::create_a_d_proxy(netlist_t &anetlist, const pstring &name, logic_input_t *proxied) const +{ + return plib::owned_ptr::Create(anetlist, name, proxied); +} + const logic_family_desc_t *setup_t::family_from_model(const pstring &model) { model_map_t map;