Presenting my latest experiment, a test program to check what FDC status codes are returned by an Atari-compatible drive when attempting to read various kinds of bad sectors. It's a test disk containing one of every kind of stable abnormal sector and a test program that reads each sector to retrieve the FDC status code. The reason for this test is to improve ATX image cross-compatibility and compatiblity against software that looks for specific FDC error codes, especially codes that are specific to disk drive models.
I'd be very interested in hearing what other people see on their hardware, but fair warning: it's not easy to create the physical test disk for this, as you can't write it with a stock 810/1050. I've attached it in ATX and SCP form. The ATX image will work for emulators, but a8rawconv 0.92 cannot write it correctly due to some bugs in address CRC error handling in the encoder. For that reason I've also included a pre-encoded SuperCard Pro (SCP) image, which is index-aligned for easier writing. It might be possible to copy it with one of the modded drives, but that would presume you already had a physical disk to copy from.
Below are expected results for a 1050 and XF551. They're from an emulator, but I've checked them against the real drives; I'm just too lazy to get out my camera.
A few interesting results I've already seen:
- The XF551 doesn't report missing sector errors, apparently due to a quirk in the 1772 FDC and the way the XF551 reads status. The command fails but the FDC status is $FF (no error).
- Some disk protection references report that the DRQ bit (bit 2) can be negated when a lost data condition is reported on a 1050, but all tests that I've run have always shown DRQ and Lost Data activated together.
- Several disk drive types don't seem to report long sector errors at all, including the Indus GT and Percom. This is because their sector read loops simply read the entire physical sector instead of the expected sector size. This is potentially interesting as it may offer a way to get custom code onto drives that don't natively support it via buffer overflow with a 1K sector.