diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index fd0eb72..578731e 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -9,109 +9,110 @@ Specification for v2.12 All offsets are in hexadecimal. .. code-block:: none - -00000000: Magic 4 bytes ("86BF") -00000004: Minor version (0C) -00000005: Major version (02) -00000006: Disk flags (16-bit) - Bit 0 Has surface description data (1 = yes, 0 = no) - This data indicates if the corresponding bit on the FM/MFM - encoded surface is a normal bit or a special bit (weak bit - or hole, depending on the other bit): - 0 = The corresponding FM/MFM encoded surface bit is normal - 1 = The corresponding FM/MFM encoded surface bit is either - a weak bit or a hole: - Corresponding FM/MFM encoded bit is 0: - Hole (noise on read, not overwritable) - Corresponding FM/MFM encoded bit is 1: - Weak bit (noise on read, overwritable) - Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) - Bit 3 Sides (1 = 2 sides, 0 = 1 side) - Bit 4 Write protect (1 = yes, 0 = no) - Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) - Bit 7 Bitcell mode (1 = Extra bitcells count specified after - disk flags, 0 = No extra bitcells) - The maximum number of extra bitcells is 1024 (which - after decoding translates to 64 bytes) - Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) - Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, - 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) - Ignore if disk type is 0 (fixed RPM) - Bit 11 Data and surface bits are stored in reverse byte endianness - Bit 12 If set: - If bits 6, 5 are not 0, they specify % of speedup instead - of slowdown; - If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count - specifies the entire bitcell count - For converting other stuff to 86F, I recommend to set this bit - and bit 7 and clear bits 6 and 5, - and just specify the entire bitcell count. -00000008: Offsets of tracks - Note that thick-track (eg. 360k) disks will have (tracks * 2) tracks, with each - pair of tracks being identical to each other. - Each side of each track is stored as its own track, in order (so, track 0 side 0, - track 0 side 1, track 1 side 0, track 1 side 0, etc.). - -Track offset + 00000000: Track flags (16-bit) - Bits 7, 6, 5 RPM: - 000 = 300 rpm - 001 = 360 rpm - Bits 4, 3 Encoding: - 00 = FM - 01 = MFM - 10 = M2FM - 11 = GCR - Bits 2, 1, 0 Bit rate, if encoding is MFM: - 000 = 500 kbps - 001 = 300 kbps - 010 = 250 kbps - 011 = 1000 kbps - 101 = 2000 kbps - If encoding is FM, the bit rate is half that. -If the bitcell count is present: - Track offset + 00000002: Extra (or total, depending on disk flags) bit cells count (32-bit) - If this specifies extra bit cells rather than total, it is a signed - integer, and when negative, makes the track smaller. - Track offset + 00000006: Bit cell where index hole is (32-bit) - Track offset + 0000000A: FM/MFM/M2FM/GCR-encoded data (track length bytes) - Track offset + 0000000A + track length: Surface description data if present (track length bytes) -Else: - Track offset + 00000002: Bit cell where index hole is (32-bit) - Track offset + 00000006: FM/MFM/M2FM/GCR-encoded data (track length bytes) - Track offset + 00000006 + track length: Surface description data if present (track length bytes) - -Track lengths if the bitcell count is not present or it does not represent total bit cells: - Hole 0 (DD) or 1 (HD): - 2.0% RPM slowdown: 12750 words - 1.5% RPM slowdown: 12687 words - 1.0% RPM slowdown: 12625 words - 0.0% RPM slowdown/speedup: 12500 words - 1.0% RPM speedup : 12376 words - 1.5% RPM speedup : 12315 words - 2.0% RPM speedup : 12254 words - Hole 2 (ED): - 2.0% RPM slowdown: 25250 words - 1.5% RPM slowdown: 25375 words - 1.0% RPM slowdown: 25250 words - 0.0% RPM slowdown/speedup: 25000 words - 1.0% RPM speedup : 24752 words - 1.5% RPM speedup : 24630 words - 2.0% RPM speedup : 24509 words - Hole 3 (ED + 2000 kbps): - 2.0% RPM slowdown: 51000 words - 1.5% RPM slowdown: 50750 words - 1.0% RPM slowdown: 50500 words - 0.0% RPM slowdown/speedup: 50000 words - 1.0% RPM speedup : 49504 words - 1.5% RPM speedup : 49261 words - 2.0% RPM speedup : 49019 words - 1 word = 2 bytes (so 16 bits) - If extra bit cells count is present and it indicates extra bit cells count: - Track length = (Track length << 4) + Extra bitcells count - If (Track length & 15) - Track length + (Track length >> 4) + 1 - Else - Track length + (Track length >> 4) - If extra bit cells count is present and it indicates total bit cells count, - then the total bit cells count become the track length, padded upwards to the - nearest word in the file. + + 00000000: Magic 4 bytes ("86BF") + 00000004: Minor version (0C) + 00000005: Major version (02) + 00000006: Disk flags (16-bit) + Bit 0 Has surface description data (1 = yes, 0 = no) + This data indicates if the corresponding bit on the FM/MFM + encoded surface is a normal bit or a special bit (weak bit + or hole, depending on the other bit): + 0 = The corresponding FM/MFM encoded surface bit is normal + 1 = The corresponding FM/MFM encoded surface bit is either + a weak bit or a hole: + Corresponding FM/MFM encoded bit is 0: + Hole (noise on read, not overwritable) + Corresponding FM/MFM encoded bit is 1: + Weak bit (noise on read, overwritable) + Bits 2, 1 Hole (3 = ED + 2000 kbps, 2 = ED, 1 = HD, 0 = DD) + Bit 3 Sides (1 = 2 sides, 0 = 1 side) + Bit 4 Write protect (1 = yes, 0 = no) + Bits 6, 5 RPM slowdown (3 = 2%, 2 = 1.5%, 1 = 1%, 0 = 0%) + Bit 7 Bitcell mode (1 = Extra bitcells count specified after + disk flags, 0 = No extra bitcells) + The maximum number of extra bitcells is 1024 (which + after decoding translates to 64 bytes) + Bit 8 Disk type (1 = Zoned, 0 = Fixed RPM) + Bits 10, 9 Zone type (3 = Commodore 64 zoned, 2 = Apple zoned, + 1 = Pre-Apple zoned #2, 0 = Pre-Apple zoned #1) + Ignore if disk type is 0 (fixed RPM) + Bit 11 Data and surface bits are stored in reverse byte endianness + Bit 12 If set: + If bits 6, 5 are not 0, they specify % of speedup instead + of slowdown; + If bits 6, 5 are 0, and bit 7 is 1, the extra bitcell count + specifies the entire bitcell count + For converting other stuff to 86F, I recommend to set this bit + and bit 7 and clear bits 6 and 5, + and just specify the entire bitcell count. + 00000008: Offsets of tracks + Note that thick-track (eg. 360k) disks will have (tracks * 2) tracks, with each + pair of tracks being identical to each other. + Each side of each track is stored as its own track, in order (so, track 0 side 0, + track 0 side 1, track 1 side 0, track 1 side 0, etc.). + + Track offset + 00000000: Track flags (16-bit) + Bits 7, 6, 5 RPM: + 000 = 300 rpm + 001 = 360 rpm + Bits 4, 3 Encoding: + 00 = FM + 01 = MFM + 10 = M2FM + 11 = GCR + Bits 2, 1, 0 Bit rate, if encoding is MFM: + 000 = 500 kbps + 001 = 300 kbps + 010 = 250 kbps + 011 = 1000 kbps + 101 = 2000 kbps + If encoding is FM, the bit rate is half that. + If the bitcell count is present: + Track offset + 00000002: Extra (or total, depending on disk flags) bit cells count (32-bit) + If this specifies extra bit cells rather than total, it is a signed + integer, and when negative, makes the track smaller. + Track offset + 00000006: Bit cell where index hole is (32-bit) + Track offset + 0000000A: FM/MFM/M2FM/GCR-encoded data (track length bytes) + Track offset + 0000000A + track length: Surface description data if present (track length bytes) + Else: + Track offset + 00000002: Bit cell where index hole is (32-bit) + Track offset + 00000006: FM/MFM/M2FM/GCR-encoded data (track length bytes) + Track offset + 00000006 + track length: Surface description data if present (track length bytes) + + Track lengths if the bitcell count is not present or it does not represent total bit cells: + Hole 0 (DD) or 1 (HD): + 2.0% RPM slowdown: 12750 words + 1.5% RPM slowdown: 12687 words + 1.0% RPM slowdown: 12625 words + 0.0% RPM slowdown/speedup: 12500 words + 1.0% RPM speedup : 12376 words + 1.5% RPM speedup : 12315 words + 2.0% RPM speedup : 12254 words + Hole 2 (ED): + 2.0% RPM slowdown: 25250 words + 1.5% RPM slowdown: 25375 words + 1.0% RPM slowdown: 25250 words + 0.0% RPM slowdown/speedup: 25000 words + 1.0% RPM speedup : 24752 words + 1.5% RPM speedup : 24630 words + 2.0% RPM speedup : 24509 words + Hole 3 (ED + 2000 kbps): + 2.0% RPM slowdown: 51000 words + 1.5% RPM slowdown: 50750 words + 1.0% RPM slowdown: 50500 words + 0.0% RPM slowdown/speedup: 50000 words + 1.0% RPM speedup : 49504 words + 1.5% RPM speedup : 49261 words + 2.0% RPM speedup : 49019 words + 1 word = 2 bytes (so 16 bits) + If extra bit cells count is present and it indicates extra bit cells count: + Track length = (Track length << 4) + Extra bitcells count + If (Track length & 15) + Track length + (Track length >> 4) + 1 + Else + Track length + (Track length >> 4) + If extra bit cells count is present and it indicates total bit cells count, + then the total bit cells count become the track length, padded upwards to the + nearest word in the file. + \ No newline at end of file