From f4f390a53804f7c0e61d50cc458d321ba92555f0 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 11 Nov 2018 18:01:25 +0100 Subject: attotime::from_ticks: on 0hz return attotime::never instead of crashing (nw) --- src/emu/attotime.h | 17 +++++++++++------ src/mame/drivers/vis.cpp | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/emu/attotime.h b/src/emu/attotime.h index 438ba963f44..c3efeca4ad5 100644 --- a/src/emu/attotime.h +++ b/src/emu/attotime.h @@ -344,14 +344,19 @@ inline u64 attotime::as_ticks(u32 frequency) const /** Create an attotime from a tick count @ticks at the given frequency @frequency */ inline attotime attotime::from_ticks(u64 ticks, u32 frequency) { - attoseconds_t attos_per_tick = HZ_TO_ATTOSECONDS(frequency); + if (frequency > 0) + { + attoseconds_t attos_per_tick = HZ_TO_ATTOSECONDS(frequency); - if (ticks < frequency) - return attotime(0, ticks * attos_per_tick); + if (ticks < frequency) + return attotime(0, ticks * attos_per_tick); - u32 remainder; - s32 secs = divu_64x32_rem(ticks, frequency, &remainder); - return attotime(secs, u64(remainder) * attos_per_tick); + u32 remainder; + s32 secs = divu_64x32_rem(ticks, frequency, &remainder); + return attotime(secs, u64(remainder) * attos_per_tick); + } + else + return attotime::never; } /** Create an attotime from floating point count of seconds @p _time */ diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index 0b1822f8303..e34e3824e69 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -224,7 +224,7 @@ WRITE8_MEMBER(vis_audio_device::pcm_w) m_samples = 0; m_sample_byte = 0; m_isa->drq7_w(ASSERT_LINE); - attotime rate = attotime::from_ticks((double)(1 << ((m_mode >> 5) & 3)), 44100.0); // TODO : Unknown clock + attotime rate = attotime::from_ticks(1 << ((m_mode >> 5) & 3), 44100); // TODO : Unknown clock m_pcm->adjust(rate, 0, rate); } else if(!(m_mode & 0x10)) -- cgit v1.2.3