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:
@@ -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:
|
||||||
|
Reference in New Issue
Block a user