From d9d20e4b718983a4ee671703a7a20eca6d95b7a3 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sat, 22 Sep 2018 20:29:24 +0300 Subject: [PATCH] Experimental untested MSBSYNC support. --- disk.cpp | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/disk.cpp b/disk.cpp index 4dc7cb32..b6ccd49a 100644 --- a/disk.cpp +++ b/disk.cpp @@ -3531,6 +3531,10 @@ static int doreaddma (void) } else { DSKDAT (word); dsklength--; +#if 0 + if (dsklength < 1 && (adkcon & 0x200)) + activate_debugger(); +#endif } } return 1; @@ -3574,7 +3578,7 @@ static void wordsync_detected(bool startup) dma_enable = 1; INTREQ(0x8000 | 0x1000); } - if (adkcon & 0x0400) { + if (adkcon & 0x0400) { // WORDSYNC bitoffset = 15; } } @@ -3600,8 +3604,11 @@ static void disk_doupdate_read (drive * drv, int floppybits) mfmbuf[7] = 0x4444; */ while (floppybits >= drv->trackspeed) { + bool skipbit = false; + if (drv->tracktiming[0]) updatetrackspeed (drv, drv->mfmpos); + word <<= 1; if (!drive_empty (drv)) { @@ -3610,6 +3617,7 @@ static void disk_doupdate_read (drive * drv, int floppybits) else word |= getonebit (drv->bigmfmbuf, drv->mfmpos); } + //write_log (_T("%08X bo=%d so=%d mfmpos=%d dma=%d\n"), (word & 0xffffff), bitoffset, syncoffset, drv->mfmpos, dma_enable); if (doreaddma () < 0) { word >>= 1; @@ -3646,16 +3654,35 @@ static void disk_doupdate_read (drive * drv, int floppybits) } } } - if ((bitoffset & 7) == 7) { + + // MSBSYNC + if (adkcon & 0x200) { + if ((word & 0x0001) == 0 && bitoffset == 0) { + word = 0; + skipbit = true; + } + if ((word & 0x0001) == 0 && bitoffset == 8) { + word >>= 1; + skipbit = true; + } + } + + if (!skipbit && (bitoffset & 7) == 7) { dskbytr_val = word & 0xff; dskbytr_val |= 0x8000; } - if (word == dsksync) + + // WORDSYNC + if (!(adkcon & 0x200) && word == dsksync) { wordsync_detected(false); - bitoffset++; - bitoffset &= 15; - floppybits -= drv->trackspeed; + } + if (!skipbit) { + bitoffset++; + bitoffset &= 15; + } + + floppybits -= drv->trackspeed; } } -- 2.47.3