summary refs log tree commit diff
path: root/src/drive.c
diff options
context:
space:
mode:
authorMaxwell Beck <max@rastertail.net>2025-05-29 15:40:22 -0500
committerMaxwell Beck <max@rastertail.net>2025-05-29 15:40:22 -0500
commit22997d87d03825a9d470f70218b387682ebbb46b (patch)
tree88e4cfa7229b85eb849245253073bd7f68f4d475 /src/drive.c
parent3ee6d4b5f90cea5f0959ed0724151551c8fb5029 (diff)
fix: Use VIA2 PB to determine track bitrates
Diffstat (limited to 'src/drive.c')
-rw-r--r--src/drive.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/src/drive.c b/src/drive.c
index 5bc2e3b..e31a964 100644
--- a/src/drive.c
+++ b/src/drive.c
@@ -9,12 +9,7 @@ const uint8_t SECTORS_PER_TRACK[40] = {
 	17, 17, 17, 17, 17, 17, 17, 17, 17, 17
 };
 
-const uint8_t BITRATE_PER_TRACK[40] = {
-	76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76,
-	68, 68, 68, 68, 68, 68, 68,
-	65, 65, 65, 65, 65, 65,
-	61 ,61, 61, 61, 61, 61, 61, 61, 61, 61
-};
+const uint8_t BITRATES[4] = { 61, 65, 68, 76 };
 
 const uint8_t GCR_CONV[16] = {
     0x0a, 0x0b, 0x12, 0x13,
@@ -30,6 +25,7 @@ void drive_init(drive_t *drive) {
 
 	drive->track = 17;
 	drive->halftrack = 0;
+	drive->bitrate = 0;
 	drive->image_ptr = 0x16500;
 	drive->sector = 0;
 	drive->byte = 0;
@@ -83,7 +79,7 @@ bool drive_advance(drive_t *drive, uint8_t cycles) {
 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];
+		uint8_t timer_next = drive->timer + BITRATES[drive->bitrate];
 
 		uint16_t prev = drive->unlatched[drive->lookahead_idx];
 		if (timer_next < drive->timer) {