Because the cwtool support for Intel M2FM floppy disk flux images
isn't publicly available, I've written a crude Python 3 program for
converting such images (in DFI format) to ImageDisk images, and put it
on github:
https://github.com/brouhaha/dfitoimd
My ADPLL data separator has parameters to control the proportions of
frequency adjustment and instantaneous phase adjustment that are done
at each flux transition. I've experimented with the parameters quite a
bit, but it's still not good enough to reliably recover all sectors
from the disk images that started this thread. The
default parameters
are currently 0.5% frequency adjustment and 10% instantaneous
phase
adjustment. I was actually fairly surprised that I didn't get better
results with more frequency adjustment and less instantaneous phase
adjustment. It's entirely possible that my algorithm isn't very good.
The code can handle normal IBM 3740 single-density FM format as well,
though there are other published programs that already do that.
There's a start at code for IBM System/34 double-density MFM format
also, but it hasn't been tested at all as I don't happen to have any
suitable DFI images.
The dfitoimd program is quite slow; on a typical Intel M2FM image with
two revolutions per track and 25 MHz sampling, it takes 64 seconds on
a 4.0 GHz AMD CPU. I'm pretty sure that rewriting it in C/C++/C# or
the like would make it much faster, but I specifically chose Python as
I find it easier to experiment with the algorithms.