Arduino Amiga Floppy Disk Reader/Writer

Open Source and Free! - by Robert Smith


Using WinUAE

I spent over two months figuring out enough of how WinUAE works to come up with a universal interface to add physical floppy disk support.

The drive won't read/write as fast as it would in a native machine, that's just a side effect of emulation vs physical reality especially without causing WinUAE to freeze while disk access happens.

Why would I do this? Well sometimes it's just easier to drop a disk in rather than converting it to ADF, and also, there's those original copy protected disks. I've succeeded in running Lemmings (and Lemmings 2 The Tribes), Captain Planet, Bart vs the Space Mutants, and a few others too.

For help, and discussion, Join the Discord Channel.

THIS WILL NOT WORK WITH EVERY DISK, try to avoid Kickstart 1.3 or older. This is purely experimental. Standard AmigaDOS disks seem fine. Some games will work.

While developing this interface (aka floppybridge) I also added support for Greeseweazle by Keir Fraser (also makes the FlashFloppy software)

Toni Wilen, the official maintainer of WinUAE is a busy guy, so while I'm waiting for him to be ready to include this in the official WinUAE build, I have provided a temporary preview build

Downloading the Temporary Preview Build

NOTE: As this is a preview, it may contain bugs and issues currently being fixed both in this code and in the version of WinUAE this was built from. So don't expect it to work perfectly!

Firstly, make sure your drive is working properly with the normal software. It MUST be running V1.8 of the firmware and ideally have the new wiring to perform the best.

Next, download and install WinUAE from https://www.winuae.net/ as usual. After its installed, locate the installed files and replace the exe files with the ones from the following zip:
By downloading this you agree to the Licence Agreement

winuae_floppydisk_preview.zip (14.8MB)
If you don't like it you can always re-install the original ones.

Configuration

Once WinUAE is loaded, configure it how you usually would, then navigate to the Expansions section:


Then, from the Expansion Board Settings select Disk controllers:


Then, from the second menu, choose Arduino Reader/Writer (RobSmithDev):

Yes, I made this available to Greaseweazle boards too. The Catweasel option is nothing to do with me and I don't think it works anyway...

VERY important, click the Enabled box:


Then, choose which drive you want to replace, either DF0, DF1, DF2 or DF3. This will cause WinUAE to ignore any settings you currently have defined for those drives:



Fast: Uses every trick in the book to ensure the emulation is smooth, doesn't stutter with graphics, audio etc. It finds complete disk revolutions by timing one revolution and using that to estimate where others should be, and then runs a pattern matching algorithm to stitch it up correctly. It also tries to read-ahead by reading the opposite side of the disk if it can. This is the fastest method and works 99% of the time.

More Compatible: Slower than the above, but still will not cause the emulation to stutter. This uses the disk INDEX messages to work out a disk revolution. It is more accurate than the above as it doesn't rely on timings, but takes longer to read, it also runs a pattern matching algorithm to stitch it up correctly.

Accurate, but Stalling: In rare cases, usually within Kickstart 1.3 or older, some disks may need this. It will freeze WinUAE when part of a disk is requested that hasn't been read yet to ensure WinUAE receives it exactly when it thinks it should. This would be bad practice on part of the software needing this, but it is possible, and some copy protections might need this too.


Now, select the COM port you have your Arduino reader/writer connected on, or leave it on Auto Detect, and you're good to go!