summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxwell Beck <max@rastertail.net>2026-10-17 15:24:05 -0500
committerMaxwell Beck <max@rastertail.net>2026-10-17 15:25:40 -0500
commitea220c0e4c54805b99aacd402479fb8d47b156a7 (patch)
tree587376bd7158699f0d4c01511efad3bf22256ca4
parentf2ac7b405786f6bc047dfda7b45c139d194ba032 (diff)
feat: Support 40 track d64s
-rw-r--r--src/drive.c6
-rw-r--r--src/drive.h2
-rw-r--r--src/pico1541.c8
3 files changed, 7 insertions, 9 deletions
diff --git a/src/drive.c b/src/drive.c
index 8c06e69..67b2d61 100644
--- a/src/drive.c
+++ b/src/drive.c
@@ -3,11 +3,11 @@
#include "drive.h"
-const uint8_t SECTORS_PER_TRACK[35] = {
+const uint8_t SECTORS_PER_TRACK[40] = {
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
19, 19, 19, 19, 19, 19, 19,
18, 18, 18, 18, 18, 18,
- 17, 17, 17, 17, 17
+ 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
};
const uint16_t BITRATES[4] = { 16221, 17175, 18129, 20038 };
@@ -49,7 +49,7 @@ void drive_init(drive_t *drive) {
void __not_in_flash_func(drive_step_up)(drive_t *drive) {
drive->halftrack = (drive->halftrack + 1) & 1;
- if (drive->track < 34 && drive->halftrack == 0) {
+ if (drive->track < 39 && drive->halftrack == 0) {
drive->image_ptr += SECTORS_PER_TRACK[drive->track] << 8;
drive->track += 1;
drive->sector = drive->sector * SECTORS_PER_TRACK[drive->track] / SECTORS_PER_TRACK[drive->track - 1];
diff --git a/src/drive.h b/src/drive.h
index 7d1daae..2415e25 100644
--- a/src/drive.h
+++ b/src/drive.h
@@ -6,7 +6,7 @@
#define DRIVE_LOOKAHEAD 8
-extern const uint8_t SECTORS_PER_TRACK[35];
+extern const uint8_t SECTORS_PER_TRACK[40];
extern const uint16_t BITRATES[4];
extern const uint8_t GCR_CONV[16];
diff --git a/src/pico1541.c b/src/pico1541.c
index cb0473b..0cc5d61 100644
--- a/src/pico1541.c
+++ b/src/pico1541.c
@@ -37,7 +37,7 @@ static FILINFO disks[MAX_DISKS];
static uint8_t ram[2048];
static volatile uint8_t dos1541[16384];
-static volatile uint8_t disk[174848];
+static volatile uint8_t disk[196608];
static uint32_t ts;
static cpu_t cpu;
@@ -335,9 +335,7 @@ void drive_thread() {
&& disks[n_disks].fname[0]
&& n_disks < MAX_DISKS - 1
) {
- if (disks[n_disks].fsize == 174848) {
- n_disks++;
- }
+ n_disks++;
res = f_findnext(&d, &disks[n_disks]);
}
f_closedir(&d);
@@ -356,7 +354,7 @@ void drive_thread() {
res = f_open(&file, im_path, FA_READ);
if (!res) {
- btr = 174848;
+ btr = f_size(&file);
br = 0;
while (btr > 0) {
UINT brr;