- [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_SEEK 0x0F
|
||||||
#define ZX_FDC_COMMAND_READ_ID 0x0A
|
#define ZX_FDC_COMMAND_READ_ID 0x0A
|
||||||
#define ZX_FDC_COMMAND_READ_DATA 0x06
|
#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_DRIVE0_BUSY 1
|
||||||
#define ZX_FDC_MAIN_DRIVE1_BUSY 2
|
#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()
|
uint8_t main_status_register()
|
||||||
{
|
{
|
||||||
const uint8_t val = (fdd0busy) |
|
const uint8_t val = (fdd0busy) |
|
||||||
@@ -252,6 +263,9 @@ namespace zx_disk
|
|||||||
case ZX_FDC_COMMAND_READ_DATA:
|
case ZX_FDC_COMMAND_READ_DATA:
|
||||||
process_current_command = process_command_read_data;
|
process_current_command = process_command_read_data;
|
||||||
break;
|
break;
|
||||||
|
case ZX_FDC_COMMAND_READ_DELETED_DATA:
|
||||||
|
process_current_command = process_command_read_data;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
debug::printCommand();
|
debug::printCommand();
|
||||||
@@ -472,7 +486,7 @@ namespace zx_disk
|
|||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
call_count++;
|
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);
|
//printf("--> (returning 0x%02x)\n", val);
|
||||||
debug::composeResult(val);
|
debug::composeResult(val);
|
||||||
return val;
|
return val;
|
||||||
@@ -520,7 +534,7 @@ namespace zx_disk
|
|||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
call_count++;
|
call_count++;
|
||||||
current_sector = command-1;
|
current_sector = find_sector_id(command);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
call_count++;
|
call_count++;
|
||||||
@@ -551,8 +565,10 @@ namespace zx_disk
|
|||||||
current_byte++;
|
current_byte++;
|
||||||
if (current_byte == disk.tracks[current_track].sectors[current_sector].data_length) {
|
if (current_byte == disk.tracks[current_track].sectors[current_sector].data_length) {
|
||||||
current_byte = 0;
|
current_byte = 0;
|
||||||
|
current_sector = disk.tracks[current_track].sectors[current_sector].id;
|
||||||
current_sector++;
|
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_track++;
|
||||||
current_sector = 0;
|
current_sector = 0;
|
||||||
}
|
}
|
||||||
@@ -618,7 +634,7 @@ namespace zx_disk
|
|||||||
case 5:
|
case 5:
|
||||||
{
|
{
|
||||||
call_count++;
|
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);
|
//printf("--> (returning 0x%02x)\n", val);
|
||||||
debug::composeResult(val);
|
debug::composeResult(val);
|
||||||
return val;
|
return val;
|
||||||
|
|||||||
Reference in New Issue
Block a user