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.cpp41
1 files changed, 20 insertions, 21 deletions
diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp
index 6d2225fe9fc..a6a8325d818 100644
--- a/src/devices/machine/netlist.cpp
+++ b/src/devices/machine/netlist.cpp
@@ -422,7 +422,7 @@ public:
, m_in(*this, "IN")
, m_cur(0.0)
, m_last_pos(0)
- , m_last_buffer_time(*this, "m_last_buffer", netlist::netlist_time::zero())
+ , m_last_buffer_time(*this, "m_last_buffer", netlist::netlist_time_ext::zero())
{
}
@@ -432,12 +432,12 @@ public:
{
m_cur = 0.0;
m_last_pos = 0;
- m_last_buffer_time = netlist::netlist_time::zero();
+ m_last_buffer_time = netlist::netlist_time_ext::zero();
}
- ATTR_HOT void sound_update(const netlist::netlist_time &upto)
+ ATTR_HOT void sound_update(const netlist::netlist_time_ext &upto)
{
- int pos = (upto - m_last_buffer_time) / m_sample_time;
+ int pos = (upto - m_last_buffer_time()) / m_sample_time;
if (pos > m_bufsize)
throw emu_fatalerror("sound %s: pos %d exceeded bufsize %d\n", name().c_str(), pos, m_bufsize);
while (m_last_pos < pos )
@@ -471,7 +471,7 @@ public:
}
public:
- ATTR_HOT void buffer_reset(const netlist::netlist_time &upto)
+ ATTR_HOT void buffer_reset(const netlist::netlist_time_ext &upto)
{
m_last_pos = 0;
m_last_buffer_time = upto;
@@ -489,7 +489,7 @@ private:
netlist::analog_input_t m_in;
double m_cur;
int m_last_pos;
- netlist::state_var<netlist::netlist_time> m_last_buffer_time;
+ netlist::state_var<netlist::netlist_time_ext> m_last_buffer_time;
};
// ----------------------------------------------------------------------------------------
@@ -1022,7 +1022,7 @@ netlist_mame_device::netlist_mame_device(const machine_config &mconfig, const ch
netlist_mame_device::netlist_mame_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
, m_icount(0)
- , m_old(netlist::netlist_time::zero())
+ , m_old(netlist::netlist_time_ext::zero())
, m_setup_func(nullptr)
{
}
@@ -1155,7 +1155,7 @@ void netlist_mame_device::device_start()
save_state();
- m_old = netlist::netlist_time::zero();
+ m_old = netlist::netlist_time_ext::zero();
m_rem = netlist::netlist_time::zero();
LOGDEVCALLS("device_start exit\n");
@@ -1171,7 +1171,7 @@ void netlist_mame_device::device_clock_changed()
void netlist_mame_device::device_reset()
{
LOGDEVCALLS("device_reset\n");
- m_old = netlist::netlist_time::zero();
+ m_old = netlist::netlist_time_ext::zero();
m_rem = netlist::netlist_time::zero();
netlist().exec().reset();
}
@@ -1197,13 +1197,12 @@ ATTR_COLD void netlist_mame_device::device_pre_save()
netlist().run_state_manager().pre_save();
}
-void netlist_mame_device::update_icount(netlist::netlist_time time) noexcept
+void netlist_mame_device::update_icount(netlist::netlist_time_ext time) noexcept
{
- const netlist::netlist_time newt(time);
- const netlist::netlist_time delta(newt - m_old + m_rem);
- const uint64_t d = delta / m_div;
- m_old = newt;
- m_rem = delta - (m_div * d);
+ const netlist::netlist_time_ext delta(time - m_old + m_rem);
+ const auto d(delta / m_div);
+ m_old = time;
+ m_rem = static_cast<netlist::netlist_time>(delta - (m_div * d));
m_icount -= d;
}
@@ -1321,13 +1320,13 @@ ATTR_HOT void netlist_mame_cpu_device::execute_run()
m_genPC++;
m_genPC &= 255;
debugger_instruction_hook(m_genPC);
- netlist().exec().process_queue(m_div);
+ netlist().exec().process_queue(static_cast<netlist::netlist_time_ext>(nl_clock_period()));
update_icount(netlist().exec().time());
}
}
else
{
- netlist().exec().process_queue(m_div * m_icount);
+ netlist().exec().process_queue(static_cast<netlist::netlist_time_ext>(nl_clock_period()) * m_icount);
update_icount(netlist().exec().time());
}
}
@@ -1475,11 +1474,11 @@ void netlist_mame_sound_device::sound_stream_update(sound_stream &stream, stream
}
}
- netlist::netlist_time cur(netlist().exec().time());
+ auto cur(netlist().exec().time());
+ const auto delta(static_cast<netlist::netlist_time_ext>(nl_clock_period()) * samples);
+ netlist().exec().process_queue(delta);
- netlist().exec().process_queue(m_div * samples);
-
- cur += (m_div * samples);
+ cur += delta;
for (auto &e : m_out)
{