mirror of
https://github.com/86Box/86Box.git
synced 2026-02-24 02:18:20 -07:00
FDD: When a drive is set to turbo mode, keep it silent and bring back the fast seeks.
This commit is contained in:
@@ -1940,6 +1940,16 @@ fdc_callback(void *priv)
|
||||
case 0x0f: /*Seek*/
|
||||
fdc->st0 = 0x20 | (fdc->params[0] & 3);
|
||||
fdc->stat = 0x10 | (1 << fdc->rw_drive);
|
||||
if (fdd_get_turbo(1 << fdc->rw_drive)) {
|
||||
if (fdc->flags & FDC_FLAG_PCJR) {
|
||||
fdc->fintr = 1;
|
||||
fdc->interrupt = -4;
|
||||
timer_set_delay_u64(&fdc->timer, 1024 * TIMER_USEC);
|
||||
} else {
|
||||
fdc->interrupt = -3;
|
||||
fdc_callback(fdc);
|
||||
}
|
||||
}
|
||||
// Interrupts and callbacks in the fdd callback function
|
||||
return;
|
||||
case 0x10: /*Version*/
|
||||
|
||||
@@ -385,31 +385,35 @@ fdd_seek(int drive, int track_diff)
|
||||
|
||||
fdd_changed[drive] = 0;
|
||||
|
||||
/* Trigger appropriate audio for track movements */
|
||||
int actual_track_diff = abs(old_track - fdd[drive].track);
|
||||
if (actual_track_diff == 1) {
|
||||
/* Single track movement */
|
||||
fdd_audio_play_single_track_step(drive, old_track, fdd[drive].track);
|
||||
} else if (actual_track_diff > 1) {
|
||||
/* Multi-track seek */
|
||||
fdd_audio_play_multi_track_seek(drive, old_track, fdd[drive].track);
|
||||
}
|
||||
|
||||
if (old_track + track_diff < 0) {
|
||||
if (fdd[drive].turbo)
|
||||
fdd_do_seek(drive, fdd[drive].track);
|
||||
return;
|
||||
else {
|
||||
/* Trigger appropriate audio for track movements */
|
||||
int actual_track_diff = abs(old_track - fdd[drive].track);
|
||||
if (actual_track_diff == 1) {
|
||||
/* Single track movement */
|
||||
fdd_audio_play_single_track_step(drive, old_track, fdd[drive].track);
|
||||
} else if (actual_track_diff > 1) {
|
||||
/* Multi-track seek */
|
||||
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) {
|
||||
timer_add(&(fdd_seek_timer[drive]), fdd_seek_complete_callback, &drives[drive], 0);
|
||||
}
|
||||
|
||||
double initial_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 40000.0 : 15000.0;
|
||||
double track_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 10000.0 : 6000.0;
|
||||
uint64_t seek_time_us = (initial_seek_time + (abs(actual_track_diff) * track_seek_time)) * TIMER_USEC;
|
||||
timer_set_delay_u64(&fdd_seek_timer[drive], seek_time_us);
|
||||
}
|
||||
|
||||
fdd_seek_in_progress[drive] = 1;
|
||||
|
||||
if (!fdd_seek_timer[drive].callback) {
|
||||
timer_add(&(fdd_seek_timer[drive]), fdd_seek_complete_callback, &drives[drive], 0);
|
||||
}
|
||||
|
||||
double initial_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 40000.0 : 15000.0;
|
||||
double track_seek_time = FDC_FLAG_PCJR & fdd_fdc->flags ? 10000.0 : 6000.0;
|
||||
uint64_t seek_time_us = (initial_seek_time + (abs(actual_track_diff) * track_seek_time)) * TIMER_USEC;
|
||||
timer_set_delay_u64(&fdd_seek_timer[drive], seek_time_us);
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -386,7 +386,7 @@ fdd_audio_close(void)
|
||||
void
|
||||
fdd_audio_set_motor_enable(int drive, int motor_enable)
|
||||
{
|
||||
if (!fdd_sounds_enabled)
|
||||
if (!fdd_sounds_enabled || fdd_get_turbo(drive))
|
||||
return;
|
||||
|
||||
drive_audio_samples_t *samples = get_drive_samples(drive);
|
||||
@@ -420,7 +420,7 @@ fdd_audio_set_motor_enable(int drive, int motor_enable)
|
||||
void
|
||||
fdd_audio_play_single_track_step(int drive, int from_track, int to_track)
|
||||
{
|
||||
if (!fdd_sounds_enabled)
|
||||
if (!fdd_sounds_enabled || fdd_get_turbo(drive))
|
||||
return;
|
||||
|
||||
if (drive < 0 || drive >= FDD_NUM)
|
||||
@@ -435,7 +435,7 @@ fdd_audio_play_single_track_step(int drive, int from_track, int to_track)
|
||||
void
|
||||
fdd_audio_play_multi_track_seek(int drive, int from_track, int to_track)
|
||||
{
|
||||
if (!fdd_sounds_enabled)
|
||||
if (!fdd_sounds_enabled || fdd_get_turbo(drive))
|
||||
return;
|
||||
|
||||
if (drive < 0 || drive >= FDD_NUM)
|
||||
|
||||
Reference in New Issue
Block a user