From 50a6496399407eef70c7b406df882bf0a0f65f32 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Mon, 15 Nov 2021 12:31:15 -0500 Subject: [PATCH] Avoids over-greedy DMA. --- Machines/Amiga/Audio.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Machines/Amiga/Audio.cpp b/Machines/Amiga/Audio.cpp index b19c737f8..302147356 100644 --- a/Machines/Amiga/Audio.cpp +++ b/Machines/Amiga/Audio.cpp @@ -20,14 +20,23 @@ using namespace Amiga; bool Audio::advance_dma(int channel) { switch(channels_[channel].state) { case Channel::State::WaitingForDMA: - set_data(channel, ram_[pointer_[size_t(channel)]]); - return true; + if(!channels_[channel].has_data) { + set_data(channel, ram_[pointer_[size_t(channel)]]); + return true; + } + break; + case Channel::State::WaitingForDummyDMA: - channels_[channel].has_data = true; - return true; - default: - return false; + if(!channels_[channel].has_data) { + channels_[channel].has_data = true; + return true; + } + break; + + default: break; } + + return false; } void Audio::set_length(int channel, uint16_t length) {