1FluxEngine 2========== 3 4(If you're reading this on GitHub, the formatting's a bit messed up. [Try the 5version on cowlark.com instead.](http://cowlark.com/fluxengine/) 6 7What? 8----- 9 10The FluxEngine is a very cheap USB floppy disk interface capable of reading and 11writing exotic non-PC floppy disk formats. It allows you to use a conventional 12PC drive to accept Amiga disks, CLV Macintosh disks, bizarre 128-sector CP/M 13disks, and other weird and bizarre formats. (Although not all of these are 14supported yet. I could really use samples.) 15 16The hardware consists of a single, commodity part with a floppy drive 17connector soldered onto it. No ordering custom boards, no fiddly surface 18mount assembly, and no fuss: nineteen simpler solder joints and you're done. 19You can make one for $15 (plus shipping). 20 21Don't believe me? Watch the demo reel! 22 23<div style="text-align: center"> 24<iframe width="373" height="210" src="https://www.youtube.com/embed/m_s1iw8eW7o" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 25</div> 26 27**New!** The FluxEngine client software now works with 28[GreaseWeazle](https://github.com/keirf/Greaseweazle/wiki) hardware. So, if you 29can't find a PSoC5 development kit, or don't want to use the Cypress Windows 30tools for programming it, you can use one of these instead. Very nearly all 31FluxEngine features are available with the GreaseWeazle and it works out-of-the 32box. See the [dedicated GreaseWeazle documentation page](doc/greaseweazle.md) 33for more information. 34 35**Important note.** On 2020-04-02 I changed the bytecode format (and firmware). 36Flux files will need to be upgraded with `fluxengine upgradefluxfile`. The new 37format should be more reliable and use way, way less bandwidth. Sorry for the 38inconvenience. 39 40Where? 41------ 42 43It's [open source on GitHub!](https://github.com/davidgiven/fluxengine) 44 45How? 46---- 47 48This page was getting kinda unwieldy so I've broken it up. Please consult the 49following friendly articles: 50 51 - [Frequently asked questions](doc/faq.md) ∾ but why...? ∾ does it...? ∾ can it...? 52 53 - [How the FluxEngine works](doc/technical.md) ∾ nitty gritty of the 54 sampler/sequencer hardware ∾ useful links on floppy drives ∾ why I'm not 55 using an Arduino/STM32/ESP32/Raspberry Pi 56 57 - [Making a FluxEngine](doc/building.md) ∾ what parts you need ∾ building it ∾ 58 setting up the toolchain ∾ compiling the firmware ∾ programming the board 59 60 - [Using a FluxEngine](doc/using.md) ∾ what to do with your new hardware ∾ 61 flux files and image files ∾ knowing what you're doing 62 63 - [Using GreaseWeazle hardware with the FluxEngine client 64 software](doc/greaseweazle.md) ∾ what works ∾ what doesn't work ∾ where to 65 go for help 66 67 - [Troubleshooting dubious disks](doc/problems.md) ∾ it's not an exact 68 science ∾ the sector map ∾ clock detection and the histogram 69 70 - [Checking your drive](doc/driveresponse.md) ∾ you can't do that with that ∾ 71 measuring your drive's ability to work with exotic formats 72 73Which? 74------ 75 76The current support state is as follows. 77 78Dinosaurs () have yet to be observed in real life --- I've written the 79decoder based on Kryoflux (or other) dumps I've found. I don't (yet) have 80real, physical disks in my hand to test the capture process. 81 82Unicorns () are completely real --- this means that I've read actual, 83physical disks with these formats and so know they work (or had reports from 84people who've had it work). 85 86### Old disk formats 87 88| Format | Read? | Write? | Notes | 89|:-----------------------------------------|:-----:|:------:|-------| 90| [IBM PC compatible](doc/disk-ibm.md) | | | and compatibles (like the Atari ST) | 91| [Acorn ADFS](doc/disk-acornadfs.md) | | * | single- and double- sided | 92| [Acorn DFS](doc/disk-acorndfs.md) | | * | | 93| [Ampro Little Board](doc/disk-ampro.md) | | * | | 94| [Apple II DOS 3.3](doc/disk-apple2.md) | | | doesn't do logical sector remapping | 95| [Amiga](doc/disk-amiga.md) | | | | 96| [Commodore 64 1541](doc/disk-c64.md) | | | and probably the other GCR formats | 97| [Brother 120kB](doc/disk-brother.md) | | | | 98| [Brother 240kB](doc/disk-brother.md) | | | | 99| [Brother FB-100](doc/disk-fb100.md) | | | Tandy Model 100, Husky Hunter, knitting machines | 100| [Macintosh 800kB](doc/disk-macintosh.md) | | | and probably the 400kB too | 101| [TRS-80](doc/disk-trs80.md) | | * | a minor variation of the IBM scheme | 102{: .datatable } 103 104`*`: these formats are variations of the generic IBM format, and since the 105IBM writer is completely generic, it should be configurable for these 106formats... theoretically. I don't have the hardware to try it. 107 108### Even older disk formats 109 110These formats are for particularly old, weird architectures, even by the 111standards of floppy disks. They've largely been implemented from single flux 112files with no access to physical hardware. Typically the reads were pretty 113bad and I've had to make a number of guesses as to how things work. They do, 114at least, check the CRC so what data's there is probably good. 115 116| Format | Read? | Write? | Notes | 117|:-----------------------------------------|:-----:|:------:|-------| 118| [AES Superplus / No Problem](doc/disk-aeslanier.md) | | | hard sectors! | 119| [Durango F85](doc/disk-durangof85.md) | | | 5.25" | 120| [DVK MX](doc/disk-mx.md) | | | Soviet PDP-11 clone | 121| [Micropolis](doc/disk-micropolis.md) | | | Micropolis 100tpi drives | 122| [TI DS990 FD1000](doc/disk-tids990.md) | | | 8" | 123| [Victor 9000](doc/disk-victor9k.md) | | | 8" | 124| [Zilog MCZ](doc/disk-zilogmcz.md) | | | 8" _and_ hard sectors | 125{: .datatable } 126 127### Notes 128 129 - IBM PC disks are the lowest-common-denominator standard. A number of other 130 systems use this format in disguise (the Atari ST, late-era Apple 131 machines, Acorn). FluxEngine supports both FM and MFM disks, although you 132 have to tell it which one. If you have an unknown disk, try this; you may 133 get something. Then [tell me about 134 it](https://github.com/davidgiven/fluxengine/issues/new). 135 136 - Not many formats support writing yet. That's because I need actual, 137 physical hardware to test with in order to verify it works, and I only 138 have a limited selection. (Plus a lot of the write code needs work.) 139 There hasn't been a lot of demand for this yet; if you have a pressing 140 need to write weird disks, [please 141 ask](https://github.com/davidgiven/fluxengine/issues/new). I haven't 142 implement write support for PC disks because they're boring and I'm lazy, 143 and also because they vary so much that figuring out how to specify them 144 is hard. 145 146If you have samples of weird disks, and want to send them to me --- either 147FluxEngine, Kryoflux or Catweasel dumps, or (even better) actually physically 148--- I can identify them and add support. 149 150Please note that at this point I am *not interested in copy protected disks*. 151It's not out of principle. It's just they'll drive me insane. FluxEngine will 152most likely be able to read the data fine, unless they're doing bizarre 153things like spiral tracks or partially encoded data, but let's stick with 154normal conventionally formatted disks for the time being! 155 156But! 157---- 158 159That said, I need to post a warning. 160 161<div style="text-align: center; color: red"> 162<b>********** BIG DISCLAIMERY WARNING WITH ASTERISKS **********</b> 163</div> 164 165Floppy disks are old, unreliable, and frequently damaged and/or filthy. I 166expect you to know what you're doing and be responsible for your own actions. 167It's entirely possible for a damaged disk, when read, to scrape the magnetic 168coating off the disk and pack it into the drive's disk head, not only 169permanently damaging the drive, but also irrecoverably destroying any data on 170the disk. 171 172If this happens and you complain to me, I will be sympathetic but 173fundamentally unhelpful. Proceed at your own risk. 174 175Remember: **FluxEngine is not a substitute for a real data recovery 176service.** Is your data worth money to you? If so, don't try to read it using 177an open source project hacked together by some person you've never met on the 178internet. 179 180Also, remember to clean your disk heads. 181 182<div style="text-align: center; color: red"> 183<b>********** END OF WARNING **********</b> 184</div> 185 186Who? 187---- 188 189The FluxEngine was designed, built and written by me, David Given. You may 190contact me at dg@cowlark.com, or visit my website at http://www.cowlark.com. 191There may or may not be anything interesting there. 192 193License 194------- 195 196Everything here _except the contents of the `dep` directory_ is © 2019 David 197Given and is licensed under the MIT open source license. Please see 198[COPYING](COPYING) for the full text. The tl;dr is: you can do what you like 199with it provided you don't claim you wrote it. 200 201As an exception, `dep/fmt` contains a copy of [fmt](http://fmtlib.net), 202maintained by Victor Zverovich (`vitaut <https://github.com/vitaut>`) and 203Jonathan Müller (`foonathan <https://github.com/foonathan>`) with 204contributions from many other people. It is licensed under the terms of the 205BSD license. Please see the contents of the directory for the full text. 206 207As an exception, `dep/emu` contains parts of the OpenBSD C library 208code, maintained by Todd Miller and William A. Rowe (and probably others). It is licensed 209under the terms of the 3-clause BSD license. Please see the contents of the 210directory for the full text. It's been lightly modified by me. 211 212As an exception, `dep/agg` contains parts of the Anti-Grain Antialiasing 213library, written by Maxim Semanarev (and others). It is licensed under the 214terms of the 3-clause BSD license. Please see the contents of the directory for 215the full text. It's been lightly modified by me. 216 217As an exception, `dep/stb` contains parts of the libstb utility library, 218written by Sean T Barett (and others). It is public domain/Unlicense/MIT 219licensed, at your choice. Please see the contents of the directory for the full 220text. 221 222