mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	Fix bad documentation which got checked in somehow.
This commit is contained in:
		| @@ -1,2 +1,15 @@ | |||||||
| -d | 40track_drive | ||||||
| \r | ==== | ||||||
|  | ## Adjust configuration for a 40-track drive | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | This is an extension profile; adding this to the command line will configure | ||||||
|  | FluxEngine to read from 40-track, 48tpi 5.25" drives. You have to tell it because there is | ||||||
|  | no way to detect this automatically. | ||||||
|  |  | ||||||
|  | For example: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | fluxengine read ibm --180 40track_drive | ||||||
|  | ``` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,39 @@ | |||||||
| -d | acornadfs | ||||||
| \r | ==== | ||||||
|  | ## BBC Micro, Archimedes | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Acorn ADFS disks are used by the 6502-based BBC Micro and ARM-based Archimedes | ||||||
|  | series of computers. They are yet another variation on MFM encoded IBM scheme | ||||||
|  | disks, although with different sector sizes and with the 0-based sector | ||||||
|  | identifiers rather than 1-based sector identifiers. The index hole is ignored | ||||||
|  | and sectors are written whereever, requiring FluxEngine to do two revolutions | ||||||
|  | to read a disk. | ||||||
|  |  | ||||||
|  | There are various different kinds, which should all work out of the box. | ||||||
|  |  | ||||||
|  | Be aware that Acorn logical block numbering goes all the way up side 0 and | ||||||
|  | then all the way up side 1. However, FluxEngine uses traditional disk images | ||||||
|  | with alternating sides, with the blocks from track 0 side 0 then track 0 side | ||||||
|  | 1 then track 1 side 0 etc. Most Acorn emulators will use both formats, but | ||||||
|  | they might require nudging as the side order can't be reliably autodetected. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `160`: 160kB 3.5" or 5.25" 40-track SSDD; S format | ||||||
|  |       - `320`: 320kB 3.5" or 5.25" 80-track SSDD; M format | ||||||
|  |       - `640`: 640kB 3.5" or 5.25" 80-track DSDD; L format | ||||||
|  |       - `800`: 800kB 3.5" 80-track DSDD; D and E formats | ||||||
|  |       - `1600`: 1600kB 3.5" 80-track DSHD; F formats | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read acornadfs --160 -s drive:0 -o acornadfs.img` | ||||||
|  |   - `fluxengine read acornadfs --320 -s drive:0 -o acornadfs.img` | ||||||
|  |   - `fluxengine read acornadfs --640 -s drive:0 -o acornadfs.img` | ||||||
|  |   - `fluxengine read acornadfs --800 -s drive:0 -o acornadfs.img` | ||||||
|  |   - `fluxengine read acornadfs --1600 -s drive:0 -o acornadfs.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,38 @@ | |||||||
| -d | acorndfs | ||||||
| \r | ==== | ||||||
|  | ## Acorn Atom, BBC Micro series | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Acorn DFS disks are used by the Acorn Atom and BBC Micro series of computers. | ||||||
|  | They are pretty standard FM encoded IBM scheme disks, with 256-sectors and | ||||||
|  | 0-based sector identifiers. There's nothing particularly special here. | ||||||
|  |  | ||||||
|  | DFS disks are all single-sided, but allow the other side of the disk to be | ||||||
|  | used as another volume. | ||||||
|  |  | ||||||
|  | They come in two varieties, 40 track and 80 track. These should both work. | ||||||
|  | Some rare disks are both at the same time. FluxEngine can read these but it | ||||||
|  | requires a bit of fiddling as they have the same tracks on twice. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `100`: 100kB 40-track SSSD | ||||||
|  |       - `200`: 200kB 80-track SSSD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read acorndfs --100 -s drive:0 -o acorndfs.img` | ||||||
|  |   - `fluxengine read acorndfs --200 -s drive:0 -o acorndfs.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write acorndfs --100 -d drive:0 -i acorndfs.img` | ||||||
|  |   - `fluxengine write acorndfs --200 -d drive:0 -i acorndfs.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Acorn DFS disc format](https://beebwiki.mdfs.net/Acorn_DFS_disc_format) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,48 @@ | |||||||
| -d | aeslanier | ||||||
| \r | ==== | ||||||
|  | ## 616kB 5.25" 77-track SSDD hard sectored | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Back in 1980 Lanier released a series of very early integrated word processor | ||||||
|  | appliances, the No Problem. These were actually [rebranded AES Data Superplus | ||||||
|  | machines](http://vintagecomputers.site90.net/aes/). They were gigantic, | ||||||
|  | weighed 40kg, and one example I've found cost ꆲ5bb4 | ||||||
|  | of nearly ㇢1a6e | ||||||
|  |  | ||||||
|  | 8080 machines with 32kB of RAM, they ran their own proprietary word | ||||||
|  | processing software off twin 5.25" drive units, but apparently other software | ||||||
|  | was available. | ||||||
|  |  | ||||||
|  | The disk format is exceptionally weird. They used 77 track, 32 sector, single-sided | ||||||
|  | _hard_ sectored disks, where there were multiple index holes, | ||||||
|  | indicating to the hardware where the sectors start. The encoding scheme | ||||||
|  | itself is [MMFM (aka | ||||||
|  | M2FM)](http://www.retrotechnology.com/herbs_stuff/m2fm.html), an early | ||||||
|  | attempt at double-density disk encoding which rapidly got obsoleted by the | ||||||
|  | simpler MFM --- and the bytes are stored on disk _backwards_. Even aside from | ||||||
|  | the encoding, the format on disk was strange; unified sector header/data | ||||||
|  | records, so that the sector header (containing the sector and track number) | ||||||
|  | is actually inside the user data. | ||||||
|  |  | ||||||
|  | FluxEngine can read these, but I only have a single, fairly poor example of a | ||||||
|  | disk image, and I've had to make a lot of guesses as to the sector format | ||||||
|  | based on what looks right. If anyone knows _anything_ about these disks, | ||||||
|  | [please get in touch](https://github.com/davidgiven/fluxengine/issues/new). | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read aeslanier -s drive:0 -o aeslanier.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   * [SA800 Diskette Storage Drive - Theory Of | ||||||
|  |     Operations](http://www.hartetechnologies.com/manuals/Shugart/50664-1_SA800_TheorOp_May78.pdf): | ||||||
|  |     talks about MMFM a lot, but the Lanier machines didn't use this disk | ||||||
|  |     format. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,36 @@ | |||||||
| -d | agat | ||||||
| \r | ==== | ||||||
|  | ## 840kB 5.25" 80-track DS | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Agat (Russian: ↊fd74 | ||||||
|  | 1983. These were based around a 6502 and were nominally Apple II-compatible | ||||||
|  | although with enough differences to be problematic. | ||||||
|  |  | ||||||
|  | They could use either standard Apple II 140kB disks, or a proprietary 840kb | ||||||
|  | MFM-based double-sided format. FluxEngine supports both of these; this profile | ||||||
|  | is for the proprietary format. for the Apple II format, use the `apple2` | ||||||
|  | profile. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read agat -s drive:0 -o agat.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write agat -d drive:0 -i agat.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Magazine article on the | ||||||
|  |         Agat](https://sudonull.com/post/54185-Is-AGAT-a-bad-copy-of-Apple) | ||||||
|  |  | ||||||
|  |   - [Forum thread with (some) documentation on the | ||||||
|  |         format](https://torlus.com/floppy/forum/viewtopic.php?t=1385) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,41 @@ | |||||||
| -d | amiga | ||||||
| \r | ==== | ||||||
|  | ## 880kB 3.5" DSDD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Amiga disks use MFM, but don't use IBM scheme. Instead, the entire track is | ||||||
|  | read and written as a unit, with each sector butting up against the previous | ||||||
|  | one. This saves a lot of space which allows the Amiga to not just store 880kB | ||||||
|  | on a DD disk, but _also_ allows an extra 16 bytes of metadata per sector. | ||||||
|  |  | ||||||
|  | This metadata is mostly unused, so the default for FluxEngine is to ignore it | ||||||
|  | and just use the 512 bytes of main sector data. If you want it, specify a | ||||||
|  | 528-byte sector size. The metadata will come after the user data. | ||||||
|  |  | ||||||
|  | Bizarrely, the data in each sector is stored with all the odd bits first, and | ||||||
|  | then all the even bits. This is tied into the checksum algorithm, which is | ||||||
|  | distinctly subpar and not particularly good at detecting errors. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Sector size: | ||||||
|  |       - `without_metadata`: 512-byte sectors | ||||||
|  |       - `with_metadata`: 528-byte sectors | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read amiga -s drive:0 -o amiga.adf` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write amiga -d drive:0 -i amiga.adf` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Amiga Floppy Boot Process and Physical | ||||||
|  |     Layout](https://wiki.amigaos.net/wiki/Amiga_Floppy_Boot_Process_and_Physical_Layout) | ||||||
|  |  | ||||||
|  |   - [The Amiga Disk File FAQ](http://lclevy.free.fr/adflib/adf_info.html) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,52 @@ | |||||||
| -d | ampro | ||||||
| \r | ==== | ||||||
|  | ## CP/M | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Ampro Little Board was a very simple and cheap Z80-based computer from | ||||||
|  | 1984, which ran CP/M. It was, in fact, a single PCB which you could mount | ||||||
|  | on the bottom of a 5.25" drive. | ||||||
|  |  | ||||||
|  | [All about the Ampro Little Board](http://oldcomputers.net/ampro-little-board.html) | ||||||
|  |  | ||||||
|  | It stored either 400kB on a double-sided 40-track drive or 800kB on a | ||||||
|  | double-sided 80 track drive. The disk format it used was a slightly quirky | ||||||
|  | variation of the standard MFM IBM scheme --- sector numbering starts at 17 | ||||||
|  | rather than 1 (or Acorn's 0). FluxEngine supports this. | ||||||
|  |  | ||||||
|  | FluxEngine has direct filesystem support for these disks, or you can pass the | ||||||
|  | disk images into [cpmtools](http://www.moria.de/~michael/cpmtools/): | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | $ cpmls -f ampdsdd ampro.img | ||||||
|  | 0: | ||||||
|  | -a60014.e | ||||||
|  | amprodsk.com | ||||||
|  | bitchk.doc | ||||||
|  | bitchk.mac | ||||||
|  | cpmmac.mac | ||||||
|  | dir.com | ||||||
|  | himem.doc | ||||||
|  | himem.mac | ||||||
|  | kaydiag.lbr | ||||||
|  | kayinfo.lbr | ||||||
|  | ...etc... | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `400`: 400kB 40-track DSDD | ||||||
|  |       - `800`: 800kB 80-track DSDD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read ampro --400 -s drive:0 -o ampro.img` | ||||||
|  |   - `fluxengine read ampro --800 -s drive:0 -o ampro.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Ampro Little Board](http://oldcomputers.net/ampro-little-board.html) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,74 @@ | |||||||
| -d | apple2 | ||||||
| \r | ==== | ||||||
|  | ## Prodos, Appledos, and CP/M | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Apple II disks are nominally fairly sensible 40-track, single-sided, 256 | ||||||
|  | bytes-per-sector jobs. However, they come in two varieties: DOS 3.3/ProDOS and | ||||||
|  | above, and pre-DOS 3.3. They use different GCR encoding systems, dubbed | ||||||
|  | 6-and-2 and 5-and-3, and are mutually incompatible (although in some rare | ||||||
|  | cases you can mix 6-and-2 and 5-and-3 sectors on the same disk). | ||||||
|  |  | ||||||
|  | The difference is in the drive controller; the 6-and-2 controller is capable | ||||||
|  | of a more efficient encoding, and can fit 16 sectors on a track, storing | ||||||
|  | 140kB on a disk. The 5-and-3 controller can only fit 13, with a mere 114kB. | ||||||
|  |  | ||||||
|  | Both formats use GCR (in different varieties) in a nice, simple grid of | ||||||
|  | sectors, unlike the Macintosh. Like the Macintosh, there's a crazy encoding | ||||||
|  | scheme applied to the data before it goes down on disk to speed up | ||||||
|  | checksumming. | ||||||
|  |  | ||||||
|  | In addition, a lot of the behaviour of the drive was handled in software. | ||||||
|  | This means that Apple II disks can do all kinds of weird things, including | ||||||
|  | having spiral tracks! Copy protection for the Apple II was even madder than | ||||||
|  | on other systems. | ||||||
|  |  | ||||||
|  | FluxEngine can only read well-behaved 6-and-2 disks. It doesn't even try to | ||||||
|  | handle the weird stuff. | ||||||
|  |  | ||||||
|  | Apple DOS also applies logical sector remapping on top of the physical sector | ||||||
|  | numbering on the disk, and this _varies_ depending on what the disk is for. | ||||||
|  | FluxEngine can remap the sectors from physical to logical using modifiers.  If | ||||||
|  | you don't specify a remapping modifier, you get the sectors in the order they | ||||||
|  | appear on the disk. | ||||||
|  |  | ||||||
|  | If you don't want an image in physical sector order, specify one of the | ||||||
|  | filesystem ordering options. These also select the appropriate file system; | ||||||
|  | FluxEngine has read-only support for all of these. | ||||||
|  |  | ||||||
|  | In addition, some third-party systems use 80-track double sides drives, with | ||||||
|  | the same underlying disk format. The complication here is that the AppleDOS | ||||||
|  | filesystem only supports up to 50 tracks, so it needs tweaking to support | ||||||
|  | larger disks. It treats the second side of the disk as a completely different | ||||||
|  | volume. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `140`: 140kB 5.25" 35-track SS | ||||||
|  |       - `640`: 640kB 5.25" 80-track DS | ||||||
|  |   - Filesystem and sector skew: | ||||||
|  |       - `nofs`: use physical CHS sector order and no file system | ||||||
|  |       - `appledos`: use AppleDOS soft sector skew and file system | ||||||
|  |       - `prodos`: use ProDOS soft sector skew and filesystem | ||||||
|  |       - `cpm`: use CP/M soft sector skew and filesystem | ||||||
|  |   - `side1`: for AppleDOS file system access, read the volume on side 1 of a disk | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read apple2 --140 -s drive:0 -o apple2.img` | ||||||
|  |   - `fluxengine read apple2 --640 -s drive:0 -o apple2.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write apple2 --140 -d drive:0 -i apple2.img` | ||||||
|  |   - `fluxengine write apple2 --640 -d drive:0 -i apple2.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Beneath Apple DOS](https://fabiensanglard.net/fd_proxy/prince_of_persia/Beneath%20Apple%20DOS.pdf) | ||||||
|  |  | ||||||
|  |   - [MAME's ap2_dsk.cpp file](https://github.com/mamedev/mame/blob/4263a71e64377db11392c458b580c5ae83556bc7/src/lib/formats/ap2_dsk.cpp) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,16 @@ | |||||||
| -d | apple2_drive | ||||||
| \r | ==== | ||||||
|  | ## Adjust configuration for a 40-track Apple II drive | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | This is an extension profile; adding this to the command line will configure | ||||||
|  | FluxEngine to adjust the pinout and track spacing to work with an Apple II | ||||||
|  | drive.  This only works on Greaseweazle hardware and requires a custom | ||||||
|  | connector. | ||||||
|  |  | ||||||
|  | For example: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | fluxengine read apple2 --160 apple2_drive | ||||||
|  | ``` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,61 @@ | |||||||
| -d | atarist | ||||||
| \r | ==== | ||||||
|  | ## Almost PC compatible | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Atari ST disks are standard MFM encoded IBM scheme disks without an IAM header. | ||||||
|  | Disks are typically formatted 512 bytes per sector with between 9-10 (sometimes | ||||||
|  | 11!) sectors per track and 80-82 tracks per side. | ||||||
|  |  | ||||||
|  | For some reason, occasionally formatting software will put an extra IDAM record | ||||||
|  | with a sector number of 66 on a disk, which can horribly confuse things. The | ||||||
|  | Atari profiles below are configured to ignore these. | ||||||
|  |  | ||||||
|  | Be aware that many PC drives (including mine) won't do the 82 track formats.  | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `360`: 360kB 3.5" 80-track 9-sector SSDD | ||||||
|  |       - `370`: 370kB 3.5" 82-track 9-sector SSDD | ||||||
|  |       - `400`: 400kB 3.5" 80-track 10-sector SSDD | ||||||
|  |       - `410`: 410kB 3.5" 82-track 10-sector SSDD | ||||||
|  |       - `720`: 720kB 3.5" 80-track 9-sector DSDD | ||||||
|  |       - `740`: 740kB 3.5" 82-track 9-sector DSDD | ||||||
|  |       - `800`: 800kB 3.5" 80-track 10-sector DSDD | ||||||
|  |       - `820`: 820kB 3.5" 82-track 10-sector DSDD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read atarist --360 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --370 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --400 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --410 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --720 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --740 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --800 -s drive:0 -o atarist.img` | ||||||
|  |   - `fluxengine read atarist --820 -s drive:0 -o atarist.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write atarist --360 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --370 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --400 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --410 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --720 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --740 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --800 -d drive:0 -i atarist.img` | ||||||
|  |   - `fluxengine write atarist --820 -d drive:0 -i atarist.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Atari ST Floppy Drive Hardware | ||||||
|  |         Information](https://info-coach.fr/atari/hardware/FD-Hard.php) by Jean | ||||||
|  |         Louis-Guerin | ||||||
|  |  | ||||||
|  |   - [Atari ST Floppy Drive Software | ||||||
|  |         Information](https://info-coach.fr/atari/software/FD-Soft.php) by Jean | ||||||
|  |         Louis-Guerin | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,30 @@ | |||||||
| -d | bk | ||||||
| \r | ==== | ||||||
|  | ## 800kB 5.25"/3.5" 80-track 10-sector DSDD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The BK (an abbreviation for 1ba9 | ||||||
|  | is a Soviet era personal computer from Elektronika based on a PDP-11 | ||||||
|  | single-chip processor. It was the _only_ official, government approved home | ||||||
|  | computer in mass production at the time. | ||||||
|  |  | ||||||
|  | It got a floppy interface in 1989 when the 128kB BK-0011 was released. This | ||||||
|  | used a relatively normal double-sided IBM scheme format with 80 sectors and ten | ||||||
|  | sectors per track, resulting in 800kB disks. The format is, in fact, identical | ||||||
|  | to the Atari ST 800kB format. Either 5.25" or 3.5" drives were used depending | ||||||
|  | on what was available at the time, with the same format on both. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read bk -s drive:0 -o bk800.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write bk -d drive:0 -i bk800.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,128 @@ | |||||||
| -d | brother | ||||||
| \r | ==== | ||||||
|  | ## GCR family | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Brother word processor disks are weird, using custom tooling and chipsets. | ||||||
|  | They are completely not PC compatible in every possible way other than the | ||||||
|  | size. | ||||||
|  |  | ||||||
|  | Different word processors use different disk formats --- the only ones supported | ||||||
|  | by FluxEngine are the 120kB and 240kB 3.5" formats. Use the `--120` and `--240` | ||||||
|  | options to select which one. | ||||||
|  |  | ||||||
|  | Apparently about 20% of Brother word processors have alignment issues which | ||||||
|  | means that the disks can't be read by FluxEngine (because the tracks on the disk | ||||||
|  | don't line up with the position of the head in a PC drive). The word processors | ||||||
|  | themselves solved this by microstepping until they found where the real track | ||||||
|  | is, but normal PC drives aren't capable of doing this.  Particularly with the | ||||||
|  | 120kB disks, you might want to fiddle with the head bias (e.g. | ||||||
|  | `--drive.head_bias=3`) to get a clean read. Keep an eye on the bad sector map | ||||||
|  | that's dumped at the end of a read. My word processor likes to put logical track | ||||||
|  | 0 on physical track 3, which means that logical track 77 is on physical track | ||||||
|  | 80, so I need that `head_bias` value of 3; luckily my PC drive can access track | ||||||
|  | 80. | ||||||
|  |  | ||||||
|  | Using FluxEngine to *write* disks isn't a problem, so the | ||||||
|  | simplest solution is to use FluxEngine to create a new disk, with the tracks | ||||||
|  | aligned properly, and then use a word processor to copy the files you want | ||||||
|  | onto it. The new disk can then be read and you can extract the files. | ||||||
|  | Obviously this sucks if you don't actually have a word processor, but I can't | ||||||
|  | do anything about that. | ||||||
|  |  | ||||||
|  | If you find one of these misaligned disks then *please* [get in | ||||||
|  | touch](https://github.com/davidgiven/fluxengine/issues/new); I want to | ||||||
|  | investigate. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `120`: 120kB 3.5" 39-track SS GCR | ||||||
|  |       - `240`: 240kB 3.5" 78-track SS GCR | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read brother --120 -s drive:0 -o brother.img` | ||||||
|  |   - `fluxengine read brother --240 -s drive:0 -o brother.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write brother --120 -d drive:0 -i brother.img` | ||||||
|  |   - `fluxengine write brother --240 -d drive:0 -i brother.img` | ||||||
|  |  | ||||||
|  | Dealing with misaligned disks | ||||||
|  | ----------------------------- | ||||||
|  |  | ||||||
|  | While FluxEngine can't read misaligned disks directly, Brother word processors | ||||||
|  | _can_. If you have access to a compatible word processor, there's a fairly | ||||||
|  | simple workaround to allow you to extract the data: | ||||||
|  |  | ||||||
|  |   1. Format a disk using FluxEngine (by simply writing a blank filesystem image | ||||||
|  |          to a disk). This will have the correct alignment to work on a PC drive. | ||||||
|  |  | ||||||
|  |   2. Use a word processor to copy the misaligned disk to the newly formatted | ||||||
|  |          disk. The machine will happily adjust itself to both sets of alignments. | ||||||
|  |  | ||||||
|  |   3. Use FluxEngine to read the data off the correctly aligned disk. | ||||||
|  |  | ||||||
|  | I realise this is rather unsatisfactory, as the Brother hardware is becoming | ||||||
|  | rarer and they cope rather badly with damaged disks, but this is a limitation | ||||||
|  | of the hardware of normal PC drives. (It _is_ possible to deliberately misalign | ||||||
|  | a drive to make it match up with a bad disk, but this is for experts only --- I | ||||||
|  | wouldn't dare.) | ||||||
|  |  | ||||||
|  | Low level format | ||||||
|  | ---------------- | ||||||
|  |  | ||||||
|  | The drive is a single-sided 3.5" drive spinning at not 300 rpm (I don't know | ||||||
|  | the precise speed yet but FluxEngine doesn't care). The 240kB disks have 78 | ||||||
|  | tracks and the 120kB disks have 39. | ||||||
|  |  | ||||||
|  | Each track has 12 256-byte sectors. The drive ignores the index hole so they're | ||||||
|  | lined up all anyhow. As FluxEngine can only read from index to index, it | ||||||
|  | actually reads two complete revolutions and reassembles the sectors from that. | ||||||
|  |  | ||||||
|  | The underlying encoding is exceptionally weird; they use two different kinds of | ||||||
|  | GCR, one kind for the sector header records and a completely different one for | ||||||
|  | the data itself. It also has a completely bizarre CRC variant which a genius on | ||||||
|  | StackOverflow reverse engineered for me. However, odd though it may be, it does | ||||||
|  | seem pretty robust. | ||||||
|  |  | ||||||
|  | See the source code for the GCR tables and CRC routine. | ||||||
|  |  | ||||||
|  | Sectors are about 16.2ms apart on the disk (at 300 rpm). The header and | ||||||
|  | data records are 0.694ms apart. (All measured from the beginning of the | ||||||
|  | record.) The sector order is 05a3816b4927, which gives a sector skew of 5. | ||||||
|  |  | ||||||
|  | High level format | ||||||
|  | ----------------- | ||||||
|  |  | ||||||
|  | Once decoded, you end up with a file system image. FluxEngine supports direct | ||||||
|  | filesystem access for both kinds of disks. | ||||||
|  |  | ||||||
|  | ### 120kB disks | ||||||
|  |  | ||||||
|  | These disks use a proprietary and very simple file system. It's FAT-like | ||||||
|  | with an obvious directory and allocation table. It's supported by FluxEngine. | ||||||
|  |  | ||||||
|  | Any files whose names begin with an asterisk (`*`) will be marked as hidden. If | ||||||
|  | the file is named `*boot`, then a boot sector will be created which will load | ||||||
|  | and run the file at 0x7000 if the machine is started with CODE+Q pressed. So | ||||||
|  | far this has only been confirmed to work on a WP-1. | ||||||
|  |  | ||||||
|  | ### 240kB disks | ||||||
|  |  | ||||||
|  | Conversely, the 240kB disks turns out to be a completely normal Microsoft FAT | ||||||
|  | file system with a media type of 0x58 --- did you know that FAT supports 256 | ||||||
|  | byte sectors? I didn't --- of the MSX-DOS variety. There's a faint | ||||||
|  | possibility that the word processor is based on MSX-DOS, but I haven't | ||||||
|  | reverse engineered it to find out. | ||||||
|  |  | ||||||
|  | Standard Linux mtools will access the filesystem image and allow you to move | ||||||
|  | files in and out. However, you'll need to change the media type bytes at | ||||||
|  | offsets 0x015 and 0x100 from 0x58 to 0xf0 before mtools will touch it. The | ||||||
|  | supplied `brother240tool` will do this. Additionally, FluxEngine's own FAT | ||||||
|  | file system supports this. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,74 @@ | |||||||
| -d | commodore | ||||||
| \r | ==== | ||||||
|  | ## 1541, 1581, 8050 and variations | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Commodore 8-bit computer disks come in two varieties: GCR, which are the | ||||||
|  | overwhelming majority; and MFM, only used on the 1571 and 1581. The latter were | ||||||
|  | (as far as I can tell) standard IBM PC format disks with a slightly odd sector | ||||||
|  | count. | ||||||
|  |  | ||||||
|  | The GCR disks are much more interesting. They could store 170kB on a | ||||||
|  | single-sided disk (although later drives were double-sided), using a proprietary | ||||||
|  | encoding and record scheme; like [Apple Macintosh disks](macintosh.md) they | ||||||
|  | stored varying numbers of sectors per track to make the most of the physical | ||||||
|  | disk area, although unlike them they did it by changing the bitrate rather than | ||||||
|  | adjusting the motor speed. | ||||||
|  |  | ||||||
|  | The drives were also intelligent and ran DOS on a CPU inside them. The | ||||||
|  | computer itself knew nothing about file systems. You could even upload | ||||||
|  | programs onto the drive and run them there, allowing all sorts of custom disk | ||||||
|  | formats, although this was mostly used to compensate for the [cripplingly | ||||||
|  | slow connection to the | ||||||
|  | computer](https://ilesj.wordpress.com/2014/05/14/1541-why-so-complicated/) of | ||||||
|  | 300 bytes per second (!). (The drive itself could transfer data reasonably | ||||||
|  | quickly.) | ||||||
|  |  | ||||||
|  |   - a 1541 disk has 35 tracks of 17 to 21 sectors, each 256 bytes long | ||||||
|  | 	(sometimes 40 tracks), and uses GCR encoding. | ||||||
|  |  | ||||||
|  |   - a standard 1581 disk has 80 tracks and two sides, each with 10 sectors, 512 | ||||||
|  | 	bytes long, and uses normal IBM encoding. | ||||||
|  |  | ||||||
|  |   - an 8050 disk has 77 tracks and two sides, with four speed zones; the number | ||||||
|  | 	of sectors varies from 23 to 29, using GCR encoding. These will store | ||||||
|  | 	1042kB. These drives are peculiar because they are 100tpi and therefore the | ||||||
|  | 	disks cannot be read in normal 96tpi drives. | ||||||
|  |  | ||||||
|  |   - a CMD FD2000 disk (a popular third-party Commodore disk drive) has 81 | ||||||
|  | 	tracks and two sides, each with 10 1024-byte sectors, for a massive 1620kB | ||||||
|  | 	of storage. This also uses IBM encoding. | ||||||
|  |  | ||||||
|  | A CMD FD2000 disk (a popular third-party Commodore disk drive)  | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `171`: 171kB 1541, 35-track variant | ||||||
|  |       - `192`: 192kB 1541, 40-track variant | ||||||
|  |       - `800`: 800kB 3.5" 1581 | ||||||
|  |       - `1042`: 1042kB 5.25" 8051 | ||||||
|  |       - `1620`: 1620kB, CMD FD2000 | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read commodore --171 -s drive:0 -o commodore.d64` | ||||||
|  |   - `fluxengine read commodore --192 -s drive:0 -o commodore.d64` | ||||||
|  |   - `fluxengine read commodore --800 -s drive:0 -o commodore.d64` | ||||||
|  |   - `fluxengine read commodore --1042 -s drive:0 -o commodore.d64` | ||||||
|  |   - `fluxengine read commodore --1620 -s drive:0 -o commodore.d64` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write commodore --171 -d drive:0 -i commodore.d64` | ||||||
|  |   - `fluxengine write commodore --192 -d drive:0 -i commodore.d64` | ||||||
|  |   - `fluxengine write commodore --800 -d drive:0 -i commodore.d64` | ||||||
|  |   - `fluxengine write commodore --1620 -d drive:0 -i commodore.d64` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Ruud's Commodore Site: 1541](http://www.baltissen.org/newhtm/1541c.htm): | ||||||
|  |     documentation on the 1541 disk format. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,42 @@ | |||||||
| -d | eco1 | ||||||
| \r | ==== | ||||||
|  | ## CP/M; 1210kB 77-track mixed format DSHD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Eco1 is a Italian CP/M machine produced in 1982. It had 64kB of RAM, in | ||||||
|  | later models expandable up to 384kB, and _two_ Z80 processors. One of these was | ||||||
|  | used solely for managing the twin 8" drives, each storing 1.2MB, which was | ||||||
|  | quite impressive for a CP/M machine in those days. Visually it is best | ||||||
|  | described as 'very brown'. | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <a href="vds-eco1.jpg"> <img src="vds-eco1.jpg" style="width:80%" alt="A contemporary advert for the Eco1"/></a> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | Its format is standard IBM scheme, but with an interesting wrinkle: there are | ||||||
|  | _three_ different formatting zones on the disk: | ||||||
|  |  | ||||||
|  |   - Track 0 side 0: 26 sectors, 128 bytes per sector (3296 bytes) | ||||||
|  |   - Track 0 side 1: 26 sectors, 256 bytes per sector (6656 bytes) | ||||||
|  |   - All others: 16 sectors, 512 bytes per sector (8192 bytes) | ||||||
|  |  | ||||||
|  | The standard `read ibm` command will autodetect and read these disks, but due | ||||||
|  | to the format confusing the size autodetection the images need postprocessing | ||||||
|  | to be useful, so there's a custom profile for the Eco1 which produces sensible | ||||||
|  | images. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read eco1 -s drive:0 -o eco1.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Apulio Retrocomputing's page on the | ||||||
|  | 	Eco1](https://www.apuliaretrocomputing.it/wordpress/?p=8976) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,19 @@ | |||||||
| -d | epsonpf10 | ||||||
| \r | ==== | ||||||
|  | ## CP/M; 3.5" 40-track DSDD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Epson PF10 is the disk unit for the Epson Z80 series of 'laptops', running | ||||||
|  | CP/M. It uses a single-sided 40-track 3.5" format, which is unusual, but the | ||||||
|  | format itself is yet another IBM scheme variant. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read epsonpf10 -s drive:0 -o epsonpf10.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,47 @@ | |||||||
| -d | f85 | ||||||
| \r | ==== | ||||||
|  | ## 461kB 5.25" 77-track SS | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Durango F85 was an early office computer based around a 5MHz 8085 processor, | ||||||
|  | sold in 1977. It had an impressive 64kB of RAM, upgradable to 128kB, and ran | ||||||
|  | its own multitasking operating system call DX-85M, as well as CP/M. It had an | ||||||
|  | interesting electric-typewriter form factor, with a little monitor sitting on | ||||||
|  | the side of it --- in operation you were facing the 14" printer. | ||||||
|  |  | ||||||
|  | It was touted as being portable. Which it was, if you were strong; the story | ||||||
|  | is that they had to do an extensive search to find someone capable of lifting | ||||||
|  | it for the following photo... | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <img src="durangof85.jpg" style="max-width: 60%" alt="A Durango F85, held precariously"> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | ...and even then, they had to airbrush out the tendons in her neck from the | ||||||
|  | effort! | ||||||
|  |  | ||||||
|  | It used 5.25 soft-sectored disks storing an impressive-for-those-days | ||||||
|  | 480kBish on a side, using a proprietary 4-in-5 GCR encoding. They used 77 | ||||||
|  | tracks, 12 sectors and 512 bytes per sector. Later models used double-sided | ||||||
|  | disks; I don't have access to an image of one so don't know how they work | ||||||
|  | (there's a suspicious looking spare byte in the sector header which could | ||||||
|  | store the side). As always, if you have one, please [get in | ||||||
|  | touch](https://github.com/davidgiven/fluxengine/issues/new). | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read f85 -s drive:0 -o f85.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  | There's amazingly little information about these things. | ||||||
|  |  | ||||||
|  |   * [Chuck Guzis' F85 page](http://www.sydex.com/durango/durango.html) with | ||||||
|  |     lots of pictures | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,48 @@ | |||||||
| -d | fb100 | ||||||
| \r | ==== | ||||||
|  | ## 100kB 3.5" 40-track SSSD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Brother FB-100 is a serial-attached smart floppy drive used by a several | ||||||
|  | different machines for mass storage, including the Tandy Model 100 and | ||||||
|  | clones, the Husky Hunter 2, and (bizarrely) several knitting machines. It was | ||||||
|  | usually rebadged, sometimes with a cheap paper label stuck over the Brother | ||||||
|  | logo, but the most common variant appears to be the Tandy Portable Disk Drive | ||||||
|  | or TPDD: | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <a href="http://www.old-computers.com/museum/computer.asp?c=233&st=1"> <img src="tpdd.jpg" alt="A Tandy Portable Disk Drive"/></a> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | It's a bit of an oddball: the disk encoding is FM with a very custom record | ||||||
|  | scheme: 40-track single-sided 3.5" disks storing 100kB or so each. Each track | ||||||
|  | had only _two_ sectors, each 1280 bytes, but with an additional 12 bytes of | ||||||
|  | ID data used for filesystem management. | ||||||
|  |  | ||||||
|  | There was also apparently a TPDD-2 which could store twice as much data, but | ||||||
|  | I don't have access to one of those disks. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read fb100 -s drive:0 -o fb100.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Tandy Portable Disk Drive operations | ||||||
|  | 	manual](http://www.classiccmp.org/cini/pdf/Tandy/Portable%20Disk%20Drive%20Operation%20Manual.pdf) | ||||||
|  |  | ||||||
|  |   - [Tandy Portable Disk Drive service | ||||||
|  | 	manual](https://archive.org/details/TandyPortableDiskDriveSoftwareManual26-3808s) | ||||||
|  |  | ||||||
|  |   - [TPDD design notes (including a dump of the | ||||||
|  | 	ROM)](http://bitchin100.com/wiki/index.php?title=TPDD_Design_Notes) | ||||||
|  |  | ||||||
|  |   - [Knitting machine FB-100 | ||||||
|  | 	resources](http://www.k2g2.org/wiki:brother_fb-100) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,42 @@ | |||||||
| -d | hplif | ||||||
| \r | ==== | ||||||
|  | ## a variety of disk formats used by HP | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | LIF, a.k.a. Logical Interchange Format, is a series of formats used by | ||||||
|  | Hewlett-Packard across their entire range of computers, from calculators to | ||||||
|  | modern servers. It also defines a simple non-hierarchical filesystem which is | ||||||
|  | bizarrely _still_ supported by HP-UX systems. | ||||||
|  |  | ||||||
|  | Floppy-disk wise, they're yet more variations of the standard IBM floppy | ||||||
|  | encoding scheme. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `264`: 264kB 3.5" 66-track SSDD; HP9121 format | ||||||
|  |       - `608`: 608kB 3.5" 76-track DSDD; HP9122 format | ||||||
|  |       - `616`: 616kB 3.5" 77-track DSDD | ||||||
|  |       - `770`: 770kB 3.5" 77-track DSDD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read hplif --264 -s drive:0 -o hplif.img` | ||||||
|  |   - `fluxengine read hplif --608 -s drive:0 -o hplif.img` | ||||||
|  |   - `fluxengine read hplif --616 -s drive:0 -o hplif.img` | ||||||
|  |   - `fluxengine read hplif --770 -s drive:0 -o hplif.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write hplif --264 -d drive:0 -i hplif.img` | ||||||
|  |   - `fluxengine write hplif --608 -d drive:0 -i hplif.img` | ||||||
|  |   - `fluxengine write hplif --616 -d drive:0 -i hplif.img` | ||||||
|  |   - `fluxengine write hplif --770 -d drive:0 -i hplif.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   * [A summary of the Hewlett Packard floppy disk | ||||||
|  |     formats](http://www.bitsavers.org/pdf/hp/disc/912x/HP_Flexible_Disk_Formats.pdf) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										124
									
								
								doc/disk-ibm.md
									
									
									
									
									
								
							
							
						
						
									
										124
									
								
								doc/disk-ibm.md
									
									
									
									
									
								
							| @@ -1,2 +1,122 @@ | |||||||
| -d | ibm | ||||||
| \r | ==== | ||||||
|  | ## Generic PC 3.5"/5.25" disks | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | IBM scheme disks are _the_ most common disk format, ever. They're used by a | ||||||
|  | huge variety of different systems, and they come in a huge variety of different | ||||||
|  | forms, but they're all fundamentally the same: either FM or MFM, either single- | ||||||
|  | or double-sided, with distinct sector header and data records and no sector | ||||||
|  | metadata. Systems which use IBM scheme disks include but are not limited to: | ||||||
|  |  | ||||||
|  |   - IBM PCs (naturally) | ||||||
|  |   - Atari ST | ||||||
|  |   - late era Apple machines | ||||||
|  |   - Acorn machines | ||||||
|  |   - the TRS-80 | ||||||
|  |   - late era Commodore machines (the 1571 and so on) | ||||||
|  |   - most CP/M machines | ||||||
|  |   - NEC PC-88 series | ||||||
|  |   - NEC PC-98 series | ||||||
|  |   - Sharp X68000 | ||||||
|  |   - Fujitsu FM Towns | ||||||
|  |   - VAX & PDP-11 | ||||||
|  |   - etc | ||||||
|  |  | ||||||
|  | FluxEngine supports reading these. However, some variants are more peculiar | ||||||
|  | than others, and as a result there are specific decoders which set the defaults | ||||||
|  | correctly for certain formats (for example: on PC disks the sector numbers | ||||||
|  | start from 1, but on Acorn disks they start from 0). The IBM decoder described | ||||||
|  | here is the generic one, and is suited for 'conventional' PC disks. While you | ||||||
|  | can read all the variant formats with it if you use the right set of arguments, | ||||||
|  | it's easier to use the specific decoder. | ||||||
|  |  | ||||||
|  | There is a generic decoder which should adjust automatically to whichever disk | ||||||
|  | format you are using, but it's unreliable and not recommended. This format | ||||||
|  | should also be used if you are writing images such as DIM which specify the | ||||||
|  | image format. FluxEngine will use these parameters. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `auto`: try to autodetect the format (unreliable) | ||||||
|  |       - `160`: 160kB 5.25" 40-track 8-sector SSDD | ||||||
|  |       - `180`: 180kB 5.25" 40-track 9-sector SSDD | ||||||
|  |       - `320`: 320kB 5.25" 40-track 8-sector DSDD | ||||||
|  |       - `360`: 360kB 5.25" 40-track 9-sector DSDD | ||||||
|  |       - `720_96`: 720kB 5.25" 80-track 9-sector DSDD | ||||||
|  |       - `720_135`: 720kB 3.5" 80-track 9-sector DSDD | ||||||
|  |       - `1200`: 1200kB 5.25" 80-track 15-sector DSHD | ||||||
|  |       - `1232`: 1232kB 5.25" 77-track 8-sector DSHD | ||||||
|  |       - `1440`: 1440kB 3.5" 80-track 18-sector DSHD | ||||||
|  |       - `1680`: 1680kB 3.5" 80-track 21-sector DSHD; DMF | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read ibm --auto -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --160 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --180 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --320 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --360 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --720_96 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --720_135 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --1200 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --1232 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --1440 -s drive:0 -o ibm.img` | ||||||
|  |   - `fluxengine read ibm --1680 -s drive:0 -o ibm.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write ibm --160 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --180 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --320 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --360 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --720_96 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --720_135 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --1200 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --1232 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --1440 -d drive:0 -i ibm.img` | ||||||
|  |   - `fluxengine write ibm --1680 -d drive:0 -i ibm.img` | ||||||
|  |  | ||||||
|  | Mixed-format disks | ||||||
|  | ------------------ | ||||||
|  |  | ||||||
|  | Some disks, such as those belonging to early CP/M machines, or N88-Basic disks | ||||||
|  | (for PC-88 and PC-98), have more than one format on the disk at once. Typically, | ||||||
|  | the first few tracks will be low-density FM encoded and will be read by the | ||||||
|  | machine's ROM; those tracks contain new floppy drive handling code capable of | ||||||
|  | coping with MFM data, and so the rest of the disk will use that, allowing them | ||||||
|  | to store more data. | ||||||
|  |  | ||||||
|  | FluxEngine can read these fine, but it tends to get a bit confused when it sees | ||||||
|  | tracks with differing numbers of sectors --- if track 0 has 32 sectors but | ||||||
|  | track 1 has 16, it will assume that sectors 16..31 are missing on track 1 and | ||||||
|  | size the image file accordingly. This can be worked around by specifying the | ||||||
|  | size of each track; see the `eco1` read profile for an example. | ||||||
|  |  | ||||||
|  | N88-Basic format floppies can be written by either specifying the `n88basic` | ||||||
|  | format, or by using D88 or NFD format images which include explicit sector | ||||||
|  | layout information. | ||||||
|  |  | ||||||
|  | Writing other formats can be made to work too, by creating a custom format | ||||||
|  | specifier, using the `n88basic` format as an example. | ||||||
|  | Please [get in touch](https://github.com/davidgiven/fluxengine/issues/new) if | ||||||
|  | you have specific requirements. | ||||||
|  |  | ||||||
|  | 360rpm 3.5" disks | ||||||
|  | ----------------- | ||||||
|  |  | ||||||
|  | Japanese PCs (NEC PC-98, Sharp X68000, Fujitsu FM Towns) spin their floppy | ||||||
|  | drives at 360rpm rather than the more typical 300rpm. This was done in order | ||||||
|  | to be fully backwards compatible with 5.25" disks, while using the exact | ||||||
|  | same floppy controller. Later models of the PC-9821, as well as most USB floppy | ||||||
|  | drives, feature "tri-mode" support which in addition to normal 300rpm modes, | ||||||
|  | can change their speed to read and write 360rpm DD and HD disks. | ||||||
|  |  | ||||||
|  | Neither the FluxEngine or Greaseweazle hardware can currently command a | ||||||
|  | tri-mode drive to spin at 360rpm. However on both devices the FluxEngine | ||||||
|  | software is capable of both reading and writing 300rpm disks at 360rpm and vice | ||||||
|  | versa, so it shouldn't matter. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,19 @@ | |||||||
| -d | icl30 | ||||||
| \r | ==== | ||||||
|  | ## CP/M; 263kB 35-track DSSD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The ICL Model 30 is a reasonably standard CP/M machine using 35-track single | ||||||
|  | density disks and the traditional CP/M 128-byte secotrs --- 30 of them per | ||||||
|  | track! Other than that it's another IBM scheme variation. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read icl30 -s drive:0 -o icl30.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,73 @@ | |||||||
| -d | mac | ||||||
| \r | ==== | ||||||
|  | ## 400kB/800kB 3.5" GCR | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Macintosh disks come in two varieties: the newer 1440kB ones, which are | ||||||
|  | perfectly ordinary PC disks you should use the `ibm` profile to read them, and | ||||||
|  | the older 800kB disks (and 400kB for the single sides ones). They have 80 | ||||||
|  | tracks and up to 12 sectors per track. | ||||||
|  |  | ||||||
|  | They are also completely insane. | ||||||
|  |  | ||||||
|  | It's not just the weird, custom GCR encoding. It's not just the utterly | ||||||
|  | bizarre additional encoding/checksum built on top of that where [every byte | ||||||
|  | is mutated according to the previous bytes in the | ||||||
|  | sector](https://www.bigmessowires.com/2011/10/02/crazy-disk-encoding-schemes/). | ||||||
|  | It's not just the odd way in which disks think they have four sides, two on one | ||||||
|  | side and two on the other, so that the track byte stores only the bottom 6 bits | ||||||
|  | of the track number. It's not just the way that Macintosh sectors are 524 bytes | ||||||
|  | long. No, it's the way the Macintosh drive changes speed depending on which | ||||||
|  | track it's looking at, so that each track contains a different amount of data. | ||||||
|  |  | ||||||
|  | The reason for this is actually quite sensible: the tracks towards the centre | ||||||
|  | of the disk are obviously moving more slowly, so you can't pack the bits in | ||||||
|  | quite as closely (due to limitations in the magnetic media). You can use a | ||||||
|  | higher bitrate at the edge of the disk than in the middle. Many platforms, for | ||||||
|  | example the Commodore 64 1541 drive, changed bitrate this way. | ||||||
|  |  | ||||||
|  | But Macintosh disks used a constant bitrate and changed the speed that the disk | ||||||
|  | spun instead to achieve the same effect... | ||||||
|  |  | ||||||
|  | _Anyway_: FluxEngine will read them fine on conventional drives.  Because it's | ||||||
|  | clever. | ||||||
|  |  | ||||||
|  | Macintosh computers never really used the twelve bytes of metadata and the | ||||||
|  | standard for disk images is to omit it. If you want them, specify that you want | ||||||
|  | 524-byte sectors. The metadata will follow the 512 bytes of user data. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `400`: 400kB 80-track SSDD | ||||||
|  |       - `800`: 800kB 80-track DSDD | ||||||
|  |   - `metadata`: read/write 524 byte sectors | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read mac --400 -s drive:0 -o mac.dsk` | ||||||
|  |   - `fluxengine read mac --800 -s drive:0 -o mac.dsk` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write mac --400 -d drive:0 -i mac.dsk` | ||||||
|  |   - `fluxengine write mac --800 -d drive:0 -i mac.dsk` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [MAME's ap_dsk35.cpp file](https://github.com/mamedev/mame/blob/4263a71e64377db11392c458b580c5ae83556bc7/src/lib/formats/ap_dsk35.cpp), | ||||||
|  |     without which I'd never have managed to do this | ||||||
|  |  | ||||||
|  |   - [Crazy Disk Encoding | ||||||
|  |     Schemes](https://www.bigmessowires.com/2011/10/02/crazy-disk-encoding-schemes/), which made | ||||||
|  |     me realise just how nuts the format is | ||||||
|  |  | ||||||
|  |   - [Les Disquettes et le drive Disk II](http://www.hackzapple.com/DISKII/DISKIITECH.HTM), an | ||||||
|  |     epicly detailed writeup of the Apple II disk format (which is closely related) | ||||||
|  |  | ||||||
|  |   - [The DiskCopy 4.2 | ||||||
|  |         format](https://www.discferret.com/wiki/Apple_DiskCopy_4.2), described on | ||||||
|  |         the DiskFerret website. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,87 @@ | |||||||
| -d | micropolis | ||||||
| \r | ==== | ||||||
|  | ## 100tpi MetaFloppy disks | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Micropolis MetaFloppy disks use MFM and hard sectors. Mod I was 48 TPI and | ||||||
|  | stored 143k per side. Mod II was 100 TPI and stored 315k per side. Each of the | ||||||
|  | 16 sectors contains 266 bytes of "user data," allowing 10 bytes of metadata for | ||||||
|  | use by the operating system. Micropolis DOS (MDOS) used the metadata bytes, but | ||||||
|  | CP/M did not. | ||||||
|  |  | ||||||
|  | Some later systems were Micropolis-compatible and so were also 100 TPI, like | ||||||
|  | the Vector Graphic Dual-Mode Disk Controller which was paired with a Tandon | ||||||
|  | drive. | ||||||
|  |  | ||||||
|  | **Important note:** You _cannot_ read these disks with a normal PC drive, as | ||||||
|  | these drives are 96tpi. The track spacing is determined by the physical geometry | ||||||
|  | of the drive and can't be changed in software. You'll need to get hold of a | ||||||
|  | 100tpi Micropolis drive. Luckily these seem to use the same connector and | ||||||
|  | pinout as a 96tpi PC 5.25" drive. In use they should be identical. | ||||||
|  |  | ||||||
|  | While most operating systems use the standard Micropolis checksum, Vector | ||||||
|  | Graphic MZOS uses a unique checksum.  The decoder will automatically detect | ||||||
|  | the checksum type in use; however, a specific checksum type may be forced | ||||||
|  | using the `--decoder.micropolis.checksum_type=TYPE` where TYPE is one of: | ||||||
|  |  | ||||||
|  | | Checksum   | Description                             | | ||||||
|  | |------------|-----------------------------------------| | ||||||
|  | | AUTO       | Automatically detect                    | | ||||||
|  | | MICROPOLIS | Standard Micropolis (MDOS, CP/M, OASIS) | | ||||||
|  | | MZOS       | Vector Graphic MZOS                     | | ||||||
|  |  | ||||||
|  | Later versions of the Micropolis format supported ECC, especially in | ||||||
|  | controllers with HDD support. The ECC can detect and correct errors. However, | ||||||
|  | it is unclear what ECC algorithm was used by each vendor. ECC is disabled by | ||||||
|  | default, but available for checking and correcting using | ||||||
|  | `--decoder.micropolis.ecc_type=TYPE` and for writing from IMG files using | ||||||
|  | `--encoder.micropolis.ecc_type=TYPE`, where TYPE is one of: | ||||||
|  |  | ||||||
|  | | ECC    | Description                              | | ||||||
|  | |--------|------------------------------------------| | ||||||
|  | | NONE   | No ECC processing enabled                | | ||||||
|  | | VECTOR | Vector Graphic Dual-Mode Disk Controller | | ||||||
|  |  | ||||||
|  | The [CP/M BIOS](https://www.seasip.info/Cpm/bios.html) defined SELDSK, SETTRK, | ||||||
|  | and SETSEC, but no function to select the head/side. Double-sided floppies | ||||||
|  | could be represented as having either twice the number of sectors, for CHS, or | ||||||
|  | twice the number of tracks, HCS; the second side's tracks in opposite order | ||||||
|  | logically followed the first side (e.g., tracks 77-153). Micropolis disks | ||||||
|  | tended to be the latter. FluxEngine always emits CHS format disks, so you may | ||||||
|  | need to apply extra options to change the format if desired. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - : | ||||||
|  |       - `143`: 143kB 5.25" SSDD hard-sectored; Micropolis MetaFloppy Mod I | ||||||
|  |       - `287`: 287kB 5.25" DSDD hard-sectored; Micropolis MetaFloppy Mod I | ||||||
|  |       - `315`: 315kB 5.25" SSDD hard-sectored; Micropolis MetaFloppy Mod II | ||||||
|  |       - `630`: 630kB 5.25" DSDD hard-sectored; Micropolis MetaFloppy Mod II | ||||||
|  |   - `vgi`: Read/write VGI format images with 275 bytes per sector | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read micropolis -s drive:0 -o micropolis.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write micropolis -d drive:0 -i micropolis.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Micropolis 1040/1050 S-100 Floppy Disk Subsystems User's Manual][micropolis1040/1050]. | ||||||
|  |     Section 6, pages 261-266. Documents pre-ECC sector format. Note that the | ||||||
|  |     entire record, starting at the sync byte, is controlled by software | ||||||
|  |  | ||||||
|  |   - [Vector Graphic Dual-Mode Disk Controller Board Engineering Documentation][vectordualmode]. | ||||||
|  |     Section 1.6.2. Documents ECC sector format | ||||||
|  |  | ||||||
|  |   - [AltairZ80 Simulator Usage Manual][altairz80]. Section 10.6. Documents ECC | ||||||
|  |     sector format and VGI file format | ||||||
|  |  | ||||||
|  | [micropolis1040/1050]: http://www.bitsavers.org/pdf/micropolis/metafloppy/1084-01_1040_1050_Users_Manual_Apr79.pdf | ||||||
|  | [vectordualmode]: http://bitsavers.org/pdf/vectorGraphic/hardware/7200-1200-02-1_Dual-Mode_Disk_Controller_Board_Engineering_Documentation_Feb81.pdf | ||||||
|  | [altairz80]: http://www.bitsavers.org/simh.trailing-edge.com_201206/pdf/altairz80_doc.pdf | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,33 @@ | |||||||
| -d | ms2000 | ||||||
| \r | ==== | ||||||
|  | ## MS2000 Microdisk Development System | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The RCA MicroDisk Development System MS2000 is a highly obscure (i.e. I gather | ||||||
|  | that single digit numbers of original machines exist) development system for the | ||||||
|  | RCA1802 series of CPUs, as made famous by the Cosmac ELF. It was a fairly | ||||||
|  | straightforward big bag o'RAM system with a 2kB boot ROM, 62kB of RAM, twin | ||||||
|  | floppy drives and a serial terminal --- CP/M users will find it very familiar. | ||||||
|  |  | ||||||
|  | Read and writing disks is currently not supported by FluxEngine, but there is | ||||||
|  | basic support for the MicroDisk operating system's file system. This should | ||||||
|  | allow files to be read from MS2000 disk images. | ||||||
|  |  | ||||||
|  | The disks are normal DD 3.5" disks, using a 70-track, single sided variation of | ||||||
|  | the venerable IBM floppy disk scheme, so allowing 315kB of storage per disk. | ||||||
|  |  | ||||||
|  | If you have access to flux files for MS2000 disks, please [get in | ||||||
|  | touch](https://github.com/davidgiven/cpm65/issues/new) --- I would like to add | ||||||
|  | better support for these. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The EMMA-02 emulator](https://www.emma02.hobby-site.com/ms2000.html), which | ||||||
|  |     supports the MS2000 and provides information on it. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,69 @@ | |||||||
| -d | mx | ||||||
| \r | ==== | ||||||
|  | ## Soviet-era PDP-11 clone | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The DVK (in Russian, 沾7d65 | ||||||
|  | Computing Complex) was a late 1970s Soviet personal computer, a cut-down | ||||||
|  | version of the professional SM EVM (ⵁ241c | ||||||
|  | --- literally System of Mini Computers), which _itself_ was an unlicensed | ||||||
|  | clone of the PDP-11. The MX board was an early floppy drive controller board | ||||||
|  | for it. | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <a href="http://www.leningrad.su/museum/show_big.php?n=1006"><img src="dvk3m.jpg" style="max-width: 60%" alt="A DVK computer"></a> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | The MX format is interesting in that it has to be read a track at a time. The | ||||||
|  | format contains the usual ID prologue at the beginning of the track, then | ||||||
|  | eleven data blocks and checksums, then the epilogue, then it stops. The | ||||||
|  | actual encoding is normal FM. There were four different disk variants, in all | ||||||
|  | combinations of single- and double-sided and 40- and 80-tracked; but every | ||||||
|  | track contained eleven 256-byte sectors. | ||||||
|  |  | ||||||
|  | The format varies subtly depending on whether you're using the 'new' driver | ||||||
|  | or the 'old' driver. FluxEngine should read both. | ||||||
|  |  | ||||||
|  | A track is: | ||||||
|  |  | ||||||
|  |   * 8 x 0x0000 words (FM encoded as 01010101...) | ||||||
|  |   * 1 x 0x00F3 --- start of track | ||||||
|  |   * 1 x 0xnnnn --- track number | ||||||
|  |   * 11 of: | ||||||
|  |     * 128 words (256 bytes) of data | ||||||
|  |     * 16 bit checksum | ||||||
|  |   * **if 'new' format:** | ||||||
|  |     * 3 x 0x83nn --- `n = (track_number<<1) + side_number` | ||||||
|  |   * **if 'old' format:** | ||||||
|  |     * 3 x 0x8301 | ||||||
|  |  | ||||||
|  | The checksum is just the unsigned integer sum of all the words in the sector. | ||||||
|  | Words are all stored little-endian. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `110`: 110kB 5.25" 40-track SSSD | ||||||
|  |       - `220ds`: 220kB 5.25" 40-track DSSD | ||||||
|  |       - `220ss`: 220kB 5.25" 80-track SSSD | ||||||
|  |       - `440`: 440kB 5.25" 80-track DSSD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read mx --110 -s drive:0 -o mx.img` | ||||||
|  |   - `fluxengine read mx --220ds -s drive:0 -o mx.img` | ||||||
|  |   - `fluxengine read mx --220ss -s drive:0 -o mx.img` | ||||||
|  |   - `fluxengine read mx --440 -s drive:0 -o mx.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Soviet Digital Electronics | ||||||
|  |     Museum](http://www.leningrad.su/museum/main.php) (source of the image | ||||||
|  |     above) | ||||||
|  |  | ||||||
|  |   - [a random post on the HxC2001 support | ||||||
|  |     forum](http://torlus.com/floppy/forum/viewtopic.php?t=1384) with lots of | ||||||
|  |     information on the format | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,26 @@ | |||||||
| -d | n88basic | ||||||
| \r | ==== | ||||||
|  | ## PC8800/PC98 5.25" 77-track 26-sector DSHD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The N88-BASIC disk format is the one used by the operating system of the same | ||||||
|  | name for the Japanese PC8800 and PC98 computers. It is another IBM scheme | ||||||
|  | variant, and is very similar to some mixed-format CP/M disk formats, where | ||||||
|  | track 0 side 0 uses 128-byte single density sectors and the rest of the disk | ||||||
|  | uses 512-byte double density sectors. (The reason for this is that the PC8800 | ||||||
|  | boot ROM could only read single density data.) | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read n88basic -s drive:0 -o n88basic.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write n88basic -d drive:0 -i n88basic.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,50 @@ | |||||||
| -d | northstar | ||||||
| \r | ==== | ||||||
|  | ## 5.25" hard sectored | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | Northstar Floppy disks use 10-sector hard sectored disks with either FM or MFM | ||||||
|  | encoding.  They may be single- or double-sided.  Each of the 10 sectors contains | ||||||
|  | 256 (FM) or 512 (MFM) bytes of data.  The disk has 35 cylinders, with tracks 0- | ||||||
|  | 34 on side 0, and tracks 35-69 on side 1.  Tracks on side 1 are numbered "back- | ||||||
|  | wards" in that track 35 corresponds to cylinder 34, side 1, and track 69 | ||||||
|  | corresponds to cylinder 0, side 1. | ||||||
|  |  | ||||||
|  | The Northstar sector format does not include any head positioning information. | ||||||
|  | As such, reads from Northstar floppies need to by synchronized with the index | ||||||
|  | pulse, in order to properly identify the sector being read.  This is handled | ||||||
|  | automatically by FluxEngine. | ||||||
|  |  | ||||||
|  | Due to the nature of the track ordering on side 1, an .nsi image reader and | ||||||
|  | writer are provided for double-sided disks.  The .nsi image writer supports | ||||||
|  | both single- and double-sided disks; however single-sided .nsi images are | ||||||
|  | equivalent to .img images. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `87`: 87.5kB 5.25" 35-track SSSD hard-sectored | ||||||
|  |       - `175`: 175kB 5.25" 40-track SSDD hard-sectored | ||||||
|  |       - `350`: 350kB 5.25" 40-track DSDD hard-sectored | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read northstar --87 -s drive:0 -o northstar.nsi` | ||||||
|  |   - `fluxengine read northstar --175 -s drive:0 -o northstar.nsi` | ||||||
|  |   - `fluxengine read northstar --350 -s drive:0 -o northstar.nsi` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write northstar --87 -d drive:0 -i northstar.nsi` | ||||||
|  |   - `fluxengine write northstar --175 -d drive:0 -i northstar.nsi` | ||||||
|  |   - `fluxengine write northstar --350 -d drive:0 -i northstar.nsi` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [MICRO-DISK SYSTEM MDS-A-D DOUBLE DENSITY Manual][northstar_mds]. | ||||||
|  |     Page 33 documents sector format for single- and double-density. | ||||||
|  |  | ||||||
|  | [northstar_mds]: http://bitsavers.org/pdf/northstar/boards/Northstar_MDS-A-D_1978.pdf | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,32 @@ | |||||||
| -d | psos | ||||||
| \r | ==== | ||||||
|  | ## 800kB DSDD with PHILE | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | pSOS was an influential real-time operating system from the 1980s, used mainly | ||||||
|  | on 68000-based machines, lasting up until about 2000 when it was bought (and | ||||||
|  | cancelled) by Wind River. It had its own floppy disk format and file system, | ||||||
|  | both of which are partially supported here. | ||||||
|  |  | ||||||
|  | The PHILE file system is almost completely undocumented and so many of the data | ||||||
|  | structures have had to be reverse engineered and are not well known. Please | ||||||
|  | [get in touch](https://github.com/davidgiven/fluxengine/issues/new) if you know | ||||||
|  | anything about it. | ||||||
|  |  | ||||||
|  | The floppy disk format itself is an IBM scheme variation with 1024-byte sectors | ||||||
|  | and, oddly, swapped sides. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read psos -s drive:0 -o pme.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write psos -d drive:0 -i pme.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,48 @@ | |||||||
| -d | rolandd20 | ||||||
| \r | ==== | ||||||
|  | ## 3.5" electronic synthesiser disks | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Roland D20 is a classic electronic synthesiser with a built-in floppy | ||||||
|  | drive, used for saving MIDI sequences and samples. | ||||||
|  |  | ||||||
|  | Weirdly, it seems to use precisely the same format as the Brother word | ||||||
|  | processors: a thoroughly non-IBM-compatible custom GCR system. | ||||||
|  |  | ||||||
|  | FluxEngine supports both reading and writing D20 disks, as well as basic support | ||||||
|  | for the filesystem, allowing files to be read from and written to D20 disks. | ||||||
|  | Note that the D20 was never intended to support arbitrary files on its disks and | ||||||
|  | is very likely to crash if you put unexpected files on a disk. In addition, | ||||||
|  | while the file format itself is currently unknown, there is a header at the top | ||||||
|  | of the file containing what appears to be the name shown in the D20 file | ||||||
|  | browser, so the name by which you see it is not necessarily the filename. | ||||||
|  |  | ||||||
|  | A word of warning --- just like the Brother word processors, the D20 floppy | ||||||
|  | drive isn't very well aligned. The drive itself uses quarter-stepping to | ||||||
|  | automatically adapt to whatever alignment the disk was formatted with. This | ||||||
|  | means that trying to read such a disk on a PC drive, which does _not_ have | ||||||
|  | adjustable alignment, may not work very well. In these situations it is possible | ||||||
|  | to adjust the alignment of most modern drives, but this is a somewhat risky | ||||||
|  | process and may result in permanently wrecking the drive alignment. | ||||||
|  |  | ||||||
|  | Please [get in touch](https://github.com/davidgiven/fluxengine/issues/new) if | ||||||
|  | you know anything about it. | ||||||
|  |  | ||||||
|  | Many thanks to trondl [on the VCF | ||||||
|  | forums](https://forum.vcfed.org/index.php?threads/roland-d-20-decoding-the-mysterious-floppy-format.1243226/) | ||||||
|  | for assistance with this!  | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read rolandd20 -s drive:0 -o rolandd20.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write rolandd20 -d drive:0 -i rolandd20.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,23 @@ | |||||||
| -d | rx50 | ||||||
| \r | ==== | ||||||
|  | ## 400kB 5.25" 80-track 10-sector SSDD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Digital RX50 is one of the external floppy drive units used by Digital's | ||||||
|  | range of computers, especially the DEC Rainbow microcomputer. It is a fairly | ||||||
|  | vanilla single-sided IBM scheme variation. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read rx50 -s drive:0 -o rx50.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write rx50 -d drive:0 -i rx50.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,15 @@ | |||||||
| -d | shugart_drive | ||||||
| \r | ==== | ||||||
|  | ## Adjust configuration for a Shugart drive | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | This is an extension profile; adding this to the command line will configure | ||||||
|  | FluxEngine to adjust the pinout to work with a Shugart drive. This only works | ||||||
|  | on Greaseweazle hardware. | ||||||
|  |  | ||||||
|  | For example: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | fluxengine read ibm --720 shugart_drive | ||||||
|  | ``` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,34 @@ | |||||||
| -d | smaky6 | ||||||
| \r | ==== | ||||||
|  | ## 308kB 5.25" 77-track 16-sector SSDD, hard sectored | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Smaky 6 is a Swiss computer from 1978 produced by Epsitec. It's based | ||||||
|  | around a Z80 processor and has one or two Micropolis 5.25" drives which use | ||||||
|  | 16-sector hard sectored disks. The disk format is single-sided with 77 tracks | ||||||
|  | and 256-byte sectors, resulting in 308kB disks. It uses MFM with a custom | ||||||
|  | sector record scheme. It was later superceded by a 68000-based Smaky which used | ||||||
|  | different disks. | ||||||
|  |  | ||||||
|  | FluxEngine supports these, although because the Micropolis drives use a 100tpi | ||||||
|  | track pitch, you can't read Smaky 6 disks with a normal PC 96tpi drive. You | ||||||
|  | will have to find a 100tpi drive from somewhere (they're rare). | ||||||
|  |  | ||||||
|  | There is experimental read-only support for the Smaky 6 filesystem, allowing | ||||||
|  | the directory to be listed and files read from disks. It's not known whether | ||||||
|  | this is completely correct, so don't trust it! | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read smaky6 -s drive:0 -o smaky6.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [Smaky Info, 1978-2002 (in French)](https://www.smaky.ch/theme.php?id=sminfo) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,48 @@ | |||||||
| -d | tartu | ||||||
| \r | ==== | ||||||
|  | ## The Palivere and variations | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Tartu Palivere is a 1988 Z80-based computer from Estonia. It is a CP/M | ||||||
|  | machine with 64kB of RAM, running off a 2MHz ꃣ0e30 | ||||||
|  | clone; it operated off punched tape, cassette, external hard drive or floppy, and was notable as being the first ever computer with an Estonian keyboard. | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <img src="tartu.jpg" alt="The Tartu computer's developer Leo Humal working with one."/> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | From a floppy disk perspective, it is interesting because the floppy drive | ||||||
|  | interface is almost entirely handled in software --- necessary at the time as | ||||||
|  | the usual floppy disk interface chip at the time, the ⎲fba5 | ||||||
|  | of the WD1793), was hard to find. Instead, the floppy controller board was | ||||||
|  | implemented entirely using TTL logic. Despite this, the encoding is fairly high | ||||||
|  | density, using MFM and with up to 780kB on a double-sided 80 track disk. | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <img src="tartu-fdc.jpg" alt="The Tartu FDC with Soviet TTL logic chips."/> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | FluxEngine supports reading and writing Tartu disks with CP/M filesystem access. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `390`: 390kB 5.25" 40-track DSDD | ||||||
|  |       - `780`: 780kB 5.25" 80-track DSDD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read tartu --390 -s drive:0 -o tartu.img` | ||||||
|  |   - `fluxengine read tartu --780 -s drive:0 -o tartu.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write tartu --390 -d drive:0 -i tartu.img` | ||||||
|  |   - `fluxengine write tartu --780 -d drive:0 -i tartu.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Estonia Museum of Electronics](https://www.elektroonikamuuseum.ee/tartu_arvuti_lugu.html) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,39 @@ | |||||||
| -d | tids990 | ||||||
| \r | ==== | ||||||
|  | ## 1126kB 8" DSSD | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Texas Instruments DS990 was a multiuser modular computing system from 1998, | ||||||
|  | based around the TMS-9900 processor (as used by the TI-99). It had an 8" floppy | ||||||
|  | drive module, the FD1000, which was a 77-track, 288-byte sector FM/MFM system | ||||||
|  | with 26 sectors per track. The encoding scheme was very similar to a simplified | ||||||
|  | version of the IBM scheme, but of course not compatible. A double-sided disk | ||||||
|  | would store a very satisfactory 1126kB of data; here's one at <a | ||||||
|  | href="https://www.old-computers.com/museum/computer.asp?st=1&c=1025">old-computers.com</a>: | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <a href="https://www.old-computers.com/museum/computer.asp?st=1&c=1025"> | ||||||
|  | <img src="tids990.jpg" style="max-width: 60%" alt="A DS990 at old-computers.com"></a> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | FluxEngine will read and write these (but only the DSDD MFM variant). | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read tids990 -s drive:0 -o tids990.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write tids990 -d drive:0 -i tids990.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The FD1000 Depot Maintenance | ||||||
|  |         Manual](http://www.bitsavers.org/pdf/ti/990/disk/2261885-9701_FD1000depotVo1_Jan81.pdf) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,27 @@ | |||||||
| -d | tiki | ||||||
| \r | ==== | ||||||
|  | ## CP/M | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Tiki 100 is a Z80-based Norwegian microcomputer from the mid 1980s intended | ||||||
|  | for eductional use. It mostly ran an unbranded CP/M clone, and uses fairly | ||||||
|  | normal CP/M disks --- IBM scheme and from 128 to 512 bytes per sector depending | ||||||
|  | on the precise format.  | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `90`: 90kB 40-track 18-sector SSSD | ||||||
|  |       - `200`: 200kB 40-track 10-sector SSDD | ||||||
|  |       - `400`: 400kB 40-track 10-sector DSDD | ||||||
|  |       - `800`: 800kB 80-track 10-sector DSDD | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read tiki --90 -s drive:0 -o tiki.img` | ||||||
|  |   - `fluxengine read tiki --200 -s drive:0 -o tiki.img` | ||||||
|  |   - `fluxengine read tiki --400 -s drive:0 -o tiki.img` | ||||||
|  |   - `fluxengine read tiki --800 -s drive:0 -o tiki.img` | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,62 @@ | |||||||
| -d | victor9k | ||||||
| \r | ==== | ||||||
|  | ## 1224kB 5.25" DSDD GCR | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Victor 9000 / Sirius One was a rather strange old 8086-based machine | ||||||
|  | which used a disk format very reminiscent of the Commodore format; not a | ||||||
|  | coincidence, as Chuck Peddle designed them both. They're 80-track, 512-byte | ||||||
|  | sector GCR disks, with a variable-speed drive and a varying number of sectors | ||||||
|  | per track --- from 19 to 12. Disks can be double-sided, meaning that they can | ||||||
|  | store 1224kB per disk, which was almost unheard of back then. Because the way | ||||||
|  | that the tracks on head 1 are offset from head 0 (this happens with all disks), | ||||||
|  | the speed zone allocation on head 1 differs from head 0... | ||||||
|  |  | ||||||
|  | | Zone | Head 0 tracks | Head 1 tracks | Sectors | Original period (ms) | | ||||||
|  | |:----:|:-------------:|:-------------:|:-------:|:--------------------:| | ||||||
|  | | 0    | 0-3           |               | 19      | 237.9                | | ||||||
|  | | 1    | 4-15          | 0-7           | 18      | 224.5                | | ||||||
|  | | 2    | 16-26         | 8-18          | 17      | 212.2                | | ||||||
|  | | 3    | 27-37         | 19-29         | 16      | 199.9                | | ||||||
|  | | 4    | 38-47\*       | 30-39\*       | 15      | 187.6                | | ||||||
|  | | 5    | 48-59         | 40-51         | 14      | 175.3                | | ||||||
|  | | 6    | 60-70         | 52-62         | 13      | 163.0                | | ||||||
|  | | 7    | 71-79         | 63-74         | 12      | 149.6                | | ||||||
|  | | 8    |               | 75-79         | 11      | 144.0                | | ||||||
|  |  | ||||||
|  | (The Original Period column is the original rotation rate. When used in | ||||||
|  | FluxEngine, the disk always spins at 360 rpm, which corresponds to a rotational | ||||||
|  | period of 166 ms.) | ||||||
|  |  | ||||||
|  | \*The Victor 9000 Hardware Reference Manual has a bug in the documentation  | ||||||
|  | and lists Zone 4 as ending with track 48 on head 0 and track 40 on head 1.  | ||||||
|  | The above table matches observed data on various disks and the assembly  | ||||||
|  | code in the boot loader, which ends Zone 4 with track 47 on head 0  | ||||||
|  | and track 39 on Head 1. | ||||||
|  |  | ||||||
|  | FluxEngine can read and write both the single-sided and double-sided variants.  | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  |   - Format variants: | ||||||
|  |       - `612`: 612kB 80-track DSHD GCR | ||||||
|  |       - `1224`: 1224kB 80-track DSHD GCR | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read victor9k --612 -s drive:0 -o victor9k.img` | ||||||
|  |   - `fluxengine read victor9k --1224 -s drive:0 -o victor9k.img` | ||||||
|  |  | ||||||
|  | To write: | ||||||
|  |  | ||||||
|  |   - `fluxengine write victor9k --612 -d drive:0 -i victor9k.img` | ||||||
|  |   - `fluxengine write victor9k --1224 -d drive:0 -i victor9k.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   - [The Victor 9000 technical reference manual](http://bitsavers.org/pdf/victor/victor9000/Victor9000TechRef_Jun82.pdf) | ||||||
|  |  | ||||||
|  |   - [DiskFerret's Victor 9000 format guide](https://discferret.com/wiki/Victor_9000_format) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,2 +1,42 @@ | |||||||
| -d | zilogmcz | ||||||
| \r | ==== | ||||||
|  | ## 320kB 8" 77-track SSSD hard-sectored | ||||||
|  | <!-- This file is automatically generated. Do not edit. --> | ||||||
|  |  | ||||||
|  | The Zilog MCZ is an extremely early Z80 development system, produced by | ||||||
|  | Zilog, which came out in 1976. It used twin 8-inch hard sectored floppy | ||||||
|  | drives; here's one at the <a | ||||||
|  | href="http://www.computinghistory.org.uk/det/12157/Zilog-Z-80-Microcomputer-System/">Centre | ||||||
|  | for Computing History</a>: | ||||||
|  |  | ||||||
|  | <div style="text-align: center"> | ||||||
|  | <a href="http://www.computinghistory.org.uk/det/12157/Zilog-Z-80-Microcomputer-System/"> | ||||||
|  | <img src="zilogmcz.jpg" style="max-width: 60%" alt="A Zilog MCZ at the Centre For Computing History"></a> | ||||||
|  | </div> | ||||||
|  |  | ||||||
|  | The MCZ ran Zilog's own operating system, Z80-RIO, and used 77 track | ||||||
|  | single-sided disks, with 32 sectors (each marked by an index hole), with 132 | ||||||
|  | bytes per sector --- 128 bytes of user payload plus two two-byte metadata | ||||||
|  | words used to construct linked lists of sectors for storing files. These | ||||||
|  | stored 320kB each. | ||||||
|  |  | ||||||
|  | FluxEngine has read support for these, including support for RIO's ZDOS file | ||||||
|  | system. | ||||||
|  |  | ||||||
|  | ## Options | ||||||
|  |  | ||||||
|  | (no options) | ||||||
|  |  | ||||||
|  | ## Examples | ||||||
|  |  | ||||||
|  | To read: | ||||||
|  |  | ||||||
|  |   - `fluxengine read zilogmcz -s drive:0 -o zilogmcz.img` | ||||||
|  |  | ||||||
|  | ## References | ||||||
|  |  | ||||||
|  |   * [About the Zilog MCZ](http://www.retrotechnology.com/restore/zilog.html), | ||||||
|  |     containing lots of useful links | ||||||
|  |  | ||||||
|  |   * [The hardware user's manual](https://amaus.org/static/S100/zilog/ZDS/Zilog%20ZDS%201-25%20Hardware%20Users%20Manual.pdf) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user