diff --git a/Machines/Amiga/Chipset.cpp b/Machines/Amiga/Chipset.cpp index ced99b647..190e7508d 100644 --- a/Machines/Amiga/Chipset.cpp +++ b/Machines/Amiga/Chipset.cpp @@ -922,14 +922,18 @@ void Chipset::DiskDMA::enqueue(uint16_t value, bool matches_sync) { } void Chipset::DiskDMA::set_length(uint16_t value) { - dma_enable_ = value & 0x8000; - write_ = value & 0x4000; - length_ = value & 0x3fff; - buffer_read_ = buffer_write_ = 0; + if(value == last_set_length_) { + dma_enable_ = value & 0x8000; + write_ = value & 0x4000; + length_ = value & 0x3fff; + buffer_read_ = buffer_write_ = 0; - if(dma_enable_) { - LOG("Disk DMA [" << (write_ ? "write" : "read") << " of " << length_ << " to " << PADHEX(8) << pointer_[0]); + if(dma_enable_) { + LOG("Disk DMA " << (write_ ? "write" : "read") << " of " << length_ << " to " << PADHEX(8) << pointer_[0]); + } } + + last_set_length_ = value; } bool Chipset::DiskDMA::advance() { diff --git a/Machines/Amiga/Chipset.hpp b/Machines/Amiga/Chipset.hpp index 2ee3e06bc..874dd749b 100644 --- a/Machines/Amiga/Chipset.hpp +++ b/Machines/Amiga/Chipset.hpp @@ -282,6 +282,7 @@ class Chipset: private ClockingHint::Observer { uint16_t length_; bool dma_enable_ = false; bool write_ = false; + uint16_t last_set_length_ = 0; std::array buffer_; size_t buffer_read_ = 0, buffer_write_ = 0;