- [FIX] [zx_disk] Usava el index dels sectors en compte del id.

- [ONGOING] READ DELETED DATA command (0x0c) (no funciona)
This commit is contained in:
2025-08-07 19:02:31 +02:00
parent 5516f463bf
commit 78a4c84db2

View File

@@ -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<track.num_sectors; ++j)
{
if (track.sectors[j].id == sector_id) return j;
}
return 0xff;
}
uint8_t main_status_register()
{
const uint8_t val = (fdd0busy) |
@@ -252,6 +263,9 @@ namespace zx_disk
case ZX_FDC_COMMAND_READ_DATA:
process_current_command = process_command_read_data;
break;
case ZX_FDC_COMMAND_READ_DELETED_DATA:
process_current_command = process_command_read_data;
break;
default:
{
debug::printCommand();
@@ -472,7 +486,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;
@@ -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;