mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 09:35:32 -07:00
Fixed PS/1, PS/2 and PS/55 FDD issues.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user