mirror of
https://github.com/86Box/docs.git
synced 2026-02-22 01:25:34 -07:00
Fix 86F spec formatting
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user