From de6369b82f5ea34c6bcbc5a915089b6aa51519e9 Mon Sep 17 00:00:00 2001 From: TomW Date: Sun, 21 Jun 2015 14:51:58 +0100 Subject: [PATCH] Disc function pointers cleared when disc ejected. Read address on an ejected disc now times out. Write protect bit in ST3 now set correctly (Sense Drive Status command). Fixes discs on Windows 95. --- src/disc.c | 8 ++++++-- src/fdc.c | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/disc.c b/src/disc.c index df5461b..6484e28 100644 --- a/src/disc.c +++ b/src/disc.c @@ -104,6 +104,12 @@ void disc_close(int drive) if (loaders[driveloaders[drive]].close) loaders[driveloaders[drive]].close(drive); drive_empty[drive] = 1; discfns[drive][0] = 0; + drives[drive].poll = NULL; + drives[drive].seek = NULL; + drives[drive].readsector = NULL; + drives[drive].writesector = NULL; + drives[drive].readaddress = NULL; + drives[drive].format = NULL; } int disc_notfound=0; @@ -189,8 +195,6 @@ void disc_readaddress(int drive, int track, int side, int density) { if (drives[drive].readaddress) drives[drive].readaddress(drive, track, side, density); - else - disc_notfound = 1000; } void disc_format(int drive, int track, int side, int density) diff --git a/src/fdc.c b/src/fdc.c index e4719ca..04d82d3 100644 --- a/src/fdc.c +++ b/src/fdc.c @@ -517,6 +517,8 @@ void fdc_callback() fdc.res[10] = (fdc.params[0] & 7) | 0x28; if (!fdc.track[fdc.drive]) fdc.res[10] |= 0x10; + if (writeprot[fdc.drive]) + fdc.res[10] |= 0x40; fdc.stat = (fdc.stat & 0xf) | 0xd0; paramstogo = 1;