diff options
author | 2020-02-04 16:14:07 +1100 | |
---|---|---|
committer | 2020-02-08 00:12:05 +1100 | |
commit | a87c3b6f7a988271974d38d0fd445a85dde7c09b (patch) | |
tree | 98a5ac7cd3daa9bd9bfbef03b60f5ba0c07cce37 /src/lib/formats/flex_dsk.cpp | |
parent | 927906163401b32433f18d2d92c72f196bc1f7f8 (diff) |
wd177x_dsk: generalize to allow custom track format variations
Add a get_track_format() method that can be overridden to supply format
variations for any track and head. The code is generalised to account for such
variations. The default method returns the passed format, so this change is
neutral for existing formats.
Simplify the FLEX DSK format code. There are now simply format variation
descriptions for the second track that have the sector ID continuing in
sequence from the first track, rather than specialized code.
Extend the FLEX format to support variations in the sectors ID of the first
two sectors. The FLEX 6800 boot sectors have IDs based at zero rather than
one. Extend the FLEX format to support variations for which the first track,
on both sides, is single density on an otherwise double density disk which was
historically a common format.
Extend the OS9 disk format to support variations for which the first track, on
only the first side, is single density on an otherwise double density
disk. OS9 for the SWTPC and Gimix typically used such formats.
Extend the OS9 disk format to support variations with a base sector ID of zero
in contrast to the existing COCO OS9 format which uses a based sector ID of
one. The OS9 format identification code is extended to rely on the optional
information stored in the OS9 LSN0 header to identify COCO format disks, and
all COCO format disks appear to have this optional information in a regular
enough format.
Diffstat (limited to 'src/lib/formats/flex_dsk.cpp')
-rw-r--r-- | src/lib/formats/flex_dsk.cpp | 1339 |
1 files changed, 1126 insertions, 213 deletions
diff --git a/src/lib/formats/flex_dsk.cpp b/src/lib/formats/flex_dsk.cpp index 0d4aa038e60..5944c1ca3bd 100644 --- a/src/lib/formats/flex_dsk.cpp +++ b/src/lib/formats/flex_dsk.cpp @@ -1,18 +1,52 @@ // license:BSD-3-Clause -// copyright-holders:Barry Rodewald +// copyright-holders:Barry Rodewald, 68bit /* * flex_dsk.c - FLEX compatible disk images * * Created on: 24/06/2014 * - * TODO This format does not yet handle double density disks with a single - * density track 0. FLEX DSK files are generally 'fixed' to have a consistent - * number of sectors per track which makes them easier to work with and gains - * more storage space, and tools and emulators generally only work with these - * formats. For now use single density disks, or patch the ROM to load the - * boot sector(s) in double density and patch the drivers to use double - * density on track zero. Drivers developed for emulators commonly have other - * issues and need work anyway. + * This FLEX floppy disk image support leverages the wd177x_format support + * with the few differences handled by format variations. + * + * FLEX numbers sectors on the second side of a track continuing from the + * first side, so there are separate formats for each head on double sided + * disk formats. + * + * FLEX on the 6809 typically encodes the first track, on both heads, in + * single density for double density disks. This simplifies the ROM boot code + * which need only handle single density. It might also have been a strategy + * at the time for reading both single and double density disks. So there are + * double density disk format variations that have the first track encoded in + * single density. + * + * However FLEX double density disks did not necessarily have the first sector + * encoded in single density. FLEX floppy disk drivers for the 6800 were + * typically just patched for double density support, with the controller + * jumpered for double density, and so did not encode the first sector in + * single density. Also there are many 'emulator' disk images distributed for + * which the first track has been padded to give a consistent number of + * sectors per track. So there are variations for which the first track is + * also encoded in double density. + * + * FLEX generally numbers sectors starting with ID 1, but there are exceptions + * for 6800 boot sectors where the first one or two sectors of track 0 and + * head 0 are numbered starting with ID 0 and so there are format variations + * for these. This strategy simplified the 6800 ROM boot loader, minimising + * its code size, which simply issues a multi-sector read and relies on a gap + * in the sector IDs to halt that operation. So if only one sector is to be + * loaded then the sector IDs are 0, 2, 3, ..., and if two sectors are to be + * loaded then the sector IDs are 0, 1, 3, 4, .... This strategy was abandoned + * for FLEX 6809 which numbers the boot sectors starting from ID 1 too. + * + * The formats below include interleaved sectors to improve performance. The + * interleave has been chosen to perform well on slower hardware and software + * combinations while still offering some performance improvement. Tighter + * interleaving may well be possible but it depends on the systems and + * software. + * + * Not all of the formats are practical on all hardware and software. E.g. The + * higher density formats can require data rates that the CPU can not keep up + * with. */ #include "flex_dsk.h" @@ -37,15 +71,6 @@ const char *flex_format::extensions() const return "dsk"; } -int flex_format::identify(io_generic *io, uint32_t form_factor) -{ - int type = find_size(io, form_factor); - - if (type != -1) - return 75; - return 0; -} - int flex_format::find_size(io_generic *io, uint32_t form_factor) { uint64_t size = io_generic_size(io); @@ -58,69 +83,7 @@ int flex_format::find_size(io_generic *io, uint32_t form_factor) // Look at the system information sector. io_generic_read(io, &info, 256 * 2, sizeof(struct sysinfo_sector)); - LOG_FORMATS("FLEX floppy dsk size %d %d %d\n", (uint32_t)size, (uint32_t)size / 256, (uint32_t)size % 256); - - LOG_FORMATS(" boot0:"); - for (int i = 0; i < 16; i++) { - LOG_FORMATS(" %02x", boot0[i]); - } - LOG_FORMATS("\n"); - - LOG_FORMATS(" boot1:"); - for (int i = 0; i < 16; i++) { - LOG_FORMATS(" %02x", boot1[i]); - } - LOG_FORMATS("\n"); - - - // Check that the 'unused' area is actually unused. - LOG_FORMATS(" unused1:"); - for (int i = 0; i < sizeof(info.unused1); i++) { - LOG_FORMATS(" %02x", info.unused1[i]); - } - LOG_FORMATS("\n"); - - LOG_FORMATS(" disk_name: \""); - for (int i = 0; i < sizeof(info.disk_name); i++) { - uint8_t ch = info.disk_name[i]; - if (ch < 0x20 || ch > 0x7f) { - LOG_FORMATS("[%02x]", ch); - } else { - LOG_FORMATS("%c", ch); - } - } - if (info.disk_ext[0] || info.disk_ext[1] || info.disk_ext[2]) { - LOG_FORMATS("."); - for (int i = 0; i < sizeof(info.disk_ext); i++) { - uint8_t ch = info.disk_ext[i]; - if (ch < 0x20 || ch > 0x7f) { - LOG_FORMATS("[%02x]", ch); - } else { - LOG_FORMATS("%c", ch); - } - } - } - LOG_FORMATS("\"\n"); - - LOG_FORMATS(" fc_start_trk %d, fc_start_sec %d\n", info.fc_start_trk, info.fc_start_sec); - LOG_FORMATS(" fc_end_trk: %d, fc_end_sec: %d\n", info.fc_end_trk, info.fc_end_sec); - LOG_FORMATS(" free: %02x %02x\n", info.free[0], info.free[0]); - - LOG_FORMATS(" month %d day %d year %d\n", info.month, info.day, info.year); - LOG_FORMATS(" last_trk %d, last_sec %d\n", info.last_trk, info.last_sec); - - LOG_FORMATS(" unused2:"); - for (int i = 0; i < 16; i++) { - LOG_FORMATS(" %02x", info.unused2[i]); - } - LOG_FORMATS("\n"); - -#if 0 - // Check that the first 'unused' area is zero filled. - // Unfortunately an occasional dsk image has non-zero values here. - for (int i = 0; i < sizeof(info.unused1); i++) - if (info.unused1[i] != 0) return -1; -#endif + LOG_FORMATS("FLEX floppy dsk: size %d bytes, %d total sectors, %d remaining bytes, expected form factor %x\n", (uint32_t)size, (uint32_t)size / 256, (uint32_t)size % 256, form_factor); // Consistency checks. if (info.fc_start_trk > info.last_trk || info.fc_end_trk > info.last_trk) @@ -130,15 +93,6 @@ int flex_format::find_size(io_generic *io, uint32_t form_factor) if (info.month < 1 || info.month > 12 || info.day < 1 || info.day > 31) return -1; - // FLEX sector numbers start at one generally, however the 6800 ROM - // boot loaders load the boot code from track zero, side zero, - // starting at sector zero. The boot code attempts to read multiple - // sectors and a gap in the sector numbering appears to be used to - // terminate the sequence. So if only one sector is to be loaded then - // the sector numbering is 0, 2, 3, .... If two sectors are to be - // loaded then the sector numbering is 0, 1, 3, 4 ... The boot loaders - // for 6809 FLEX systems appear to load from sector one so do not have - // this inconsistency to handle. boot0_sector_id = 1; boot1_sector_id = 2; @@ -158,14 +112,10 @@ int flex_format::find_size(io_generic *io, uint32_t form_factor) boot1_sector_id = 1; } } - LOG_FORMATS(" boot sector ids: %d %d\n", boot0_sector_id, boot1_sector_id); - for(int i=0; formats[i].form_factor; i++) { + for (int i=0; formats[i].form_factor; i++) { const format &f = formats[i]; - if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) - continue; - - if(size != (uint64_t)compute_track_size(f) * f.track_count * f.head_count) + if (form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor) continue; // Check consistency with the sysinfo record sector. @@ -175,170 +125,1133 @@ int flex_format::find_size(io_generic *io, uint32_t form_factor) if (f.sector_count * f.head_count != info.last_sec) continue; + unsigned int format_size = 0; + for (int track=0; track < f.track_count; track++) { + for (int head=0; head < f.head_count; head++) { + const format &tf = get_track_format(f, head, track); + format_size += compute_track_size(tf); + } + } + + if (format_size != size) + continue; + + // Check that the boot sector ID matches. + const format &ft0 = formats_track0[i]; + if (ft0.form_factor) { + // There is a specialized track 0 format. + if (ft0.sector_base_id == -1) { + if (ft0.per_sector_id[0] != boot0_sector_id) + continue; + } else { + if (ft0.sector_base_id != boot0_sector_id) + continue; + } + } else { + // Otherwise check the default track format. + if (f.sector_base_id == -1) { + if (f.per_sector_id[0] != boot0_sector_id) + continue; + } else { + if (f.sector_base_id != boot0_sector_id) + continue; + } + } + + LOG_FORMATS("FLEX matching format index %d\n", i); return i; } return -1; } -// FLEX numbers sectors on the second side of a track continuing from the -// first side which is a variation not handled by the generic code. -// -// FLEX generally numbers sectors starting at 1, however the 6800 boot sectors -// are numbers starting at zero. -// -void flex_format::build_sector_description(const format &f, uint8_t *sectdata, desc_s *sectors, int track, int head) const +const wd177x_format::format &flex_format::get_track_format(const format &f, int head, int track) { - if(f.sector_base_id == -1) { - for(int i=0; i<f.sector_count; i++) { - int cur_offset = 0; - for(int j=0; j<f.sector_count; j++) - if(f.per_sector_id[j] < f.per_sector_id[i]) - cur_offset += f.sector_base_size ? f.sector_base_size : f.per_sector_size[j]; - sectors[i].data = sectdata + cur_offset; - sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i]; - uint8_t sector_id = f.per_sector_id[i]; - if (track == 0 && head == 0 && sector_id <= 2) { - if (sector_id == 0) - sector_id = boot0_sector_id; - else - sector_id = boot1_sector_id; - } - sectors[i].sector_id = f.sector_count * head + sector_id; - } - } else { - int cur_offset = 0; - for(int i=0; i<f.sector_count; i++) { - sectors[i].data = sectdata + cur_offset; - sectors[i].size = f.sector_base_size ? f.sector_base_size : f.per_sector_size[i]; - cur_offset += sectors[i].size; - uint8_t sector_id = i + f.sector_base_id; - if (track == 0 && head == 0 && i < 2) { - if (i == 0) - sector_id = boot0_sector_id; - else - sector_id = boot1_sector_id; - } - sectors[i].sector_id = f.sector_count * head + sector_id; + int n = -1; + + for (int i = 0; formats[i].form_factor; i++) { + if (&formats[i] == &f) { + n = i; + break; } } -} -// For FLEX just use track 1 rather than the generic code that looks a track -// 0. This is enough to avoid the odd sector numbering for the boot sectors, -// while following the generic code. -void flex_format::check_compatibility(floppy_image *image, std::vector<int> &candidates) -{ - uint8_t bitstream[500000/8]; - uint8_t sectdata[50000]; - desc_xs sectors[256]; - int track_size; + if (n < 0) { + LOG_FORMATS("Error format not found\n"); + return f; + } - // Extract the sectors - generate_bitstream_from_track(1, 0, formats[candidates[0]].cell_size, bitstream, track_size, image); + if (head >= f.head_count) { + LOG_FORMATS("Error invalid head %d\n", head); + return f; + } - switch (formats[candidates[0]].encoding) - { - case floppy_image::FM: - extract_sectors_from_bitstream_fm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); - break; - case floppy_image::MFM: - extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata)); - break; + if (track >= f.track_count) { + LOG_FORMATS("Error invalid track %d\n", track); + return f; } - // Check compatibility with every candidate, copy in-place - int *ok_cands = &candidates[0]; - for(unsigned int i=0; i != candidates.size(); i++) { - const format &f = formats[candidates[i]]; - int ns = 0; - for(int j=0; j<256; j++) - if(sectors[j].data) { - int sid; - if(f.sector_base_id == -1) { - for(sid=0; sid < f.sector_count; sid++) - if(f.per_sector_id[sid] == j) - break; - } else - sid = j - f.sector_base_id; - if(sid < 0 || sid > f.sector_count) - goto fail; - if(f.sector_base_size) { - if(sectors[j].size != f.sector_base_size) - goto fail; - } else { - if(sectors[j].size != f.per_sector_size[sid]) - goto fail; - } - ns++; + if (track > 0) { + if (head == 1) { + const format &fh1 = formats_head1[n]; + if (!fh1.form_factor) { + LOG_FORMATS("Error expected a head 1 format\n"); + return f; } - if(ns == f.sector_count) - *ok_cands++ = candidates[i]; - fail: - ; + return fh1; + } + return f; + } + + // Track 0 + + if (head == 1) { + const format &fh1t0 = formats_head1_track0[n]; + if (fh1t0.form_factor) { + return fh1t0; + } + const format &fh1 = formats_head1[n]; + if (fh1.form_factor) { + return fh1; + } + LOG_FORMATS("Error expected a head 1 format\n"); + return f; + } + + // Head 0 + + const format &ft0 = formats_track0[n]; + if (ft0.form_factor) { + return ft0; } - candidates.resize(ok_cands - &candidates[0]); + + return f; } + const flex_format::format flex_format::formats[] = { - { // 87.5K 5 1/4 inch single density - gaps unverified + { // 0 87.5K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 1 87.5K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 2 87.5K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 3 100K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 4 100K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 5 100K 5 1/4 inch single density, 6800 two boot sectors floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, - 4000, 10, 35, 1, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 40, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 }, - { // 100K 5 1/4 inch single density - gaps unverified + { // 6 200K 5 1/4 inch single density floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, - 4000, 10, 40, 1, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 80, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 }, - { // 200K 5 1/4 inch single density - gaps unverified + { // 7 200K 5 1/4 inch single density, 6800 one boot sector floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, - 4000, 10, 80, 1, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 80, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 }, - { // 175K 5 1/4 inch single density - gaps unverified + { // 8 200K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 9 175K 5 1/4 inch single density floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, - 4000, 10, 35, 2, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 35, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 }, - { // 200K 5 1/4 inch single density - gaps unverified + { // 10 175K 5 1/4 inch single density, 6800 one boot sector floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, - 4000, 10, 40, 2, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 35, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 }, - { // 400K 5 1/4 inch single density - gaps unverified + { // 11 175K 5 1/4 inch single density, 6800 two boot sectors floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, - 4000, 10, 80, 2, 256, {}, 1, {}, 40, 16, 11 + 4000, 10, 35, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 12 200K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 13 200K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 14 200K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 15 400K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 16 400K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 17 400K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 18 155.5K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 19 155.5K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 20 155.5K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 21 157.5K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 }, - { // 320K 5 1/4 inch double density - gaps unverified + { // 22 157.5K 5 1/4 inch double density, 6800 one boot sector floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, - 2000, 18, 40, 1, 256, {}, 1, {}, 80, 22, 24 + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 23 157.5K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 24 311K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 25 311K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 26 311K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 27 315K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 28 315K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 }, - { // 320K 5 1/4 inch double density - gaps unverified + { // 29 315K 5 1/4 inch double density, 6800 two boot sectors floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, - 2000, 18, 40, 2, 256, {}, 1, {}, 80, 22, 24 + 2000, 18, 35, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 }, - { // 360K 5 1/4 inch quad density - gaps unverified + { // 30 178K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 31 178K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 32 178K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 33 180K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 34 180K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 35 180K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 36 356K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 37 356K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 38 356K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 39 360K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 40 360K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 41 360K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 42 358K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 43 358K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 44 358K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 45 360K 5 1/4 inch quad density + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 46 360K 5 1/4 inch quad density, 6800 one boot sector floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, - 2000, 18, 80, 1, 256, {}, 1, {}, 80, 22, 24 + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 }, - { // 720K 5 1/4 inch quad density - gaps unverified + { // 47 360K 5 1/4 inch quad density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 48 716K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 49 716K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 50 716K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 51 720K 5 1/4 inch quad density + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 52 720K 5 1/4 inch quad density, 6800 one boot sector floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, - 2000, 18, 80, 2, 256, {}, 1, {}, 80, 22, 24 + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 }, - { // 288.75K 8 inch single density - gaps unverified + { // 53 720K 5 1/4 inch quad density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 54 288.75K 8 inch single density + floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, + 2000, 15, 77, 1, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 55 288.75K 8 inch single density, 6800 one boot sector floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, - 2000, 15, 77, 1, 256, {}, 1, {}, 40, 12, 12 + 2000, 15, 77, 1, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 56 288.75K 8 inch single density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, + 2000, 15, 77, 1, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 57 577.5K 8 inch single density + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 }, - { // 577.5K 8 inch single density - gaps unverified + { // 58 577.5K 8 inch single density, 6800 one boot sector floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, - 2000, 15, 77, 2, 256, {}, 1, {}, 40, 12, 12 + 2000, 15, 77, 2, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 }, - { // 500.5K 8 inch double density - gaps unverified + { // 59 577.5K 8 inch single density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 60 497.75K 8 inch double density (single density track 0) floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, - 1000, 26, 77, 1, 256, {}, 1, {}, 80, 22, 24 + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 }, - { // 1001K 8 inch double density - gaps unverified + { // 61 497.75K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 62 497.75K 8 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 63 500.5K 8 inch double density + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 64 500.5K 8 inch double density, 6800 one boot sector + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 65 500.5K 8 inch double density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 66 995.5K 8 inch double density (single density track 0) + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 67 995.5K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 68 995.5K 8 inch double density (single density track 0), 6800 two boot sectors floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, - 1000, 26, 77, 2, 256, {}, 1, {}, 80, 22, 24 + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 }, - { /* 1440K 3 1/2 inch high density */ + { // 69 1001K 8 inch double density + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 70 1001K 8 inch double density, 6800 one boot sector + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 71 1001K 8 inch double density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {1, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 72 1440K 3 1/2 inch high density (single density track 0) + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 73 1440K 3 1/2 inch high density (single density track 0), 6800 one boot sector + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 74 1440K 3 1/2 inch high density (single density track 0), 6800 two boot sectors floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, - 1000, 36, 80, 2, 256, {}, 1, {}, 80, 22, 24 + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 75 1440K 3 1/2 inch high density. + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 76 1440K 3 1/2 inch high density, 6800 one boot sector + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 77 1440K 3 1/2 inch high density, 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {1, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + {} +}; + +const flex_format::format flex_format::formats_head1[] = { + { // 0 87.5K 5 1/4 inch single density + }, + { // 1 87.5K 5 1/4 inch single density, 6800 one boot sector + }, + { // 2 87.5K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 3 100K 5 1/4 inch single density + }, + { // 4 100K 5 1/4 inch single density, 6800 one boot sector + }, + { // 5 100K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 6 200K 5 1/4 inch single density + }, + { // 7 200K 5 1/4 inch single density, 6800 one boot sector + }, + { // 8 200K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 9 175K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 10 175K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 11 175K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 12 200K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 13 200K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 14 200K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 15 400K 5 1/4 inch single density + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 16 400K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 17 400K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 18 155.5K 5 1/4 inch double density (single density track 0) + }, + { // 19 155.5K 5 1/4 inch double density (single density track 0), 6800 one boot sector + }, + { // 20 155.5K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + }, + { // 21 157.5K 5 1/4 inch double density + }, + { // 22 157.5K 5 1/4 inch double density, 6800 one boot sector + }, + { // 23 157.5K 5 1/4 inch double density, 6800 two boot sectors + }, + { // 24 311K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 25 311K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 26 311K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 27 315K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 28 315K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 29 315K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 30 178K 5 1/4 inch double density (single density track 0) + }, + { // 31 178K 5 1/4 inch double density (single density track 0), 6800 one boot sector + }, + { // 32 178K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + }, + { // 33 180K 5 1/4 inch double density + }, + { // 34 180K 5 1/4 inch double density, 6800 one boot sector + }, + { // 35 180K 5 1/4 inch double density, 6800 two boot sectors + }, + { // 36 356K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 37 356K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 38 356K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 39 360K 5 1/4 inch double density + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 40 360K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 41 360K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 42 358K 5 1/4 inch quad density (single density track 0) + }, + { // 43 358K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + }, + { // 44 358K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + }, + { // 45 360K 5 1/4 inch quad density + }, + { // 46 360K 5 1/4 inch quad density, 6800 one boot sector + }, + { // 47 360K 5 1/4 inch quad density, 6800 two boot sectors + }, + { // 48 716K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 49 716K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 50 716K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 51 720K 5 1/4 inch quad density + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 52 720K 5 1/4 inch quad density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 53 720K 5 1/4 inch quad density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 54 288.75K 8 inch single density + }, + { // 55 288.75K 8 inch single density, 6800 one boot sector + }, + { // 56 288.75K 8 inch single density, 6800 two boot sectors + }, + { // 57 577.5K 8 inch single density + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 58 577.5K 8 inch single density, 6800 one boot sector + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 59 577.5K 8 inch single density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 60 497.75K 8 inch single density (single density track 0) + }, + { // 61 497.75K 8 inch single density (single density track 0), 6800 one boot sector + }, + { // 62 497.75K 8 inch single density (single density track 0), 6800 two boot sectors + }, + { // 63 500.5K 8 inch double density + }, + { // 64 500.5K 8 inch double density, 6800 one boot sector + }, + { // 65 500.5K 8 inch double density, 6800 two boot sectors + }, + { // 66 995.5K 8 inch double density (single density track 0) + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 67 995.5K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 68 995.5K 8 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 69 1001K 8 inch double density + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 70 1001K 8 inch double density, 6800 one boot sector + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 71 1001K 8 inch double density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {27, 46, 39, 32, 51, 44, 37, 30, 49, 42, 35, 28, 47, 40, 33, 52, 45, 38, 31, 50, 43, 36, 29, 48, 41, 34}, 80, 22, 24 + }, + { // 72 1440K 3 1/2 inch high density (single density track 0) + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + { // 73 1440K 3 1/2 inch high density (single density track 0), 6800 one boot sector + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + { // 74 1440K 3 1/2 inch high density (single density track 0), 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + { // 75 1440K 3 1/2 inch high density + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + { // 76 1440K 3 1/2 inch high density, 6800 one boot sector + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + { // 77 1440K 3 1/2 inch high density, 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {37, 62, 51, 40, 65, 54, 43, 68, 57, 46, 71, 60, 49, 38, 63, 52, 41, 66, 55, 44, 69, 58, 47, 72, 61, 50, 39, 64, 53, 42, 67, 56, 45, 70, 59, 48}, 80, 22, 24 + }, + {} +}; + +const flex_format::format flex_format::formats_track0[] = { + { // 0 87.5K 5 1/4 inch single density + }, + { // 1 87.5K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 2 87.5K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 3 100K 5 1/4 inch single density + }, + { // 4 100K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 5 100K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 6 200K 5 1/4 inch single density + }, + { // 7 200K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 8 200K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 9 175K 5 1/4 inch single density + }, + { // 10 175K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 11 175K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 12 200K 5 1/4 inch single density + }, + { // 13 200K 5 1/4 inch single densityo, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 14 200K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 15 400K 5 1/4 inch single density + }, + { // 16 400K 5 1/4 inch single density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 17 400K 5 1/4 inch single density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 18 155.5K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 19 155.5K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 20 155.5K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 35, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 21 157.5K 5 1/4 inch double density + }, + { // 22 157.5K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 23 157.5K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 35, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 24 311K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 25 311K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 26 311K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 27 315K 5 1/4 inch double density + }, + { // 28 315K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 29 315K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 35, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 30 178K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 31 178K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 32 178K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 40, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 33 180K 5 1/4 inch double density + }, + { // 34 180K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 35 180K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM, + 2000, 18, 40, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 36 356K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 37 356K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 38 356K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 39 360K 5 1/4 inch double density + }, + { // 40 360K 5 1/4 inch double density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 41 360K 5 1/4 inch double density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM, + 2000, 18, 40, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 42 358K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 43 358K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 44 358K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM, + 4000, 10, 80, 1, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 45 360K 5 1/4 inch quad density + }, + { // 46 360K 5 1/4 inch quad density, 6800 one boot sector + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 47 360K 5 1/4 inch quad density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::SSQD, floppy_image::MFM, + 2000, 18, 80, 1, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 48 716K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {1, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 49 716K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 2, 5, 8}, 40, 16, 11 + }, + { // 50 716K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {0, 4, 7, 10, 3, 6, 9, 1, 5, 8}, 40, 16, 11 + }, + { // 51 720K 5 1/4 inch quad density + }, + { // 52 720K 5 1/4 inch quad density, 6800 one boot sector + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 53 720K 5 1/4 inch quad density, 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM, + 2000, 18, 80, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 80, 22, 24 + }, + { // 54 288.75K 8 inch single density + }, + { // 55 288.75K 8 inch single density, 6800 one boot sector + }, + { // 56 288.75K 8 inch single density, 6800 two boot sectors + }, + { // 57 577.5K 8 inch single density + }, + { // 58 577.5K 8 inch single density, 6800 one boot sector + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 59 577.5K 8 inch single density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 1, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 60 497.75K 8 inch double density (single density track 0) + floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, + 2000, 15, 77, 1, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 61 497.75K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, + 2000, 15, 77, 1, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 62 497.75K 8 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_8, floppy_image::SSSD, floppy_image::FM, + 2000, 15, 77, 1, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 1, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 63 500.5K 8 inch double density + }, + { // 64 500.5K 8 inch double density, 6800 one boot sector + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {0, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 65 500.5K 8 inch double density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::SSDD, floppy_image::MFM, + 1000, 26, 77, 1, 256, {}, -1, {0, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 1, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 66 995.5K 8 inch double density (single density track 0) + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {1, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 67 995.5K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 2, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 68 995.5K 8 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {0, 3, 5, 7, 9, 11, 13, 15, 1, 4, 6, 8, 10, 12, 14}, 40, 12, 12 + }, + { // 69 1001K 8 inch double density + }, + { // 70 1001K 8 inch double density, 6800 one boot sector + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {0, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 2, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 71 1001K 8 inch double density, 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSDD, floppy_image::MFM, + 1000, 26, 77, 2, 256, {}, -1, {0, 20, 13, 6, 25, 18, 11, 4, 23, 16, 9, 1, 21, 14, 7, 26, 19, 12, 5, 24, 17, 10, 3, 22, 15, 8}, 80, 22, 24 + }, + { // 72 1440K 3 1/2 inch high density (single density track 0) + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {1, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 40, 12, 12 + }, + { // 73 1440K 3 1/2 inch high density (single density track 0), 6800 one boot sector + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 2, 7, 12, 17, 4, 9, 14}, 40, 12, 12 + }, + { // 74 1440K 3 1/2 inch high density (single density track 0), 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {0, 6, 11, 16, 3, 8, 13, 18, 5, 10, 15, 1, 7, 12, 17, 4, 9, 14}, 40, 12, 12 + }, + { // 75 1440K 3 1/2 inch high density + }, + { // 76 1440K 3 1/2 inch high density, 6800 one boot sector + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {0, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 2, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + { // 77 1440K 3 1/2 inch high density, 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM, + 1000, 36, 80, 2, 256, {}, -1, {0, 26, 15, 4, 29, 18, 7, 32, 21, 10, 35, 24, 13, 1, 27, 16, 5, 30, 19, 8, 33, 22, 11, 36, 25, 14, 3, 28, 17, 6, 31, 20, 9, 34, 23, 12}, 80, 22, 24 + }, + {} +}; + +const flex_format::format flex_format::formats_head1_track0[] = { + { // 0 87.5K 5 1/4 inch single density + }, + { // 1 87.5K 5 1/4 inch single density, 6800 one boot sector + }, + { // 2 87.5K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 3 100K 5 1/4 inch single density + }, + { // 4 100K 5 1/4 inch single density, 6800 one boot sector + }, + { // 5 100K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 6 200K 5 1/4 inch single density + }, + { // 7 200K 5 1/4 inch single density, 6800 one boot sector + }, + { // 8 200K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 9 175K 5 1/4 inch single density + }, + { // 10 175K 5 1/4 inch single density, 6800 one boot sector + }, + { // 11 175K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 12 200K 5 1/4 inch single density + }, + { // 13 200K 5 1/4 inch single density, 6800 one boot sector + }, + { // 14 200K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 15 400K 5 1/4 inch single density + }, + { // 16 400K 5 1/4 inch single density, 6800 one boot sector + }, + { // 17 400K 5 1/4 inch single density, 6800 two boot sectors + }, + { // 18 155.5K 5 1/4 inch double density (single density track 0) + }, + { // 19 155.5K 5 1/4 inch double density (single density track 0), 6800 one boot sector + }, + { // 20 155.5K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + }, + { // 21 157.5K 5 1/4 inch double density + }, + { // 22 157.5K 5 1/4 inch double density + }, + { // 23 157.5K 5 1/4 inch double density + }, + { // 24 311K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 25 311K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 26 311K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 35, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 27 315K 5 1/4 inch double density + }, + { // 28 315K 5 1/4 inch double density, 6800 one boot sector + }, + { // 29 315K 5 1/4 inch double density, 6800 two boot sectors + }, + { // 30 178K 5 1/4 inch double density (single density track 0) + }, + { // 31 178K 5 1/4 inch double density (single density track 0), 6800 one boot sector + }, + { // 32 178K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + }, + { // 33 180K 5 1/4 inch double density + }, + { // 34 180K 5 1/4 inch double density, 6800 one boot sector + }, + { // 35 180K 5 1/4 inch double density, 6800 two boot sectors + }, + { // 36 356K 5 1/4 inch double density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 37 356K 5 1/4 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 38 356K 5 1/4 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 40, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 39 360K 5 1/4 inch double density + }, + { // 40 360K 5 1/4 inch double density, 6800 one boot sector + }, + { // 41 360K 5 1/4 inch double density, 6800 two boot sectors + }, + { // 42 358K 5 1/4 inch quad density (single density track 0) + }, + { // 43 358K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + }, + { // 44 358K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + }, + { // 45 360K 5 1/4 inch quad density + }, + { // 46 360K 5 1/4 inch quad density, 6800 one boot sector + }, + { // 47 360K 5 1/4 inch quad density, 6800 two boot sectors + }, + { // 48 716K 5 1/4 inch quad density (single density track 0) + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 49 716K 5 1/4 inch quad density (single density track 0), 6800 one boot sector + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 50 716K 5 1/4 inch quad density (single density track 0), 6800 two boot sectors + floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM, + 4000, 10, 80, 2, 256, {}, -1, {11, 14, 17, 20, 13, 16, 19, 12, 15, 18}, 40, 16, 11 + }, + { // 51 720K 5 1/4 inch quad density + }, + { // 52 720K 5 1/4 inch quad density, 6800 one boot sector + }, + { // 53 720K 5 1/4 inch quad density, 6800 two boot sectors + }, + { // 54 288.75K 8 inch single density + }, + { // 55 288.75K 8 inch single density, 6800 one boot sector + }, + { // 56 288.75K 8 inch single density, 6800 two boot sectors + }, + { // 57 577.5K 8 inch single density + }, + { // 58 577.5K 8 inch single density, 6800 one boot sector + }, + { // 59 577.5K 8 inch single density, 6800 two boot sectors + }, + { // 60 497.75K 8 inch double density (single density track 0) + }, + { // 61 497.75K 8 inch double density (single density track 0), 6800 one boot sector + }, + { // 62 497.75K 8 inch double density (single density track 0), 6800 two boot sectors + }, + { // 63 500.5K 8 inch double density + }, + { // 64 500.5K 8 inch double density, 6800 one boot sector + }, + { // 65 500.5K 8 inch double density, 6800 two boot sectors + }, + { // 66 995.5K 8 inch double density (single density track 0) + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 67 995.5K 8 inch double density (single density track 0), 6800 one boot sector + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 68 995.5K 8 inch double density (single density track 0), 6800 two boot sectors + floppy_image::FF_8, floppy_image::DSSD, floppy_image::FM, + 2000, 15, 77, 2, 256, {}, -1, {16, 18, 20, 22, 24, 26, 28, 30, 17, 19, 21, 23, 25, 27, 29}, 40, 12, 12 + }, + { // 69 1001K 8 inch double density + }, + { // 70 1001K 8 inch double density, 6800 one boot sector + }, + { // 71 1001K 8 inch double density, 6800 two boot sectors + }, + { // 72 1440K 3 1/2 inch high density (single density track 0) + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 73 1440K 3 1/2 inch high density (single density track 0), 6800 one boot sector + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 74 1440K 3 1/2 inch high density (single density track 0), 6800 two boot sectors + floppy_image::FF_35, floppy_image::DSSD, floppy_image::FM, + 2000, 18, 80, 2, 256, {}, -1, {19, 24, 29, 34, 21, 26, 31, 36, 23, 28, 33, 20, 25, 30, 35, 22, 27, 32}, 80, 22, 24 + }, + { // 75 1440K 3 1/2 inch high density + }, + { // 76 1440K 3 1/2 inch high density, 6800 one boot sector + }, + { // 77 1440K 3 1/2 inch high density, 6800 two boot sectors }, {} }; |