summary refs log tree commit diff
path: root/src/drive.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/drive.c')
-rw-r--r--src/drive.c21
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;
 }