From 18a5b430ff4ef1e935e418a89b20b310e367b388 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Fri, 16 Oct 2020 21:40:47 -0700 Subject: Prevent wait truncation in VGM logging --- vgm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'vgm.c') diff --git a/vgm.c b/vgm.c index bc7c72c..0f828b3 100644 --- a/vgm.c +++ b/vgm.c @@ -71,11 +71,12 @@ static void add_wait(vgm_writer *writer, uint32_t cycle) } uint64_t last_sample = (uint64_t)writer->last_cycle * (uint64_t)44100; last_sample /= (uint64_t)writer->master_clock; - uint64_t sample = (uint64_t)cycle * (uint64_t)44100; + uint64_t sample = ((uint64_t)cycle + (uint64_t)writer->extra_delta) * (uint64_t)44100; sample /= (uint64_t)writer->master_clock; uint32_t delta = sample - last_sample; writer->last_cycle = cycle; + writer->extra_delta = 0; writer->header.num_samples += delta; wait_commands(writer, delta); } @@ -113,6 +114,7 @@ void vgm_ym2612_part2_write(vgm_writer *writer, uint32_t cycle, uint8_t reg, uin void vgm_adjust_cycles(vgm_writer *writer, uint32_t deduction) { if (deduction > writer->last_cycle) { + writer->extra_delta += deduction - writer->last_cycle; writer->last_cycle = 0; } else { writer->last_cycle -= deduction; -- cgit v1.2.3