From 1dca23d16cc8fa1bae03eb2ecd10cac6d5bd4ca4 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 3 Oct 2019 00:42:42 +0200 Subject: [PATCH] Changed the way floppy drive polling is done, fixes Write Master. --- src/floppy/fdd.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index 02d4ed837..f640ff6cb 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -594,7 +594,7 @@ fdd_set_motor_enable(int drive, int motor_enable) static void fdd_poll(void *priv) { - int drive; + int drive, i; DRIVE *drv = (DRIVE *) priv; drive = drv->id; @@ -602,15 +602,17 @@ fdd_poll(void *priv) if (drive >= FDD_NUM) fatal("Attempting to poll floppy drive %i that is not supposed to be there\n", drive); - timer_advance_u64(&fdd_poll_time[drive], fdd_byteperiod(drive)); + timer_advance_u64(&fdd_poll_time[drive], fdd_byteperiod(drive) << 5ULL); - if (drv->poll) - drv->poll(drive); + for (i = 0; i < 32; i++) { + if (drv->poll) + drv->poll(drive); - if (fdd_notfound) { - fdd_notfound--; - if (!fdd_notfound) - fdc_noidam(fdd_fdc); + if (fdd_notfound) { + fdd_notfound--; + if (!fdd_notfound) + fdc_noidam(fdd_fdc); + } } }