Analyser: Generic MFM - Loads of new stuff...


Support any kind of “EDC and EDC” area through the script generation

Real checksums are being scripted with proper areas, whereas in the old system only placeholders were possible apart from CRC16. Now every detected checksum is scripted. Data without checksum or with a fake checksum is automatically scripted to use MFM integrity tests instead.

Gap encoding into the script

Partially done; currently only happens when the gap is between the sector header and data.

Final script generation

Done, supports much better automatic detection of sector sizes and overlapping areas. Should any geometry need to be truncated the track is flagged with “X”, meaning there are incomplete data parts of block and other related conditions. Such track may contain a possibly unrecognised track geometry based protection so this is a nice warning sign. If the data after truncation no longer represents its intended use (e.g. a 16 bit value cut in half), the data is demoted to a suitable format instead.

The track name now reflects the intended geometry

Previously the track name was only what could be fully recovered, i.e Amstrad CPCTitan track 14 now correctly shows that is meant to have 19 blocks numbered 0...18.


  • Varying sector numbers are no longer flagged as a violation (instead get displayed); repeated sectors are. If the sector numbers are not displayed in the name, it means that they do not conform to a single logical set.
  • Intended sector length protection is now correctly flagged - i.e. disks intended for controllers with different sector length capabilities are no longer flagged, data that requires sector length bit truncation to resolve is flagged.
  • Fairly intelligent naming of formats.
  • Some internal state integrity checking added - previous warnings shown have now been made redundant.
  • One regression (which can be considered an enhancement... as the useless warning is gone): marks encoded into certain gap areas or weak sectors are no longer generating a warning automatically, especially since most of the time it was incorrectly flagged, for example, flagging random garbage in weak sectors or unwritten areas.

Still To Do

  • Gap detection and encoding into the script - when outside header and data blocks.
  • Proper detection of marks in data or gap areas and scripting them. This is now possible with much better accuracy as clocking violations, weak data, etc., are recognised.
  • Supporting non-duplicated data (low priority), through re-aligning as a master image.
  • Re-alignment of sectors containing weak data (low priority) - this is not really necessary, the data is correct anyway, but this effectively would create a proper master image as it was before the weak data got added.

The latter two require pretty much the same re-alignment code to be implemented.

  • Supporting deterministic weak data in both the analyser and the library (very low priority) - only a handful of games ever used this.
  • Script generator specific detection of geometry inconsistency; i.e. the tracks currently marked as “extra”, highlighting any suspect/modified track even if the write splice test passes. Right now it’s a bit trigger happy as it has no idea what “normal” is, as that can and does change according to the varying track layout - this is not the case with Amiga formats.
  • Script generator specific detection of where track writing should start.