Files
fluxengine/doc/driveresponse.md
2021-01-13 20:05:13 +01:00

3.7 KiB

Analysing drive response

Not all PC drives are made equal. Some are less equal than others.

The way floppy disk storage works is that the floppy drive controller will generate a series of pulses, which the drive stores on the disk. Then, when the disk is read, the drive will reproduce the same series of pulses and return it to the floppy drive controller. The data is stored in the intervals between pulses.

The problem is that some PC drives assume that they're going to be used with IBM scheme disks, which use particular pulse intervals --- in the case of DD disks, intervals are always 4us, 6us or 8us. So, in a misguided attempt to improve reliability, they sometimes... tidy... the incoming pulse stream. This can have nasty effects if you're not a disk which doesn't use those intervals.

In addition, they won't work properly if the intervals are too great, or too small. Partly this is a limitation of the underlying physics of the magnetic media, and partly it's due to the drive's automatic gain adjustment: if the drive doesn't see a pulse, it'll start ramping up the gain of its amplifier, until it starts interpreting random noise as a valid pulse.

FluxEngine has a tool to analyse a drive and report on this behaviour. It works by writing a sequence of timed pulses to the disk, then reading them back and seeing what the drive actually reports. To use it, do:

fluxengine analyse driveresponse -d :d=1:t=0 \
    --min-interval-us=0 --max-interval-us=30 --interval-step-us=.1 \
	--write-img=driveresponse.png

This will scan all intervals from 0us to 30us, at 0.1us steps, draw a graph, and write out the result. The graphs look like this.

(Click to expand)

Sony MPF-920, DD Sony MPF-920, HD

This is the analysis from the Sony MPF-920 3.5" drive I mostly use for testing. The left-hand image shows the result from a DD disk, while the right hand image shows the result from a HD disk.

The horizontal axis is the width of pulse being written; the vertical axis and heatmap shows the distribution of pulses being read back. You can see the diagonal line, which represents correct pulses. The triangular smear in the bottom right shows spurious pulses which are being read back because the interval is too great; these start at about 12us for DD disks and 7us for HD disks. This is an artifact of the different magnetic media for the two types of disk.

(This, by the way, is why you shouldn't use DD formats on HD disks. The intervals on a DD disk can go up to 8us, which is on the edge of the ability of an HD disk and drive to correctly report back the pulses.)

You also note the hard cut-off on the left: this represents the filter on the drive, which will simply refuse to report pulse intervals shorter than about 1.5us. FluxEngine itself can't write intervals shorter than 2us.

For comparison purposes, here's another set of graphs.

FDD-90206, DD FDD-90206, HD

This is from another drive I have; it's an unbranded combo card-reader-and-floppy drive unit; the 90206 is the only identification mark it has. The DD graph shows that intervals below about 4us are reported as double what they should be: so, this drive won't work on Macintosh 800kB formats at all, because they use intervals starting at 2.6us, below this limit. But it should work on PC formats --- just.