Merge pull request #6629 from Domppari/fdd_recalibration_issue_fixed

Fixes FDC/FDD recalibration not working correctly with audio profiles
This commit is contained in:
Miran Grča
2025-12-27 22:07:51 +01:00
committed by GitHub
2 changed files with 13 additions and 14 deletions

View File

@@ -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) {

View File

@@ -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) {