Commodore Amiga Floppy Analyzer

amiga_fl_analyzer

So I’ve toyed with the idea for quite some time about having a tool that was a little more “data” centric for analyzing floppy data. The Amiga Floppy Project Nostalgia client(which was the main Java client for the project) had fairly limited analysis capabilities. It was more ADF-generation tool than anything.

So I spent a couple nights on slapping something together, and this is what it looks like.

It does a bunch of things:

  • The input file is a “Delta T” file which contains time between pulses which are nominally 4us, 6us, and 8us for a LD amiga floppy. This can be generated a bunch of ways.
  • It identifies in range and out range values.
  • It plots all the values in the file on the top chart. Ideally, a really clean floppy read will have three distinct bands. I call these bands clusters. It shouldn’t have many values (outside of the track gap) far from the center line.
  • It locates these starting and ending boundary for each cluster using an adaptive read algorithm which removes things like motor speed variation from being an issue. It automatically adjusts the reading based on the form of the data!
  • It calculates an average for each cluster and displays it as a horizontal red-line on the graph.
  • It finds the magic 0x44894489 sync value and plots it as a green vertical line. Those are the start lines of each sector.
  • The top graph functions as a way to look at all ~50k delta T values and spot the outliers.
  • Next, bottom left, it plots a histogram showing the number of values in each cluster.
  • The bottom center has a text output display that gives cold hard numbers and resulting analysis like standard deviation for each cluster. Lower standard deviation values means a cleaner disk.
  • It decodes MFM using the adaptive cluster boundaries, and then calculates header checksums and datachecksums.
  • It performs (6) different tests on the data and you receive a bright green checkmark if all PASS.
  • If there’s a corrupted sector, then you can drill down into each sector

bad_sector

The above example shows you that Sector 5 is bad, clicking the RED sector number takes you here

sector_view

Where now your presented with a hex editor, and a copy of the Delta T’s restricted to just that sector.

Now I have very little time so far put into this application, and so it’s not even close to be ready for more-than-me consumption. Things that need to be done are:

  • It handles one track at a time, obviously, it has to handle a whole floppy at a time.
  • There’s no ability fix bad data values.
  • There needs to be an automatic mode where educated guesses can be plugged in, and re attempt the checksums. The problem is that the lousy 32-bit XOR checksum used has a potential false positive rate of 1/32. IE, you can’t brute force it because multiple values will work. (See my post on this topic)

I have some fairly unique methods in mind for fixing this data, but some details still need to be worked out.

Please feel free to comment below about the software.