ti99: Fixed some rarely used TDF floppy format variants.
This commit is contained in:
parent
d578fa0744
commit
cc790e4315
@ -1276,52 +1276,58 @@ int ti99_tdf_format::identify(io_generic *io, uint32_t form_factor, const std::v
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Find the proper format for a given image file.
|
Find the proper format for a given image file. Tracks are counted per side.
|
||||||
|
Note that only two formats are actually compatible with the PC99 emulator.
|
||||||
*/
|
*/
|
||||||
void ti99_tdf_format::determine_sizes(io_generic *io, int& cell_size, int& sector_count, int& heads, int& tracks)
|
void ti99_tdf_format::determine_sizes(io_generic *io, int& cell_size, int& sector_count, int& heads, int& tracks)
|
||||||
{
|
{
|
||||||
uint64_t file_size = io_generic_size(io);
|
uint64_t file_size = io_generic_size(io);
|
||||||
heads = 2; // TDF only supports two-sided recordings
|
|
||||||
tracks = 40;
|
|
||||||
// LOGMASKED(LOG_INFO, "[ti99_dsk] Image size = %ld\n", file_size); // doesn't compile
|
// LOGMASKED(LOG_INFO, "[ti99_dsk] Image size = %ld\n", file_size); // doesn't compile
|
||||||
switch (file_size)
|
switch (file_size)
|
||||||
{
|
{
|
||||||
case 260240: // used in PC99
|
case 260240: // used in PC99
|
||||||
cell_size = 4000;
|
|
||||||
sector_count = 9;
|
sector_count = 9;
|
||||||
|
tracks = 40;
|
||||||
break;
|
break;
|
||||||
case 491520: // 320K HX5102
|
case 491520: // 320K HX5102
|
||||||
cell_size = 2000;
|
|
||||||
sector_count = 16;
|
sector_count = 16;
|
||||||
|
tracks = 40;
|
||||||
break;
|
break;
|
||||||
case 549760: // used in PC99
|
case 549760: // used in PC99
|
||||||
cell_size = 2000;
|
|
||||||
sector_count = 18;
|
sector_count = 18;
|
||||||
|
tracks = 40;
|
||||||
break;
|
break;
|
||||||
|
case 1003520:
|
||||||
|
sector_count = 36;
|
||||||
|
tracks = 40;
|
||||||
|
break;
|
||||||
|
|
||||||
case 520480:
|
case 520480:
|
||||||
cell_size = 4000;
|
|
||||||
sector_count = 9;
|
sector_count = 9;
|
||||||
|
tracks = 80;
|
||||||
break;
|
break;
|
||||||
case 983040:
|
case 983040:
|
||||||
cell_size = 2000;
|
|
||||||
sector_count = 16;
|
sector_count = 16;
|
||||||
tracks = 80;
|
tracks = 80;
|
||||||
break;
|
break;
|
||||||
case 1099520:
|
case 1099520:
|
||||||
cell_size = 2000;
|
|
||||||
sector_count = 18;
|
sector_count = 18;
|
||||||
tracks = 80;
|
tracks = 80;
|
||||||
break;
|
break;
|
||||||
case 2007040:
|
case 2007040:
|
||||||
cell_size = 1000;
|
sector_count = 36;
|
||||||
sector_count = 18;
|
|
||||||
tracks = 80;
|
tracks = 80;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cell_size = 0;
|
cell_size = 0;
|
||||||
sector_count = 0;
|
sector_count = 0;
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
heads = 2; // TDF only supports two-sided recordings
|
||||||
|
cell_size = (sector_count <= 9)? 4000 : ((sector_count <= 18)? 2000 : 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1332,7 +1338,7 @@ void ti99_tdf_format::determine_sizes(io_generic *io, int& cell_size, int& secto
|
|||||||
*/
|
*/
|
||||||
void ti99_tdf_format::load_track(io_generic *io, uint8_t *sectordata, int *sector, int *secoffset, int head, int track, int sectorcount, int trackcount)
|
void ti99_tdf_format::load_track(io_generic *io, uint8_t *sectordata, int *sector, int *secoffset, int head, int track, int sectorcount, int trackcount)
|
||||||
{
|
{
|
||||||
uint8_t fulltrack[6872]; // space for a full TDF track
|
uint8_t fulltrack[12544]; // space for a full TDF track
|
||||||
|
|
||||||
// Read beginning of track 0. We need this to get the first gap, according
|
// Read beginning of track 0. We need this to get the first gap, according
|
||||||
// to the format
|
// to the format
|
||||||
@ -1427,7 +1433,7 @@ void ti99_tdf_format::load_track(io_generic *io, uint8_t *sectordata, int *secto
|
|||||||
*/
|
*/
|
||||||
void ti99_tdf_format::write_track(io_generic *io, uint8_t *sectordata, int *sector, int track, int head, int sector_count, int track_count)
|
void ti99_tdf_format::write_track(io_generic *io, uint8_t *sectordata, int *sector, int track, int head, int sector_count, int track_count)
|
||||||
{
|
{
|
||||||
uint8_t trackdata[14000];
|
uint8_t trackdata[12544];
|
||||||
int offset = ((track_count * head) + track) * get_track_size(sector_count);
|
int offset = ((track_count * head) + track) * get_track_size(sector_count);
|
||||||
int a1 = 0;
|
int a1 = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user