From: Toni Wilen Date: Fri, 22 Aug 2025 16:13:44 +0000 (+0300) Subject: WORDSYNC interrupt is inhibited if DSKLEN write bit is set. X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=bc78b11e7500969911767b48df6d494bf491e30b;p=francis%2Fwinuae.git WORDSYNC interrupt is inhibited if DSKLEN write bit is set. --- diff --git a/disk.cpp b/disk.cpp index 2608d577..a8afdd31 100644 --- a/disk.cpp +++ b/disk.cpp @@ -4287,10 +4287,15 @@ static int doreaddma(void) static void wordsync_detected(bool startup) { + // wordsync interrupt is edge triggered if (!dsksync_on) { - INTREQ_INT(12, 0); + // wordsync interrupt is inhibited if DSKLEN write bit is set + if (!(dsklen & 0x4000)) { + INTREQ_INT(12, 0); + } dsksync_on = true; } + // wordsync enables disk read if DMA is already active if (dskdmaen != DSKDMA_OFF) { int prev_dma_enabled = dma_enable; if (!startup) { @@ -4316,6 +4321,7 @@ static void wordsync_detected(bool startup) dumpdisk(_T("SYNC")); } } + // wordsync match resets read shifter if (adkcon & 0x0400) { // WORDSYNC bitoffset = 15; } @@ -4849,9 +4855,6 @@ static void DSKLEN_2(uae_u16 v, int hpos) dsklen2 = dsklen = v; dsklength2 = dsklength = dsklen & 0x3fff; - if ((v & 0x8000) && !(prevlen & 0x8000)) { - //bitoffset = 15; - } if ((v & 0x8000) && (prevlen & 0x8000)) { if (dskdmaen == DSKDMA_READ && !(v & 0x4000)) { // update only currently active DMA length, don't change DMA state @@ -5140,16 +5143,8 @@ void DSKLEN(uae_u16 v, int hpos) DISK_update_predict(); } -void DISK_update_adkcon (int hpos, uae_u16 v) +void DISK_update_adkcon(int hpos, uae_u16 v) { - uae_u16 vold = adkcon; - uae_u16 vnew = adkcon; - if (v & 0x8000) - vnew |= v & 0x7FFF; - else - vnew &= ~v; - if ((vnew & 0x400) && !(vold & 0x400)) - bitoffset = 0; } void DSKSYNC(int hpos, uae_u16 v)