From 78a4c84db2a65ab5d2d46d95941a6d1e3dbfead5 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Thu, 7 Aug 2025 19:02:31 +0200 Subject: [PATCH] - [FIX] [zx_disk] Usava el index dels sectors en compte del id. - [ONGOING] READ DELETED DATA command (0x0c) (no funciona) --- zx_disk.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/zx_disk.cpp b/zx_disk.cpp index e766186..d7621d8 100644 --- a/zx_disk.cpp +++ b/zx_disk.cpp @@ -19,6 +19,7 @@ #define ZX_FDC_COMMAND_SEEK 0x0F #define ZX_FDC_COMMAND_READ_ID 0x0A #define ZX_FDC_COMMAND_READ_DATA 0x06 +#define ZX_FDC_COMMAND_READ_DELETED_DATA 0x0C #define ZX_FDC_MAIN_DRIVE0_BUSY 1 #define ZX_FDC_MAIN_DRIVE1_BUSY 2 @@ -152,6 +153,16 @@ namespace zx_disk } } + uint8_t find_sector_id(uint8_t sector_id) + { + track_t &track = disk.tracks[current_track]; + for (int j=0; j (returning 0x%02x)\n", val); debug::composeResult(val); return val; @@ -520,7 +534,7 @@ namespace zx_disk break; case 4: call_count++; - current_sector = command-1; + current_sector = find_sector_id(command); break; case 5: call_count++; @@ -551,8 +565,10 @@ namespace zx_disk current_byte++; if (current_byte == disk.tracks[current_track].sectors[current_sector].data_length) { current_byte = 0; + current_sector = disk.tracks[current_track].sectors[current_sector].id; current_sector++; - if (current_sector == disk.tracks[current_track].num_sectors) { + current_sector = find_sector_id(current_sector); + if (current_sector == 0xff) { current_track++; current_sector = 0; } @@ -618,7 +634,7 @@ namespace zx_disk case 5: { call_count++; - const uint8_t val = current_sector+1; + const uint8_t val = disk.tracks[current_track].sectors[current_sector].id; //printf("--> (returning 0x%02x)\n", val); debug::composeResult(val); return val;