Fixed PS/1, PS/2 and PS/55 FDD issues.

This commit is contained in:
Toni Riikonen
2025-09-17 22:50:22 +03:00
parent 8032541ab9
commit bf158096d8
2 changed files with 10 additions and 5 deletions

View File

@@ -685,12 +685,12 @@ fdc_seek_complete_interrupt(fdc_t *fdc, int drive)
fdc_log("FDD %c: Seek complete interrupt\n", 0x41 + drive);
fdc->fintr = 1;
fdc->interrupt = -3;
fdc->st0 = 0x20 | (drive & 3);
if (fdd_get_head(drive))
fdc->st0 |= 0x04;
fdc_int(fdc, 1);
fdc->stat = (fdc->stat & 0xf) | 0x80;
fdc_callback(fdc);
}
void

View File

@@ -311,15 +311,20 @@ 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;
}
// Count actual seek time (6ms per track + 50ms base)
// 80 tracks -> 50 + 6 * 80 = 530ms
double seek_ratio = 80.0 / (double)drive_types[fdd[drive].type].max_track;
uint64_t seek_time_us = (50000 + (abs(actual_track_diff) * 6000 * seek_ratio)) * TIMER_USEC;
if (!fdd_seek_timer[drive].callback) {
timer_add(&(fdd_seek_timer[drive]), fdd_seek_complete_callback, &drives[drive], 0);
}
timer_set_delay_u64(&fdd_seek_timer[drive], seek_time_us);
}
timer_set_delay_u64(&fdd_seek_timer[drive], seek_time_us);
}
int