From 945e0c19828d652e511b892c3d32473882526749 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 3 Oct 2015 20:04:26 +0300 Subject: [PATCH] Support DSKLEN writes while DMA is active. --- disk.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/disk.cpp b/disk.cpp index 7446e106..7a9ed264 100644 --- a/disk.cpp +++ b/disk.cpp @@ -3785,7 +3785,12 @@ void DSKLEN (uae_u16 v, int hpos) dsklen = v; dsklength2 = dsklength = dsklen & 0x3fff; - if ((dsklen & 0x8000) && (prev & 0x8000)) { + if ((v & 0x8000) && (prev & 0x8000)) { + if (dskdmaen == DSKDMA_READ) { + // update only currently active DMA length, don't change DMA state + write_log(_T("warning: Disk read DMA length rewrite %d -> %d\n"), prev & 0x3fff, v & 0x3fff); + return; + } dskdmaen = DSKDMA_READ; DISK_start (); } @@ -3823,6 +3828,10 @@ void DSKLEN (uae_u16 v, int hpos) disk_dmafinished (); return; } + if (dskdmaen == DSKDMA_WRITE) { + write_log(_T("warning: Disk write DMA length rewrite %d -> %d\n"), prev & 0x3fff, v & 0x3fff); + return; + } dskdmaen = DSKDMA_WRITE; DISK_start (); } @@ -4019,7 +4028,7 @@ void DSKSYNC (int hpos, uae_u16 v) STATIC_INLINE bool iswrite (void) { - return dskdmaen == 3; + return dskdmaen == DSKDMA_WRITE; } void DSKDAT (uae_u16 v) -- 2.47.3