d86f_get_array_size() now actually returns the size according to the hole field, should fix handling of 86F version 1.10 files;

Temporary sector ID field in 86F poller now set to invalid after transferring the value to the last found sector field.
This commit is contained in:
OBattler
2016-09-07 00:40:29 +02:00
parent b90c7d2a68
commit 0ada60b242

View File

@@ -147,23 +147,6 @@ int d86f_get_sides(int drive)
return (d86f[drive].disk_flags & 8) ? 2 : 1; return (d86f[drive].disk_flags & 8) ? 2 : 1;
} }
int d86f_get_side_size(int drive)
{
int pos = 25002;
switch (d86f_hole(drive))
{
case 0:
pos = 15001;
break;
case 1:
pos = 25001;
break;
case 2:
pos = 100001;
break;
}
}
int d86f_get_array_size(int drive) int d86f_get_array_size(int drive)
{ {
int pos = 25002; int pos = 25002;
@@ -179,6 +162,7 @@ int d86f_get_array_size(int drive)
pos = 50000; pos = 50000;
break; break;
} }
return pos;
} }
int d86f_valid_bit_rate(int drive) int d86f_valid_bit_rate(int drive)
@@ -459,10 +443,9 @@ void d86f_seek(int drive, int track)
d86f[drive].track_in_file = 0; d86f[drive].track_in_file = 0;
if (d86f[drive].version == 0x010A) if (d86f[drive].version == 0x010A)
{ {
d86f[drive].side_flags[0] = 0x0A; /* 300 rpm, MFM, 250 kbps */ for (side = 0; side < d86f_get_sides(drive); side++)
if (d86f_get_sides(drive) == 2)
{ {
d86f[drive].side_flags[1] = 0x0A; /* 300 rpm, MFM, 250 kbps */ d86f[drive].side_flags[side] = 0x0A; /* 300 rpm, MFM, 250 kbps */
} }
} }
else else
@@ -478,10 +461,9 @@ void d86f_seek(int drive, int track)
if (d86f[drive].version == 0x010A) if (d86f[drive].version == 0x010A)
{ {
fread(&(d86f[drive].side_flags[0]), 1, 1, d86f[drive].f); for (side = 0; side < d86f_get_sides(drive); side++)
if (d86f_get_sides(drive) == 2)
{ {
fread(&(d86f[drive].side_flags[1]), 1, 1, d86f[drive].f); fread(&(d86f[drive].side_flags[side]), 1, 1, d86f[drive].f);
} }
} }
else else
@@ -508,7 +490,7 @@ void d86f_writeback(int drive)
if (d86f[drive].version == 0x010A) if (d86f[drive].version == 0x010A)
{ {
full_size = d86f_get_array_size(drive); full_size = d86f_get_array_size(drive);
store_size = full_size << 1; store_size = full_size * 2;
if (d86f_get_sides(drive) == 2) flag_bytes++; if (d86f_get_sides(drive) == 2) flag_bytes++;
} }
@@ -524,10 +506,9 @@ void d86f_writeback(int drive)
fseek(d86f[drive].f, d86f[drive].track_offset[track], SEEK_SET); fseek(d86f[drive].f, d86f[drive].track_offset[track], SEEK_SET);
if (d86f[drive].version == 0x010A) if (d86f[drive].version == 0x010A)
{ {
fwrite(&(d86f[drive].side_flags[0]), 1, 1, d86f[drive].f); for (side = 0; side < d86f_get_sides(drive); side++)
if (d86f_get_sides(drive) == 2)
{ {
fwrite(&(d86f[drive].side_flags[1]), 1, 1, d86f[drive].f); fwrite(&(d86f[drive].side_flags[side]), 1, 1, d86f[drive].f);
} }
} }
else else
@@ -1123,18 +1104,22 @@ void d86f_poll_find_nf(int drive, int side)
d86f[drive].index_count = 0; d86f[drive].index_count = 0;
return; return;
} }
} else
} {
d86f[drive].last_sector.dword = d86f[drive].rw_sector_id.dword;
d86f[drive].rw_sector_id.dword = 0xFFFFFFFF;
d86f[drive].last_sector.dword = d86f[drive].rw_sector_id.dword; // pclog("Read sector ID in find state: %i %i %i %i (sought: %i, %i, %i, %i)\n", d86f[drive].last_sector.id.c, d86f[drive].last_sector.id.h, d86f[drive].last_sector.id.r, d86f[drive].last_sector.id.n, d86f[drive].req_sector.id.c, d86f[drive].req_sector.id.h, d86f[drive].req_sector.id.r, d86f[drive].req_sector.id.n);
// pclog("Read sector ID in find state: %i %i %i %i (sought: %i, %i, %i, %i)\n", d86f[drive].last_sector.id.c, d86f[drive].last_sector.id.h, d86f[drive].last_sector.id.r, d86f[drive].last_sector.id.n, d86f[drive].req_sector.id.c, d86f[drive].req_sector.id.h, d86f[drive].req_sector.id.r, d86f[drive].req_sector.id.n);
if ((d86f[drive].state == STATE_READ_FIND_ADDRESS) && d86f_can_read_address(drive)) if ((d86f[drive].state == STATE_READ_FIND_ADDRESS) && d86f_can_read_address(drive) && (d86f[drive].last_sector.dword != 0xFFFFFFFF))
{ {
// pclog("Reading sector ID...\n"); // pclog("Reading sector ID...\n");
fdc_sectorid(d86f[drive].last_sector.id.c, d86f[drive].last_sector.id.h, d86f[drive].last_sector.id.r, d86f[drive].last_sector.id.n, 0, 0); fdc_sectorid(d86f[drive].last_sector.id.c, d86f[drive].last_sector.id.h, d86f[drive].last_sector.id.r, d86f[drive].last_sector.id.n, 0, 0);
d86f[drive].state = STATE_IDLE; d86f[drive].state = STATE_IDLE;
d86f[drive].index_count = 0; d86f[drive].index_count = 0;
}
}
}
} }
break; break;
case BYTE_DATA: case BYTE_DATA: