From 19397471c1141d0d8b42ea10b28003afcb01d581 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sun, 10 Apr 2016 17:16:06 +0200 Subject: [PATCH] netlist_t no longer descends from netlist::object_t. --- src/devices/machine/netlist.cpp | 8 ++--- src/lib/netlist/devices/nld_system.h | 6 ++-- src/lib/netlist/nl_base.cpp | 44 +++++++++++++++++---------- src/lib/netlist/nl_base.h | 25 +++++++-------- src/lib/netlist/nl_setup.cpp | 5 --- src/lib/netlist/solver/nld_solver.cpp | 3 ++ 6 files changed, 51 insertions(+), 40 deletions(-) diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index 30f61b47596..bae8137edff 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -324,9 +324,9 @@ void netlist_mame_device_t::device_start() m_setup->start_devices(); m_setup->resolve_inputs(); - netlist().save(NAME(m_rem)); - netlist().save(NAME(m_div)); - netlist().save(NAME(m_old)); + netlist().save_item(m_rem, this, "m_rem"); + netlist().save_item(m_div, this, "m_div"); + netlist().save_item(m_old, this, "m_old"); save_state(); @@ -347,7 +347,7 @@ void netlist_mame_device_t::device_reset() LOG_DEV_CALLS(("device_reset\n")); m_old = netlist::netlist_time::zero; m_rem = netlist::netlist_time::zero; - netlist().do_reset(); + netlist().reset(); } void netlist_mame_device_t::device_stop() diff --git a/src/lib/netlist/devices/nld_system.h b/src/lib/netlist/devices/nld_system.h index 8ea3640ec14..7b9cb7298e5 100644 --- a/src/lib/netlist/devices/nld_system.h +++ b/src/lib/netlist/devices/nld_system.h @@ -479,10 +479,10 @@ public: const pstring &def_param) : base_factory_t(name, classname, def_param), m_setup(setup) { } - class dummy : public device_t + class wrapper : public device_t { public: - dummy(const pstring &dev_name) : device_t(), m_dev_name(dev_name) { } + wrapper(const pstring &dev_name) : device_t(), m_dev_name(dev_name) { } protected: virtual void init(netlist_t &anetlist, const pstring &aname) override { @@ -499,7 +499,7 @@ public: ATTR_COLD device_t *Create() override { - device_t *r = palloc(dummy(this->name())); + device_t *r = palloc(wrapper(this->name())); return r; } diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 56a0bc1e7f7..eb83749c79b 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -127,17 +127,14 @@ void queue_t::on_post_load() ATTR_COLD object_t::object_t(const type_t atype, const family_t afamily) : m_objtype(atype) , m_family(afamily) -, m_netlist(NULL) +, m_netlist(nullptr) {} -ATTR_COLD object_t::object_t(const pstring &aname, const type_t atype, const family_t afamily) -: m_name(aname) -, m_objtype(atype) +ATTR_COLD object_t::object_t(netlist_t &nl, const type_t atype, const family_t afamily) +: m_objtype(atype) , m_family(afamily) -{ - // FIXME: - m_netlist = reinterpret_cast(this); -} +, m_netlist(&nl) +{} ATTR_COLD object_t::object_t(netlist_t &nl, const pstring &aname, const type_t atype, const family_t afamily) : m_name(aname) @@ -151,6 +148,12 @@ ATTR_COLD object_t::~object_t() { } +ATTR_COLD void object_t::init_object(const pstring &aname) +{ + m_name = aname; + save_register(); +} + ATTR_COLD void object_t::init_object(netlist_t &nl, const pstring &aname) { m_netlist = &nl; @@ -188,7 +191,7 @@ ATTR_COLD void device_object_t::init_object(core_device_t &dev, // ---------------------------------------------------------------------------------------- netlist_t::netlist_t(const pstring &aname) - : object_t(aname, NETLIST, GENERIC), pstate_manager_t(), + : pstate_manager_t(), m_stop(netlist_time::zero), m_time(netlist_time::zero), m_use_deactivate(0), @@ -197,9 +200,12 @@ netlist_t::netlist_t(const pstring &aname) m_solver(NULL), m_gnd(NULL), m_params(NULL), + m_name(aname), m_setup(NULL), m_log(this) { + save_item(static_cast(m_queue), this, "m_queue"); + save_item(m_time, this, "m_time"); } netlist_t::~netlist_t() @@ -218,13 +224,6 @@ netlist_t::~netlist_t() pstring::resetmem(); } -ATTR_COLD void netlist_t::save_register() -{ - save(static_cast(m_queue), "m_queue"); - save(NLNAME(m_time)); - object_t::save_register(); -} - ATTR_HOT nl_double netlist_t::gmin() const { return solver()->gmin(); @@ -941,6 +940,19 @@ ATTR_COLD analog_output_t::analog_output_t() net().m_cur_Analog = NL_FCONST(0.99); } +ATTR_COLD analog_output_t::analog_output_t(core_device_t &dev, const pstring &aname) + : analog_t(OUTPUT), m_proxied_net(NULL) +{ + this->set_net(m_my_net); + set_state(STATE_OUT); + + net().m_cur_Analog = NL_FCONST(0.99); + + analog_t::init_object(dev, aname); + net().init_object(dev.netlist(), aname + ".net"); + net().register_railterminal(*this); +} + ATTR_COLD void analog_output_t::init_object(core_device_t &dev, const pstring &aname) { analog_t::init_object(dev, aname); diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 1c253b8aa37..3b6eb7b75e1 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -378,8 +378,7 @@ namespace netlist PARAM = 3, NET = 4, DEVICE = 5, - NETLIST = 6, - QUEUE = 7 + QUEUE = 6 }; enum family_t { // Terminal families @@ -405,11 +404,12 @@ namespace netlist }; ATTR_COLD object_t(const type_t atype, const family_t afamily); - ATTR_COLD object_t(const pstring &aname, const type_t atype, const family_t afamily); + ATTR_COLD object_t(netlist_t &nl, const type_t atype, const family_t afamily); ATTR_COLD object_t(netlist_t &nl, const pstring &aname, const type_t atype, const family_t afamily); virtual ~object_t(); + ATTR_COLD void init_object(const pstring &aname); ATTR_COLD void init_object(netlist_t &nl, const pstring &aname); ATTR_COLD bool isInitialized() { return (m_netlist != NULL); } @@ -906,6 +906,7 @@ namespace netlist P_PREVENT_COPYING(analog_output_t) public: + ATTR_COLD analog_output_t(core_device_t &dev, const pstring &aname); ATTR_COLD analog_output_t(); ATTR_COLD void init_object(core_device_t &dev, const pstring &aname); @@ -1185,7 +1186,7 @@ namespace netlist // ----------------------------------------------------------------------------- - class netlist_t : public object_t, public pstate_manager_t, public plog_dispatch_intf + class netlist_t : public pstate_manager_t, public plog_dispatch_intf { P_PREVENT_COPYING(netlist_t) public: @@ -1193,6 +1194,8 @@ namespace netlist netlist_t(const pstring &aname); virtual ~netlist_t(); + pstring name() const { return m_name; } + ATTR_COLD void start(); ATTR_COLD void stop(); @@ -1267,15 +1270,13 @@ namespace netlist pnamedlist_t m_started_devices; #endif - ATTR_COLD plog_base &log() { return m_log; } - ATTR_COLD const plog_base &log() const { return m_log; } + ATTR_COLD plog_base &log() { return m_log; } + ATTR_COLD const plog_base &log() const { return m_log; } + + virtual void reset(); protected: - /* from object */ - virtual void reset() override; - virtual void save_register() override; - #if (NL_KEEP_STATISTICS) // performance int m_perf_out_processed; @@ -1290,13 +1291,13 @@ namespace netlist bool m_use_deactivate; queue_t m_queue; - devices::NETLIB_NAME(mainclock) * m_mainclock; devices::NETLIB_NAME(solver) * m_solver; devices::NETLIB_NAME(gnd) * m_gnd; - devices::NETLIB_NAME(netlistparams) *m_params; + + pstring m_name; setup_t *m_setup; plog_base m_log; }; diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 399fe86d213..dad17991b87 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -197,8 +197,6 @@ pstring setup_t::objtype_as_astr(object_t &in) const return "PARAM"; case terminal_t::DEVICE: return "DEVICE"; - case terminal_t::NETLIST: - return "NETLIST"; case terminal_t::QUEUE: return "QUEUE"; } @@ -283,9 +281,6 @@ void setup_t::register_object(device_t &dev, const pstring &name, object_t &obj) case terminal_t::DEVICE: log().fatal("Device registration not yet supported - {1}\n", name); break; - case terminal_t::NETLIST: - log().fatal("Netlist registration not yet supported - {1}\n", name); - break; case terminal_t::QUEUE: log().fatal("QUEUE registration not yet supported - {1}\n", name); break; diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp index bcd7feb7c69..5dd0af53313 100644 --- a/src/lib/netlist/solver/nld_solver.cpp +++ b/src/lib/netlist/solver/nld_solver.cpp @@ -178,6 +178,9 @@ ATTR_COLD void matrix_solver_t::setup_base(analog_net_t::list_t &nets) if (net_proxy_output == NULL) { + //net_proxy_output = palloc(analog_output_t(*this, + // this->name() + "." + pfmt("m{1}")(m_inps.size()))); + net_proxy_output = palloc(analog_output_t); net_proxy_output->init_object(*this, this->name() + "." + pfmt("m{1}")(m_inps.size())); m_inps.push_back(net_proxy_output);