summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/netlist.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine/netlist.h')
-rw-r--r--src/emu/machine/netlist.h23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/emu/machine/netlist.h b/src/emu/machine/netlist.h
index 214b95c4b92..ae3bbab7cbf 100644
--- a/src/emu/machine/netlist.h
+++ b/src/emu/machine/netlist.h
@@ -268,14 +268,14 @@ protected:
// device_state_interface overrides
- virtual void state_string_export(const device_state_entry &entry, astring &str)
+ virtual void state_string_export(const device_state_entry &entry, std::string &str)
{
if (entry.index() >= 0)
{
if (entry.index() & 1)
- str.format("%10.6f", *((double *)entry.dataptr()));
+ strprintf(str,"%10.6f", *((double *)entry.dataptr()));
else
- str.format("%d", *((netlist_sig_t *)entry.dataptr()));
+ strprintf(str, "%d", *((netlist_sig_t *)entry.dataptr()));
}
}
@@ -561,10 +561,12 @@ public:
{
register_input("IN", m_in);
m_cpu_device = downcast<netlist_mame_cpu_device_t *>(&downcast<netlist_mame_t &>(netlist()).parent());
+ save(NLNAME(m_last));
}
ATTR_COLD void reset()
{
+ m_last = 0.0;
}
ATTR_COLD void register_callback(netlist_analog_output_delegate callback)
@@ -574,15 +576,24 @@ public:
ATTR_HOT void update()
{
- m_cpu_device->update_time_x();
- m_callback(INPANALOG(m_in), m_cpu_device->local_time());
- m_cpu_device->check_mame_abort_slice();
+ nl_double cur = INPANALOG(m_in);
+
+ // FIXME: make this a parameter
+ // avoid calls due to noise
+ if (fabs(cur - m_last) > 1e-6)
+ {
+ m_cpu_device->update_time_x();
+ m_callback(cur, m_cpu_device->local_time());
+ m_cpu_device->check_mame_abort_slice();
+ m_last = cur;
+ }
}
private:
netlist_analog_input_t m_in;
netlist_analog_output_delegate m_callback;
netlist_mame_cpu_device_t *m_cpu_device;
+ netlist_state_t<nl_double> m_last;
};
// ----------------------------------------------------------------------------------------