summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/netlist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/netlist.cpp')
-rw-r--r--src/devices/machine/netlist.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 2d0ba8244b4..08d1e59a889 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -184,7 +184,7 @@ public:
ATTR_COLD void register_callback(netlist_mame_analog_output_device::output_delegate &&callback)
{
- m_callback = std::move(callback);
+ m_callback.reset(new netlist_mame_analog_output_device::output_delegate(std::move(callback)));
}
NETLIB_UPDATEI()
@@ -196,7 +196,7 @@ public:
if (std::fabs(cur - m_last) > 1e-6)
{
m_cpu_device->update_icount(exec().time());
- m_callback(cur, m_cpu_device->local_time());
+ (*m_callback)(cur, m_cpu_device->local_time());
m_cpu_device->check_mame_abort_slice();
m_last = cur;
}
@@ -204,7 +204,7 @@ public:
private:
netlist::analog_input_t m_in;
- netlist_mame_analog_output_device::output_delegate m_callback;
+ std::unique_ptr<netlist_mame_analog_output_device::output_delegate> m_callback; // TODO: change to std::optional for C++17
netlist_mame_cpu_device *m_cpu_device;
netlist::state_var<nl_double> m_last;
};
@@ -234,7 +234,7 @@ public:
ATTR_COLD void register_callback(netlist_mame_logic_output_device::output_delegate &&callback)
{
- m_callback = std::move(callback);
+ m_callback.reset(new netlist_mame_logic_output_device::output_delegate(std::move(callback)));
}
NETLIB_UPDATEI()
@@ -246,7 +246,7 @@ public:
if (cur != m_last)
{
m_cpu_device->update_icount(exec().time());
- m_callback(cur, m_cpu_device->local_time());
+ (*m_callback)(cur, m_cpu_device->local_time());
m_cpu_device->check_mame_abort_slice();
m_last = cur;
}
@@ -254,7 +254,7 @@ public:
private:
netlist::logic_input_t m_in;
- netlist_mame_logic_output_device::output_delegate m_callback;
+ std::unique_ptr<netlist_mame_logic_output_device::output_delegate> m_callback; // TODO: change to std::optional for C++17
netlist_mame_cpu_device *m_cpu_device;
netlist::state_var<netlist::netlist_sig_t> m_last;
};
@@ -719,6 +719,7 @@ netlist_mame_analog_output_device::netlist_mame_analog_output_device(const machi
: device_t(mconfig, NETLIST_ANALOG_OUTPUT, tag, owner, clock)
, netlist_mame_sub_interface(*owner)
, m_in("")
+ , m_delegate(*this)
{
}
@@ -730,7 +731,7 @@ void netlist_mame_analog_output_device::custom_netlist_additions(netlist::netlis
/* ignore if no running machine -> called within device_validity_check context */
if (owner()->has_running_machine())
- m_delegate.bind_relative_to(owner()->machine().root_device());
+ m_delegate.resolve();
auto dev = netlist::pool().make_unique<NETLIB_NAME(analog_callback)>(nlstate, dfqn);
//static_cast<NETLIB_NAME(analog_callback) *>(dev.get())->register_callback(std::move(m_delegate));
@@ -753,15 +754,10 @@ netlist_mame_logic_output_device::netlist_mame_logic_output_device(const machine
: device_t(mconfig, NETLIST_LOGIC_OUTPUT, tag, owner, clock)
, netlist_mame_sub_interface(*owner)
, m_in("")
+ , m_delegate(*this)
{
}
-void netlist_mame_logic_output_device::set_params(const char *in_name, output_delegate &&adelegate)
-{
- m_in = in_name;
- m_delegate = std::move(adelegate);
-}
-
void netlist_mame_logic_output_device::custom_netlist_additions(netlist::netlist_state_t &nlstate)
{
pstring pin(m_in);
@@ -770,7 +766,7 @@ void netlist_mame_logic_output_device::custom_netlist_additions(netlist::netlist
/* ignore if no running machine -> called within device_validity_check context */
if (owner()->has_running_machine())
- m_delegate.bind_relative_to(owner()->machine().root_device());
+ m_delegate.resolve();
auto dev = netlist::pool().make_unique<NETLIB_NAME(logic_callback)>(nlstate, dfqn);
dev->register_callback(std::move(m_delegate));