- [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:
24
zx_disk.cpp
24
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<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;
|
||||
|
||||
Reference in New Issue
Block a user