]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
WORDSYNC interrupt is inhibited if DSKLEN write bit is set.
authorToni Wilen <twilen@winuae.net>
Fri, 22 Aug 2025 16:13:44 +0000 (19:13 +0300)
committerToni Wilen <twilen@winuae.net>
Fri, 22 Aug 2025 16:13:44 +0000 (19:13 +0300)
disk.cpp

index 2608d577ff18f8af9d01f2daeb3187a4d9b76ecf..a8afdd31a83c0ddd9c4bdc1fdb06b34d6d5a7494 100644 (file)
--- 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)