From bb230590606559ab4f0ff4fd97dfc78914121db7 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Mon, 18 Jul 2022 16:15:29 -0300 Subject: [PATCH 01/41] Move debug builds (v3.5) --- dev/builds.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/builds.rst b/dev/builds.rst index 2058e61..df9498a 100644 --- a/dev/builds.rst +++ b/dev/builds.rst @@ -18,13 +18,13 @@ Variants * x64 (64-bit) allows for emulating more than 2 GB of RAM on some later machines and using larger soundfonts with FluidSynth, at a slight performance loss. -* The regular variant (**86Box**) is recommended; it is compiled with the ``--preset=regular`` CMake flag, enabling the default feature set. +* On **Linux**, select the correct architecture for your system, as most distributions lack x64-to-x86 and ARM64-to-ARM32 backwards compatibility by default. - * Release versions of 86Box are based on this variant. +* On **macOS**, **Universal** supports both Intel and Apple Silicon Macs. -* The debug variant (**86Box-Debug**) is compiled with the ``--preset=debug`` CMake flag, which provides debug symbols and no optimizations, to allow for debugging with ``gdb`` and other tools. + * The New Recompiler is always used on Apple Silicon due to its ARM architecture, even if the Old Recompiler is selected. - * This variant runs slower than the standard one due to the removal of optimizations and addition of debugging features. +.. note:: Debug variants have been moved to a `special page on the 86Box website `_ as of July 18th 2022 due to constant misuse. Discontinued variants ^^^^^^^^^^^^^^^^^^^^^ From 9cb5e85fb0613365c9dd627394b3caae1fa3d7dd Mon Sep 17 00:00:00 2001 From: richardg867 Date: Mon, 18 Jul 2022 21:14:07 -0300 Subject: [PATCH 02/41] Update builds.rst --- dev/builds.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/builds.rst b/dev/builds.rst index df9498a..1114aca 100644 --- a/dev/builds.rst +++ b/dev/builds.rst @@ -24,7 +24,7 @@ Variants * The New Recompiler is always used on Apple Silicon due to its ARM architecture, even if the Old Recompiler is selected. -.. note:: Debug variants have been moved to a `special page on the 86Box website `_ as of July 18th 2022 due to constant misuse. +.. note:: Debug variants have been moved to a `special page on the 86Box website `_ as of July 18th 2022. Discontinued variants ^^^^^^^^^^^^^^^^^^^^^ From e149f31ed51b6d56a0ece37cdc8fee334ea2edb1 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sat, 15 Oct 2022 23:09:40 -0300 Subject: [PATCH 03/41] HiDPI scaling off-by-one notice on v3.5 --- usage/menubar.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/usage/menubar.rst b/usage/menubar.rst index c97530f..299295a 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -45,6 +45,9 @@ View * **Window scale factor:** scale the emulated display to half (*0.5x*), normal (*1x*), 50% larger (*1.5x*) or double (*2x*) sizes. * **Filter method:** select the filtering method (*Nearest* or *Linear*) to be used when scaling the emulated display. * **HiDPI scaling:** automatically scale the emulated display to real size if your host system has a HiDPI display. This option can be used alongside *Window scale factor* above. + +.. note:: If HiDPI scaling is disabled on a host with a HiDPI display, the emulated display's size may be off by one pixel due to an integer scaling limitation. + * **Fullscreen:** enter full screen mode. Press *Ctrl+Alt+Page Down* to go back to windowed mode. You can also enter full screen mode by pressing *Ctrl+Alt+Page Up*. * **Fullscreen stretch mode:** select the picture mode to use when in full screen mode. From e96274a23dd0b408925d622b59923a9bcc8c3f51 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sat, 15 Oct 2022 23:10:00 -0300 Subject: [PATCH 04/41] HiDPI scaling off-by-one notice on v3.4 --- usage/menubar.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/usage/menubar.rst b/usage/menubar.rst index 8d67a13..9386f2b 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -45,6 +45,9 @@ View * **Window scale factor:** scale the emulated display to half (*0.5x*), normal (*1x*), 50% larger (*1.5x*) or double (*2x*) sizes. * **Filter method:** select the filtering method (*Nearest* or *Linear*) to be used when scaling the emulated display. * **HiDPI scaling:** automatically scale the emulated display to real size if your host system has a HiDPI display. This option can be used alongside *Window scale factor* above. + +.. note:: If HiDPI scaling is disabled on a host with a HiDPI display, the emulated display's size may be off by one pixel due to an integer scaling limitation. + * **Fullscreen:** enter full screen mode. Press *Ctrl+Alt+Page Down* to go back to windowed mode. You can also enter full screen mode by pressing *Ctrl+Alt+Page Up*. * **Fullscreen stretch mode:** select the picture mode to use when in full screen mode. From 214d00489b4bd4bbeb57716682b15387d4c0ccef Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sat, 15 Oct 2022 23:10:24 -0300 Subject: [PATCH 05/41] HiDPI scaling off-by-one notice on v3.3 --- usage/menubar.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/usage/menubar.rst b/usage/menubar.rst index 7c74c01..3252889 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -45,6 +45,9 @@ View * **Window scale factor:** scale the emulated display to half (*0.5x*), normal (*1x*), 50% larger (*1.5x*) or double (*2x*) sizes. * **Filter method:** select the filtering method (*Nearest* or *Linear*) to be used when scaling the emulated display. * **HiDPI scaling:** automatically scale the emulated display to real size if your host system has a HiDPI display. This option can be used alongside *Window scale factor* above. + +.. note:: If HiDPI scaling is disabled on a host with a HiDPI display, the emulated display's size may be off by one pixel due to an integer scaling limitation. + * **Fullscreen:** enter full screen mode. Press *Ctrl+Alt+Page Down* to go back to windowed mode. You can also enter full screen mode by pressing *Ctrl+Alt+Page Up*. * **Fullscreen stretch mode:** select the picture mode to use when in full screen mode. From 7c489ecf320e10a7ce91326d59b2a3381394e1db Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sun, 16 Oct 2022 00:48:27 -0300 Subject: [PATCH 06/41] LPT4 fix for v3.5 --- settings/ports.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/ports.rst b/settings/ports.rst index d36a978..7794f49 100644 --- a/settings/ports.rst +++ b/settings/ports.rst @@ -45,6 +45,6 @@ Enable emulation of serial ports ranging from COM1 to COM4. Any ports not provid Parallel port 1-4 ----------------- -Enable emulation of parallel ports ranging from LPT1 to LPT3. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. +Enable emulation of parallel ports ranging from LPT1 to LPT4. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. -.. note:: The 4th parallel port is not widely supported. It is located at I/O port 268h. +.. note:: The 4th parallel port is not widely supported. It is located at I/O port `0x268`. From 8ea26e1dabf11338ac974611cb07b789ac1350c3 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sun, 16 Oct 2022 00:48:44 -0300 Subject: [PATCH 07/41] LPT4 fix for v3.4 --- settings/ports.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/ports.rst b/settings/ports.rst index d36a978..7794f49 100644 --- a/settings/ports.rst +++ b/settings/ports.rst @@ -45,6 +45,6 @@ Enable emulation of serial ports ranging from COM1 to COM4. Any ports not provid Parallel port 1-4 ----------------- -Enable emulation of parallel ports ranging from LPT1 to LPT3. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. +Enable emulation of parallel ports ranging from LPT1 to LPT4. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. -.. note:: The 4th parallel port is not widely supported. It is located at I/O port 268h. +.. note:: The 4th parallel port is not widely supported. It is located at I/O port `0x268`. From 6dc8eb065bff81a9391f25f33773861a33549843 Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sun, 16 Oct 2022 00:49:04 -0300 Subject: [PATCH 08/41] LPT4 fix for v3.3 --- settings/ports.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/ports.rst b/settings/ports.rst index 6fcd3b2..40f885f 100644 --- a/settings/ports.rst +++ b/settings/ports.rst @@ -45,6 +45,6 @@ Enable emulation of serial ports ranging from COM1 to COM4. Any ports not provid Parallel port 1-4 ----------------- -Enable emulation of parallel ports ranging from LPT1 to LPT3. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. +Enable emulation of parallel ports ranging from LPT1 to LPT4. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. -.. note:: The 4th parallel port is not widely supported. It is located at I/O port 268h. +.. note:: The 4th parallel port is not widely supported. It is located at I/O port `0x268`. From 824ec353a6c25c877ba23972fbc3c66bd4a501bd Mon Sep 17 00:00:00 2001 From: richardg867 Date: Sun, 16 Oct 2022 00:49:23 -0300 Subject: [PATCH 09/41] LPT4 fix for v3.2 --- settings/ports.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings/ports.rst b/settings/ports.rst index 6fcd3b2..40f885f 100644 --- a/settings/ports.rst +++ b/settings/ports.rst @@ -45,6 +45,6 @@ Enable emulation of serial ports ranging from COM1 to COM4. Any ports not provid Parallel port 1-4 ----------------- -Enable emulation of parallel ports ranging from LPT1 to LPT3. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. +Enable emulation of parallel ports ranging from LPT1 to LPT4. Any ports not provided by the machine's motherboard will be emulated as generic ISA or VLB parallel cards. -.. note:: The 4th parallel port is not widely supported. It is located at I/O port 268h. +.. note:: The 4th parallel port is not widely supported. It is located at I/O port `0x268`. From 6a6b5828d9cb8f696b73c64e9cea49f7dfdce303 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 16 Apr 2023 15:20:22 -0300 Subject: [PATCH 10/41] Correct renderer names for v3.5 --- usage/menubar.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usage/menubar.rst b/usage/menubar.rst index 299295a..5490e4d 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -25,8 +25,8 @@ View * **Remember size & position:** automatically save the size and position of the 86Box window to the emulated machine's configuration file. * **Renderer:** select a graphical renderer for the emulated display. - * **SDL (Hardware)** is recommended in most cases. - * **SDL (Software)**, **SDL (OpenGL)** and **Vulkan** are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. + * **Qt (Software)** is recommended in most cases. + * **Qt (OpenGL)** and **Vulkan** are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. *Vulkan* may not be available if the host GPU is not Vulkan-capable. * **OpenGL (3.0 Core)** allows for shader effects to be applied to the emulated display, however, it is not compatible with older integrated GPUs. * **Renderer options:** open a window to configure the *OpenGL (3.0 Core)* renderer. This option will be available if that renderer is selected. From 222fc7f16a05419690acefc8f3bfd27b2a09a881 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 16 Apr 2023 15:21:53 -0300 Subject: [PATCH 11/41] Correct renderer names for v3.4 --- usage/menubar.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usage/menubar.rst b/usage/menubar.rst index 9386f2b..4a4b188 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -25,8 +25,8 @@ View * **Remember size & position:** automatically save the size and position of the 86Box window to the emulated machine's configuration file. * **Renderer:** select a graphical renderer for the emulated display. - * **SDL (Hardware)** is recommended in most cases. - * **SDL (Software)** and **SDL (OpenGL)** are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. + * **Qt (Software)** is recommended in most cases. + * **Qt (OpenGL)** is known to perform better on some host systems. Try it if your system is struggling to maintain 100% emulation speed. * **OpenGL (3.0 Core)** allows for shader effects to be applied to the emulated display, however, it is not compatible with older integrated GPUs. * **Renderer options:** open a window to configure the *OpenGL (3.0 Core)* renderer. This option will be available if that renderer is selected. From 935fc182d5373629e8eba0d9b0378d00b77d47d1 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 16 Apr 2023 15:22:55 -0300 Subject: [PATCH 12/41] Correct renderer names for v3.3 --- usage/menubar.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usage/menubar.rst b/usage/menubar.rst index 3252889..1196292 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -25,8 +25,8 @@ View * **Remember size & position:** automatically save the size and position of the 86Box window to the emulated machine's configuration file. * **Renderer:** select a graphical renderer for the emulated display. - * **SDL (Hardware)** is recommended in most cases. - * **SDL (Software)** and **SDL (OpenGL)** are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. + * **Qt (Software)** is recommended in most cases. + * **Qt (OpenGL)** is known to perform better on some host systems. Try it if your system is struggling to maintain 100% emulation speed. * **OpenGL (3.0 Core)** allows for shader effects to be applied to the emulated display, however, it is not compatible with older integrated GPUs. * **Renderer options:** open a window to configure the *OpenGL (3.0 Core)* renderer. This option will be available if that renderer is selected. From 0c1950119695733738de5184ec6f3a096b81f7b7 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 16 Apr 2023 15:26:35 -0300 Subject: [PATCH 13/41] Correct renderer names for v3.2, I'm going this far back! --- usage/menubar.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usage/menubar.rst b/usage/menubar.rst index 5702325..5db8612 100644 --- a/usage/menubar.rst +++ b/usage/menubar.rst @@ -25,8 +25,8 @@ View * **Remember size & position:** automatically save the size and position of the 86Box window to the emulated machine's configuration file. * **Renderer:** select a graphical renderer for the emulated display. - * **SDL (Hardware)** is recommended in most cases. - * **SDL (Software)** and **SDL (OpenGL)** are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. + * **SDL (Hardware)** (on Windows) or **Qt (Software)** (on Linux) is recommended in most cases. + * **SDL (Software)**, **SDL (OpenGL)** (both Windows only) and **Qt (OpenGL)** (Linux only) are known to perform better on some host systems. Try these if your system is struggling to maintain 100% emulation speed. * **OpenGL (3.0 Core)** allows for shader effects to be applied to the emulated display, however, it is not compatible with older integrated GPUs. .. note:: The **OpenGL (3.0 Core)** renderer and its shader support are not available on Linux in this release. From 8bb0621312dded50c85c6ae40804b0631ac1ac03 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 11 Oct 2024 16:21:06 -0300 Subject: [PATCH 14/41] Replace 86F spec with v2.12 --- dev/formats/86f.rst | 168 ++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index 024358b..fd0eb72 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -3,69 +3,115 @@ A floppy disk surface image format which stores data in FM- or MFM-encoded transitions. -Preliminary specification for v2.20 ------------------------------------ +Specification for v2.12 +----------------------- -All offsets are in hexadecimal. This specification is subject to change before its final release. +All offsets are in hexadecimal. .. code-block:: none - 00000000: Magic 4 bytes ("86BF") - 00000004: Minor version (0x14) - 00000005: Major version (0x02) - 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) - Bit 5 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 6 Revolutions (0 = one revolution, 1 track has 16-bit number of revolutions) - 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.). - The table of the offsets of tracks is 2048 bytes long, each track offset is an unigned 32-bit - integer. An offset of 00000000 indicates the track is not present in the file. - As an example, an 86F representing a disk with 80 thin tracks and 2 sides per track, where all - the tracks are present in the file, would have the first 160 offsets filled in, same for a disk - with 40 thick tracks and 2 sides. Same with only 1 side but only the offsets at 0000000, 0000008, - etc. (so every second offset) would be filled in. - - Track offset + 00000000: Track flags (16-bit) - 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. - The RPM is determined from track length and data rate. - Track offset + 00000002: Total bit cells count (32-bit) - 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) +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.). - If this is a multi-revolution 86F, then track offset + 00000000 has a 16-bit number of track revolutions, - and the track header + data appears for each revolution, while surface description data, if present, - can appear any number of times, but only once per encoding + bit rate combination. - This needs work to properly make surface data work with flexible multi-revolution support. - - Track lengths: - The total bit cells count is always present. - The track is stored as (bit cells >> 8) bytes, with one extra bit cells if the number of bit cells - is not divisible by 8. +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. From 111e3ac37e61a1d30863de0892e17acabb89fe42 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 11 Oct 2024 16:21:06 -0300 Subject: [PATCH 15/41] Replace 86F spec with v2.12 --- dev/formats/86f.rst | 168 ++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index 024358b..fd0eb72 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -3,69 +3,115 @@ A floppy disk surface image format which stores data in FM- or MFM-encoded transitions. -Preliminary specification for v2.20 ------------------------------------ +Specification for v2.12 +----------------------- -All offsets are in hexadecimal. This specification is subject to change before its final release. +All offsets are in hexadecimal. .. code-block:: none - 00000000: Magic 4 bytes ("86BF") - 00000004: Minor version (0x14) - 00000005: Major version (0x02) - 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) - Bit 5 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 6 Revolutions (0 = one revolution, 1 track has 16-bit number of revolutions) - 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.). - The table of the offsets of tracks is 2048 bytes long, each track offset is an unigned 32-bit - integer. An offset of 00000000 indicates the track is not present in the file. - As an example, an 86F representing a disk with 80 thin tracks and 2 sides per track, where all - the tracks are present in the file, would have the first 160 offsets filled in, same for a disk - with 40 thick tracks and 2 sides. Same with only 1 side but only the offsets at 0000000, 0000008, - etc. (so every second offset) would be filled in. - - Track offset + 00000000: Track flags (16-bit) - 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. - The RPM is determined from track length and data rate. - Track offset + 00000002: Total bit cells count (32-bit) - 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) +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.). - If this is a multi-revolution 86F, then track offset + 00000000 has a 16-bit number of track revolutions, - and the track header + data appears for each revolution, while surface description data, if present, - can appear any number of times, but only once per encoding + bit rate combination. - This needs work to properly make surface data work with flexible multi-revolution support. - - Track lengths: - The total bit cells count is always present. - The track is stored as (bit cells >> 8) bytes, with one extra bit cells if the number of bit cells - is not divisible by 8. +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. From 499319b80bdb6e51a80c5c1b4020e87dd116ab1b Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 11 Oct 2024 16:21:06 -0300 Subject: [PATCH 16/41] Replace 86F spec with v2.12 --- dev/formats/86f.rst | 168 ++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index 024358b..fd0eb72 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -3,69 +3,115 @@ A floppy disk surface image format which stores data in FM- or MFM-encoded transitions. -Preliminary specification for v2.20 ------------------------------------ +Specification for v2.12 +----------------------- -All offsets are in hexadecimal. This specification is subject to change before its final release. +All offsets are in hexadecimal. .. code-block:: none - 00000000: Magic 4 bytes ("86BF") - 00000004: Minor version (0x14) - 00000005: Major version (0x02) - 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) - Bit 5 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 6 Revolutions (0 = one revolution, 1 track has 16-bit number of revolutions) - 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.). - The table of the offsets of tracks is 2048 bytes long, each track offset is an unigned 32-bit - integer. An offset of 00000000 indicates the track is not present in the file. - As an example, an 86F representing a disk with 80 thin tracks and 2 sides per track, where all - the tracks are present in the file, would have the first 160 offsets filled in, same for a disk - with 40 thick tracks and 2 sides. Same with only 1 side but only the offsets at 0000000, 0000008, - etc. (so every second offset) would be filled in. - - Track offset + 00000000: Track flags (16-bit) - 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. - The RPM is determined from track length and data rate. - Track offset + 00000002: Total bit cells count (32-bit) - 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) +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.). - If this is a multi-revolution 86F, then track offset + 00000000 has a 16-bit number of track revolutions, - and the track header + data appears for each revolution, while surface description data, if present, - can appear any number of times, but only once per encoding + bit rate combination. - This needs work to properly make surface data work with flexible multi-revolution support. - - Track lengths: - The total bit cells count is always present. - The track is stored as (bit cells >> 8) bytes, with one extra bit cells if the number of bit cells - is not divisible by 8. +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. From ede5dbb0f82913b6fc955c1806033f3c9f266e62 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 11 Oct 2024 16:21:06 -0300 Subject: [PATCH 17/41] Replace 86F spec with v2.12 --- dev/formats/86f.rst | 168 ++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index 024358b..fd0eb72 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -3,69 +3,115 @@ A floppy disk surface image format which stores data in FM- or MFM-encoded transitions. -Preliminary specification for v2.20 ------------------------------------ +Specification for v2.12 +----------------------- -All offsets are in hexadecimal. This specification is subject to change before its final release. +All offsets are in hexadecimal. .. code-block:: none - 00000000: Magic 4 bytes ("86BF") - 00000004: Minor version (0x14) - 00000005: Major version (0x02) - 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) - Bit 5 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 6 Revolutions (0 = one revolution, 1 track has 16-bit number of revolutions) - 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.). - The table of the offsets of tracks is 2048 bytes long, each track offset is an unigned 32-bit - integer. An offset of 00000000 indicates the track is not present in the file. - As an example, an 86F representing a disk with 80 thin tracks and 2 sides per track, where all - the tracks are present in the file, would have the first 160 offsets filled in, same for a disk - with 40 thick tracks and 2 sides. Same with only 1 side but only the offsets at 0000000, 0000008, - etc. (so every second offset) would be filled in. - - Track offset + 00000000: Track flags (16-bit) - 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. - The RPM is determined from track length and data rate. - Track offset + 00000002: Total bit cells count (32-bit) - 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) +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.). - If this is a multi-revolution 86F, then track offset + 00000000 has a 16-bit number of track revolutions, - and the track header + data appears for each revolution, while surface description data, if present, - can appear any number of times, but only once per encoding + bit rate combination. - This needs work to properly make surface data work with flexible multi-revolution support. - - Track lengths: - The total bit cells count is always present. - The track is stored as (bit cells >> 8) bytes, with one extra bit cells if the number of bit cells - is not divisible by 8. +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. From 165afea45e06f5b412ac9e52115c66117abfbb25 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 11 Oct 2024 16:21:06 -0300 Subject: [PATCH 18/41] Replace 86F spec with v2.12 --- dev/formats/86f.rst | 168 ++++++++++++++++++++++++++++---------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/dev/formats/86f.rst b/dev/formats/86f.rst index 024358b..fd0eb72 100644 --- a/dev/formats/86f.rst +++ b/dev/formats/86f.rst @@ -3,69 +3,115 @@ A floppy disk surface image format which stores data in FM- or MFM-encoded transitions. -Preliminary specification for v2.20 ------------------------------------ +Specification for v2.12 +----------------------- -All offsets are in hexadecimal. This specification is subject to change before its final release. +All offsets are in hexadecimal. .. code-block:: none - 00000000: Magic 4 bytes ("86BF") - 00000004: Minor version (0x14) - 00000005: Major version (0x02) - 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) - Bit 5 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 6 Revolutions (0 = one revolution, 1 track has 16-bit number of revolutions) - 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.). - The table of the offsets of tracks is 2048 bytes long, each track offset is an unigned 32-bit - integer. An offset of 00000000 indicates the track is not present in the file. - As an example, an 86F representing a disk with 80 thin tracks and 2 sides per track, where all - the tracks are present in the file, would have the first 160 offsets filled in, same for a disk - with 40 thick tracks and 2 sides. Same with only 1 side but only the offsets at 0000000, 0000008, - etc. (so every second offset) would be filled in. - - Track offset + 00000000: Track flags (16-bit) - 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. - The RPM is determined from track length and data rate. - Track offset + 00000002: Total bit cells count (32-bit) - 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) +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.). - If this is a multi-revolution 86F, then track offset + 00000000 has a 16-bit number of track revolutions, - and the track header + data appears for each revolution, while surface description data, if present, - can appear any number of times, but only once per encoding + bit rate combination. - This needs work to properly make surface data work with flexible multi-revolution support. - - Track lengths: - The total bit cells count is always present. - The track is stored as (bit cells >> 8) bytes, with one extra bit cells if the number of bit cells - is not divisible by 8. +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. From 6385ec6a44495ab97c93fc6de774721cce16d2ec Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Dec 2024 19:28:33 -0300 Subject: [PATCH 19/41] Fix inaccurate residfp credit --- settings/sound.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/sound.rst b/settings/sound.rst index b8cee23..d4b9ce2 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -50,7 +50,7 @@ Innovation SSI-2001 Emulate the **Innovation SSI-2001** ISA sound card, based on the MOS Technology 6581 chip (commonly known as the Commodore SID) and supported by a limited number of games. -SID emulation is provided by the `reSID `_ library. +SID emulation is provided by the reSIDfp component of the `libsidplayfp `_ library. CMS / Game Blaster ------------------ From 5f5cf6087bc9668f0c6bcb7a33eebcd4ab6e02da Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Dec 2024 19:28:50 -0300 Subject: [PATCH 20/41] Fix inaccurate residfp credit --- settings/sound.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/sound.rst b/settings/sound.rst index 844789c..630a7e3 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -50,7 +50,7 @@ Innovation SSI-2001 Emulate the **Innovation SSI-2001** ISA sound card, based on the MOS Technology 6581 chip (commonly known as the Commodore SID) and supported by a limited number of games. -SID emulation is provided by the `reSID `_ library. +SID emulation is provided by the reSIDfp component of the `libsidplayfp `_ library. CMS / Game Blaster ------------------ From ddb3826c3436ef51200bdd2318bbffee93b3493c Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Dec 2024 19:29:01 -0300 Subject: [PATCH 21/41] Fix inaccurate residfp credit --- settings/sound.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/sound.rst b/settings/sound.rst index 066069c..0cadcca 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -50,7 +50,7 @@ Innovation SSI-2001 Emulate the **Innovation SSI-2001** ISA sound card, based on the MOS Technology 6581 chip (commonly known as the Commodore SID) and supported by a limited number of games. -SID emulation is provided by the `reSID `_ library. +SID emulation is provided by the reSIDfp component of the `libsidplayfp `_ library. CMS / Game Blaster ------------------ From 919a24562c7fad65c4e4d9824931aa4846c58cf4 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Dec 2024 19:29:36 -0300 Subject: [PATCH 22/41] Fix inaccurate residfp credit --- settings/sound.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/sound.rst b/settings/sound.rst index 4caabc3..9a6cba4 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -50,7 +50,7 @@ Innovation SSI-2001 Emulate the **Innovation SSI-2001** ISA sound card, based on the MOS Technology 6581 chip (commonly known as the Commodore SID) and supported by a limited number of games. -SID emulation is provided by the `reSID `_ library. +SID emulation is provided by the reSIDfp component of the `libsidplayfp `_ library. CMS / Game Blaster ------------------ From b724dda5517aa8c1584b70178f84eb7c6d454d3d Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 15 Dec 2024 19:29:43 -0300 Subject: [PATCH 23/41] Fix inaccurate residfp credit --- settings/sound.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings/sound.rst b/settings/sound.rst index 4caabc3..9a6cba4 100644 --- a/settings/sound.rst +++ b/settings/sound.rst @@ -50,7 +50,7 @@ Innovation SSI-2001 Emulate the **Innovation SSI-2001** ISA sound card, based on the MOS Technology 6581 chip (commonly known as the Commodore SID) and supported by a limited number of games. -SID emulation is provided by the `reSID `_ library. +SID emulation is provided by the reSIDfp component of the `libsidplayfp `_ library. CMS / Game Blaster ------------------ From ec9a985aee85f0e4d27c3eb0a666cb76fcbdb517 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 30 Mar 2025 18:45:21 -0300 Subject: [PATCH 24/41] Add note about 3-button mouse release --- settings/input.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/input.rst b/settings/input.rst index 4c3bec2..28b018c 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -11,11 +11,15 @@ Mouse Emulate a pointing device. The following mouse types are supported: * **Bus mouse:** ISA expansion card with a mouse interface. The I/O port and IRQ used by the card are configurable. -* **Serial mouse:** connected to the serial port of your choosing. The selected serial port must be enabled on the :ref:`Ports tab `. +* **Serial mouse:** connected to the serial port of your choosing. * **PS/2 mouse:** connected to the PS/2 port. Only available on machines with a PS/2 mouse port. The *Configure* button opens a new window with settings specific to the selected mouse type, such as the number of buttons, or the serial port for a serial mouse. +.. note:: + * Serial pointing devices require the configured serial port to be enabled on the :ref:`Ports page `. + * The middle button cannot be used to release mouse capture when emulating a mouse with 3 or more buttons. + Joystick -------- From 2b71bee38965316d288dd6d27565ece083d44dfb Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 30 Mar 2025 18:46:48 -0300 Subject: [PATCH 25/41] Add note about 3-button mouse release --- settings/input.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/input.rst b/settings/input.rst index 2fcd136..d850568 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -11,11 +11,15 @@ Mouse Emulate a pointing device. The following mouse types are supported: * **Bus mouse:** ISA expansion card with a mouse interface. The I/O port and IRQ used by the card are configurable. -* **Serial mouse:** connected to the serial port of your choosing. The selected serial port must be enabled on the :ref:`Ports tab `. +* **Serial mouse:** connected to the serial port of your choosing. * **PS/2 mouse:** connected to the PS/2 port. Only available on machines with a PS/2 mouse port. The *Configure* button opens a new window with settings specific to the selected mouse type, such as the number of buttons, or the serial port for a serial mouse. +.. note:: + * Serial pointing devices require the configured serial port to be enabled on the :ref:`Ports page `. + * The middle button cannot be used to release mouse capture when emulating a mouse with 3 or more buttons. + Joystick -------- From a1027f899eef25a4ba8ee6cdf19e34e599357f89 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 30 Mar 2025 18:47:07 -0300 Subject: [PATCH 26/41] Add note about 3-button mouse release --- settings/input.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/input.rst b/settings/input.rst index 2fcd136..d850568 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -11,11 +11,15 @@ Mouse Emulate a pointing device. The following mouse types are supported: * **Bus mouse:** ISA expansion card with a mouse interface. The I/O port and IRQ used by the card are configurable. -* **Serial mouse:** connected to the serial port of your choosing. The selected serial port must be enabled on the :ref:`Ports tab `. +* **Serial mouse:** connected to the serial port of your choosing. * **PS/2 mouse:** connected to the PS/2 port. Only available on machines with a PS/2 mouse port. The *Configure* button opens a new window with settings specific to the selected mouse type, such as the number of buttons, or the serial port for a serial mouse. +.. note:: + * Serial pointing devices require the configured serial port to be enabled on the :ref:`Ports page `. + * The middle button cannot be used to release mouse capture when emulating a mouse with 3 or more buttons. + Joystick -------- From 887ec88b5b0a0c39317921ed78648f1ff9021eb6 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 30 Mar 2025 18:45:03 -0300 Subject: [PATCH 27/41] Add note about 3-button mouse release --- settings/input.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/input.rst b/settings/input.rst index 436d299..aa53966 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -11,11 +11,15 @@ Mouse Emulate a pointing device. The following mouse types are supported: * **Bus mouse:** ISA expansion card with a mouse interface. The I/O port and IRQ used by the card are configurable. -* **Serial mouse:** connected to the serial port of your choosing. The selected serial port must be enabled on the :ref:`Ports tab `. +* **Serial mouse:** connected to the serial port of your choosing. * **PS/2 mouse:** connected to the PS/2 port. Only available on machines with a PS/2 mouse port. The *Configure* button opens a new window with settings specific to the selected mouse type, such as the number of buttons, or the serial port for a serial mouse. +.. note:: + * Serial pointing devices require the configured serial port to be enabled on the :ref:`Ports page `. + * The middle button cannot be used to release mouse capture when emulating a mouse with 3 or more buttons. + Joystick -------- From dbd978a4a4c0bc9c93b977f37e2e635e428dbd17 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 30 Mar 2025 18:44:40 -0300 Subject: [PATCH 28/41] Add note about 3-button mouse release --- settings/input.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/settings/input.rst b/settings/input.rst index 436d299..aa53966 100644 --- a/settings/input.rst +++ b/settings/input.rst @@ -11,11 +11,15 @@ Mouse Emulate a pointing device. The following mouse types are supported: * **Bus mouse:** ISA expansion card with a mouse interface. The I/O port and IRQ used by the card are configurable. -* **Serial mouse:** connected to the serial port of your choosing. The selected serial port must be enabled on the :ref:`Ports tab `. +* **Serial mouse:** connected to the serial port of your choosing. * **PS/2 mouse:** connected to the PS/2 port. Only available on machines with a PS/2 mouse port. The *Configure* button opens a new window with settings specific to the selected mouse type, such as the number of buttons, or the serial port for a serial mouse. +.. note:: + * Serial pointing devices require the configured serial port to be enabled on the :ref:`Ports page `. + * The middle button cannot be used to release mouse capture when emulating a mouse with 3 or more buttons. + Joystick -------- From 4e83cf9887be3ef0844f0e3f551aeaee249f469d Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:00:30 -0300 Subject: [PATCH 29/41] Backport environment updates from v4.3 --- .readthedocs.yaml | 10 +++++++++- conf.py | 4 ++-- requirements.txt | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a6bc2c2..aec4fdc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,15 @@ version: 2 -formats: all +build: + os: "ubuntu-24.04" + tools: + python: "3.13" python: install: - requirements: requirements.txt + +sphinx: + configuration: conf.py + +formats: all diff --git a/conf.py b/conf.py index f65b846..ebe4508 100644 --- a/conf.py +++ b/conf.py @@ -3,7 +3,7 @@ # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sphinx_rtd_theme +import sphinx_rtd_theme, time # -- Path setup -------------------------------------------------------------- @@ -19,7 +19,7 @@ import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = '86Box' -copyright = '2020-2022, 86Box Project' +copyright = f'2020-{time.strftime("%Y")}, 86Box Project' author = '86Box Project' diff --git a/requirements.txt b/requirements.txt index ef0c43d..d0d58e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==4.3.0 -sphinx-rtd-theme==1.0.0 -linuxdoc==20211220 +Sphinx==7.4.7 +sphinx-rtd-theme==3.0.2 +linuxdoc==20240924 From e1317dba8599e5170ae124c8be2727ff8952a632 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:00:42 -0300 Subject: [PATCH 30/41] Backport environment updates from v4.3 --- .readthedocs.yaml | 10 +++++++++- conf.py | 4 ++-- requirements.txt | 6 +++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a6bc2c2..aec4fdc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,15 @@ version: 2 -formats: all +build: + os: "ubuntu-24.04" + tools: + python: "3.13" python: install: - requirements: requirements.txt + +sphinx: + configuration: conf.py + +formats: all diff --git a/conf.py b/conf.py index f65b846..ebe4508 100644 --- a/conf.py +++ b/conf.py @@ -3,7 +3,7 @@ # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sphinx_rtd_theme +import sphinx_rtd_theme, time # -- Path setup -------------------------------------------------------------- @@ -19,7 +19,7 @@ import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = '86Box' -copyright = '2020-2022, 86Box Project' +copyright = f'2020-{time.strftime("%Y")}, 86Box Project' author = '86Box Project' diff --git a/requirements.txt b/requirements.txt index ef0c43d..d0d58e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==4.3.0 -sphinx-rtd-theme==1.0.0 -linuxdoc==20211220 +Sphinx==7.4.7 +sphinx-rtd-theme==3.0.2 +linuxdoc==20240924 From 7288a3b82c89790cad036b74c887b4a6df252f06 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:01:05 -0300 Subject: [PATCH 31/41] Backport environment updates from v4.3 --- .readthedocs.yaml | 10 +++++++++- conf.py | 4 ++-- requirements.txt | 5 +++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a6bc2c2..aec4fdc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,15 @@ version: 2 -formats: all +build: + os: "ubuntu-24.04" + tools: + python: "3.13" python: install: - requirements: requirements.txt + +sphinx: + configuration: conf.py + +formats: all diff --git a/conf.py b/conf.py index f628c57..865927a 100644 --- a/conf.py +++ b/conf.py @@ -3,7 +3,7 @@ # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sphinx_rtd_theme +import sphinx_rtd_theme, time # -- Path setup -------------------------------------------------------------- @@ -19,7 +19,7 @@ import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = '86Box' -copyright = '2020-2022, 86Box Project' +copyright = f'2020-{time.strftime("%Y")}, 86Box Project' author = '86Box Project' diff --git a/requirements.txt b/requirements.txt index e75e102..d0d58e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ -Sphinx==4.3.0 -sphinx-rtd-theme==1.0.0 +Sphinx==7.4.7 +sphinx-rtd-theme==3.0.2 +linuxdoc==20240924 From c80fbef82d2e4740d8d66c73f558096f29efe86e Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:01:23 -0300 Subject: [PATCH 32/41] Backport environment updates from v4.3 --- .readthedocs.yaml | 10 +++++++++- conf.py | 4 ++-- requirements.txt | 5 +++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a6bc2c2..aec4fdc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,15 @@ version: 2 -formats: all +build: + os: "ubuntu-24.04" + tools: + python: "3.13" python: install: - requirements: requirements.txt + +sphinx: + configuration: conf.py + +formats: all diff --git a/conf.py b/conf.py index f628c57..865927a 100644 --- a/conf.py +++ b/conf.py @@ -3,7 +3,7 @@ # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sphinx_rtd_theme +import sphinx_rtd_theme, time # -- Path setup -------------------------------------------------------------- @@ -19,7 +19,7 @@ import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = '86Box' -copyright = '2020-2022, 86Box Project' +copyright = f'2020-{time.strftime("%Y")}, 86Box Project' author = '86Box Project' diff --git a/requirements.txt b/requirements.txt index e75e102..d0d58e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ -Sphinx==4.3.0 -sphinx-rtd-theme==1.0.0 +Sphinx==7.4.7 +sphinx-rtd-theme==3.0.2 +linuxdoc==20240924 From 8a2580eb8529eb9b274b5c315a62ea20fd7fadbc Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:01:37 -0300 Subject: [PATCH 33/41] Backport environment updates from v4.3 --- .readthedocs.yaml | 10 +++++++++- conf.py | 4 ++-- requirements.txt | 5 +++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index a6bc2c2..aec4fdc 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,7 +1,15 @@ version: 2 -formats: all +build: + os: "ubuntu-24.04" + tools: + python: "3.13" python: install: - requirements: requirements.txt + +sphinx: + configuration: conf.py + +formats: all diff --git a/conf.py b/conf.py index f628c57..865927a 100644 --- a/conf.py +++ b/conf.py @@ -3,7 +3,7 @@ # This file only contains a selection of the most common options. For a full # list see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html -import sphinx_rtd_theme +import sphinx_rtd_theme, time # -- Path setup -------------------------------------------------------------- @@ -19,7 +19,7 @@ import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = '86Box' -copyright = '2020-2022, 86Box Project' +copyright = f'2020-{time.strftime("%Y")}, 86Box Project' author = '86Box Project' diff --git a/requirements.txt b/requirements.txt index e75e102..d0d58e7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ -Sphinx==4.3.0 -sphinx-rtd-theme==1.0.0 +Sphinx==7.4.7 +sphinx-rtd-theme==3.0.2 +linuxdoc==20240924 From ee0ff496e26285b35b8ede86d704f2e4acf02da5 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:57:47 -0300 Subject: [PATCH 34/41] Backport Sphinx 8 upgrade --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d0d58e7..47ed188 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==7.4.7 +Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 linuxdoc==20240924 From 4c274bf716b01ad608356532385804ce0c3d254d Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:57:56 -0300 Subject: [PATCH 35/41] Backport Sphinx 8 upgrade --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d0d58e7..47ed188 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==7.4.7 +Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 linuxdoc==20240924 From 2229e2c1af484fdadd46c8c4e8b8c4babc47a78b Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:58:01 -0300 Subject: [PATCH 36/41] Backport Sphinx 8 upgrade --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d0d58e7..47ed188 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==7.4.7 +Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 linuxdoc==20240924 From 9505fa594ca1c3fdcc9dfe906542b0620b44121d Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:58:06 -0300 Subject: [PATCH 37/41] Backport Sphinx 8 upgrade --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d0d58e7..47ed188 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==7.4.7 +Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 linuxdoc==20240924 From 8b43192090b69d72a87b53caafcf28e40fe3e5b5 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Sun, 13 Apr 2025 10:58:11 -0300 Subject: [PATCH 38/41] Backport Sphinx 8 upgrade --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index d0d58e7..47ed188 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -Sphinx==7.4.7 +Sphinx==8.2.3 sphinx-rtd-theme==3.0.2 linuxdoc==20240924 From 0ed0e63c228d13101e4051e66ba2016825ca92d2 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 16 Apr 2025 17:26:17 -0300 Subject: [PATCH 39/41] MT-32 display --- usage/statusbar.rst | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/usage/statusbar.rst b/usage/statusbar.rst index ffb9bc7..856e95f 100644 --- a/usage/statusbar.rst +++ b/usage/statusbar.rst @@ -86,6 +86,13 @@ Monitor sleep mode The *Monitor in sleep mode* message will be displayed if the emulated monitor has been put into DPMS sleep mode by the operating system. Pressing a key or moving the mouse is often enough to wake the monitor up. +MT-32 display +^^^^^^^^^^^^^ + +Any text messages sent to the LCD screen of an :ref:`emulated Roland MT-32/CM-32L synthesizer ` are displayed here. + +.. note:: MT-32 display functionality is currently only available on **Linux** hosts. + ISABugger ^^^^^^^^^ @@ -96,4 +103,4 @@ POST card The leftmost hexadecimal value is the most recent POST code reported, while the rightmost value is the second most recent code, like on a real dual-display POST card. A value of ``--`` indicates that no POST code has been reported yet. -.. note:: The additional information area can only be used by one component at a time. If both the ISABugger and the POST card are enabled simultaneously, the POST card takes over whenever a POST code is reported, and the ISABugger takes over whenever one of its registers is written to. The *Monitor in sleep mode* message is high-priority and will override all other components. +.. note:: The additional information area can only be used by one component at a time. The MT-32 display has the highest priority, followed by the monitor sleep mode message, then the ISABugger and POST card with the same priority (taking over whenever they're written to). From d6ff6959f71c7658995b9239d59db369baa9e942 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 16 Apr 2025 17:27:21 -0300 Subject: [PATCH 40/41] Status bar priority stuff from later versions --- usage/statusbar.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usage/statusbar.rst b/usage/statusbar.rst index ffb9bc7..cc567bf 100644 --- a/usage/statusbar.rst +++ b/usage/statusbar.rst @@ -96,4 +96,4 @@ POST card The leftmost hexadecimal value is the most recent POST code reported, while the rightmost value is the second most recent code, like on a real dual-display POST card. A value of ``--`` indicates that no POST code has been reported yet. -.. note:: The additional information area can only be used by one component at a time. If both the ISABugger and the POST card are enabled simultaneously, the POST card takes over whenever a POST code is reported, and the ISABugger takes over whenever one of its registers is written to. The *Monitor in sleep mode* message is high-priority and will override all other components. +.. note:: The additional information area can only be used by one component at a time. The monitor sleep mode message takes priority over the ISABugger and POST card, which have the same priority (taking over whenever they're written to). From a2e678d0328d3070a482078fed1c5a8d8e973571 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 16 Apr 2025 17:34:06 -0300 Subject: [PATCH 41/41] Remove Qt UI MT-32 notice --- usage/statusbar.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/usage/statusbar.rst b/usage/statusbar.rst index 856e95f..f545080 100644 --- a/usage/statusbar.rst +++ b/usage/statusbar.rst @@ -91,8 +91,6 @@ MT-32 display Any text messages sent to the LCD screen of an :ref:`emulated Roland MT-32/CM-32L synthesizer ` are displayed here. -.. note:: MT-32 display functionality is currently only available on **Linux** hosts. - ISABugger ^^^^^^^^^