diff options
Diffstat (limited to 'src/emu/machine/netlist.h')
-rw-r--r-- | src/emu/machine/netlist.h | 23 |
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; }; // ---------------------------------------------------------------------------------------- |