From d35da5a5c1617297834253029c01ac52f7bcfd24 Mon Sep 17 00:00:00 2001 From: Domppari Date: Sat, 27 Dec 2025 22:29:08 +0200 Subject: [PATCH] Fixes recalibration not working correclty with audio profiles, even when no audio was selected. --- src/floppy/fdc.c | 18 +++++++++++------- src/floppy/fdd.c | 9 ++------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index de0549ca4..fb1b0c31e 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -1142,7 +1142,7 @@ fdc_write(uint16_t addr, uint8_t val, void *priv) timer_set_delay_u64(&fdc->timer, 1000 * TIMER_USEC); else timer_set_delay_u64(&fdc->timer, 256 * TIMER_USEC); - break; + break; default: timer_set_delay_u64(&fdc->timer, 256 * TIMER_USEC); break; @@ -1882,13 +1882,17 @@ fdc_callback(void *priv) fdc->st0 = 0x20 | (fdc->params[0] & 3); if (!fdd_track0(drive_num)) fdc->st0 |= 0x50; - if (fdc->flags & FDC_FLAG_PCJR) { - fdc->fintr = 1; - fdc->interrupt = -4; - } else - fdc->interrupt = -3; - timer_set_delay_u64(&fdc->timer, 2048 * TIMER_USEC); fdc->stat = 0x10 | (1 << fdc->rw_drive); + if (fdd_get_turbo(drive_num)) { + if (fdc->flags & FDC_FLAG_PCJR) { + fdc->fintr = 1; + fdc->interrupt = -4; + } else { + fdc->interrupt = -3; + } + timer_set_delay_u64(&fdc->timer, 2048 * TIMER_USEC); + } + /* Interrupts and callbacks in the fdd callback function (fdc_seek_complete_interrupt) */ return; case 0x0d: /*Format track*/ if (fdc->format_state == 1) { diff --git a/src/floppy/fdd.c b/src/floppy/fdd.c index 14627a3f9..5cf21c77c 100644 --- a/src/floppy/fdd.c +++ b/src/floppy/fdd.c @@ -419,9 +419,9 @@ fdd_seek(int drive, int track_diff) fdd_changed[drive] = 0; - if (fdd[drive].turbo) + if (fdd[drive].turbo) { fdd_do_seek(drive, fdd[drive].track); - else { + } else { /* Trigger appropriate audio for track movements */ int actual_track_diff = abs(old_track - fdd[drive].track); if (actual_track_diff > 0) { @@ -429,11 +429,6 @@ fdd_seek(int drive, int track_diff) fdd_audio_play_multi_track_seek(drive, old_track, fdd[drive].track); } - if (old_track + track_diff < 0) { - fdd_do_seek(drive, fdd[drive].track); - return; - } - fdd_seek_in_progress[drive] = 1; if (!fdd_seek_timer[drive].callback) {