Separate audio sample support for each seek 0-79, 79->0.

This commit is contained in:
Toni Riikonen
2025-10-28 21:38:57 +02:00
parent 35d9440361
commit 56ffe0cab8
3 changed files with 364 additions and 454 deletions

View File

@@ -390,10 +390,7 @@ fdd_seek(int drive, int track_diff)
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) {
if (actual_track_diff > 0) {
/* Multi-track seek */
fdd_audio_play_multi_track_seek(drive, old_track, fdd[drive].track);
}
@@ -413,12 +410,11 @@ fdd_seek(int drive, int track_diff)
int is_seek_down = (fdd[drive].track < old_track);
/* Get seek timings from audio profile configuration with direction awareness */
double initial_seek_time = fdd_audio_get_seek_time(drive, 1, actual_track_diff, is_seek_down);
double track_seek_time = fdd_audio_get_seek_time(drive, 0, actual_track_diff, is_seek_down);
fdd_log("Seek timing for drive %d: initial %.2f µs, per track %.2f µs (%s)\n",
drive, initial_seek_time, track_seek_time, is_seek_down ? "DOWN" : "UP");
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);
double seek_time_us = fdd_audio_get_seek_time(drive, 1, actual_track_diff, is_seek_down);
fdd_log("Seek timing for drive %d: %.2f µs (%s)\n",
drive, seek_time_us, is_seek_down ? "DOWN" : "UP");
uint64_t seek_delay_us = seek_time_us * TIMER_USEC;
timer_set_delay_u64(&fdd_seek_timer[drive], seek_delay_us);
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -23,6 +23,9 @@ extern "C" {
#ifndef DISABLE_FDD_AUDIO
/* Maximum number of seek samples (for 80-track drives: 1-79 tracks) */
#define MAX_SEEK_SAMPLES 79
/* Audio sample configuration structure */
typedef struct {
char filename[512];
@@ -37,18 +40,9 @@ typedef struct {
audio_sample_config_t spindlemotor_start;
audio_sample_config_t spindlemotor_loop;
audio_sample_config_t spindlemotor_stop;
audio_sample_config_t single_track_step;
audio_sample_config_t multi_track_seek;
audio_sample_config_t single_track_step_down;
audio_sample_config_t multi_track_seek_down;
int total_tracks;
int samples_per_track;
double initial_seek_time;
double initial_seek_time_pcjr;
double track_seek_time;
double track_seek_time_pcjr;
double initial_seek_down_time;
double track_seek_down_time;
audio_sample_config_t seek_up[MAX_SEEK_SAMPLES];
audio_sample_config_t seek_down[MAX_SEEK_SAMPLES];
int total_tracks; /* 40 or 80 */
} fdd_audio_profile_config_t;
#define FDD_AUDIO_PROFILE_MAX 64
@@ -89,7 +83,7 @@ extern const fdd_audio_profile_config_t* fdd_audio_get_profile(int id);
extern const char* fdd_audio_get_profile_name(int id);
extern const char* fdd_audio_get_profile_internal_name(int id);
extern int fdd_audio_get_profile_by_internal_name(const char* internal_name);
extern double fdd_audio_get_seek_time(int drive, int is_initial, int track_count, int _is_seek_down);
extern double fdd_audio_get_seek_time(int drive, int is_initial, int track_count, int is_seek_down);
#else