diff options
author | Maxwell Beck <max@rastertail.net> | 2024-12-30 17:44:29 -0600 |
---|---|---|
committer | Maxwell Beck <max@rastertail.net> | 2024-12-30 17:44:29 -0600 |
commit | d48c0668da0f319b57b1fb47f93843a851d49339 (patch) | |
tree | 88c8df53e4bee3667b28f4b2a0d6ca993ee7039e /src/drive.c | |
parent | 2a3984933e9b39cd37a136dd2a95645bff0d3774 (diff) |
Diffstat (limited to 'src/drive.c')
-rw-r--r-- | src/drive.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/drive.c b/src/drive.c index 64b765a..5bc2e3b 100644 --- a/src/drive.c +++ b/src/drive.c @@ -47,7 +47,7 @@ void drive_init(drive_t *drive) { drive->current_idx = 0; drive->lookahead_idx = 0; - drive_cycle(drive, 0, false); + drive_cycle(drive); } void drive_step_up(drive_t *drive) { @@ -68,16 +68,19 @@ void drive_step_down(drive_t *drive) { } } -bool drive_cycle(drive_t *drive, uint8_t cycles, bool advance) { +bool drive_advance(drive_t *drive, uint8_t cycles) { bool byte_ready = false; - if (advance) { - for (uint8_t i = 0; i < cycles; i++) { - uint8_t j = (i + drive->current_idx) & (DRIVE_LOOKAHEAD - 1); - byte_ready |= drive->byte_ready[j]; - } - drive->current_idx = (drive->current_idx + cycles) & (DRIVE_LOOKAHEAD - 1); + + for (uint8_t i = 0; i < cycles; i++) { + uint8_t j = (i + drive->current_idx) & (DRIVE_LOOKAHEAD - 1); + byte_ready |= drive->byte_ready[j]; } + drive->current_idx = (drive->current_idx + cycles) & (DRIVE_LOOKAHEAD - 1); + return byte_ready; +} + +void drive_cycle(drive_t *drive) { while (drive->lookahead_idx != ((drive->current_idx - 1) & (DRIVE_LOOKAHEAD - 1))) { uint8_t j = (drive->lookahead_idx + 1) & (DRIVE_LOOKAHEAD - 1); uint8_t timer_next = drive->timer + BITRATE_PER_TRACK[drive->track]; @@ -194,6 +197,4 @@ bool drive_cycle(drive_t *drive, uint8_t cycles, bool advance) { drive->lookahead_idx = j; drive->timer = timer_next; } - - return byte_ready; } |