Sometime between 1996 and 1999 the drive in our AT&T 3B1 computer started blinking an error code and couldn't be read. With a full backup taking 70 floppies the last full backup was old. We decided to try to replace the control board on the drive to see if we could recover the data. The first drive we bought had a later revision of the board so couldn't be swapped with the dead drive. We later found an exact match. After swapping the board some of the drive was readable by the 3B1 but not enough to be useful. With the tools and information I had I was unable to make progress so it sat for many years.
In 2014 I started the MFM reader & emulator project with one of the goals to recover the contents of this drive. When I used it to read the drive 35% of the sectors were unreadable. For head 0 to 8 the number of tracks with errors were 0, 0, 0, 10, 931, 910, 1023, 1023. The last cylinder was the only one readable on head 6 and 7. I also saw from the errors that a few tracks it found a valid header with the cylinder number of the next cylinder. This indicated that the heads were off track. Unclear why the low heads were ok and the high were off.
Almost none of the later MFM drive schematics are available. Luckily this one now was. Pages numbered 28 to 30 have the head position servo loop logic. On page 28 U27 converts the signal from the servo head to normal and quadrature position error signals. I didn't find a datasheet for this chip but the similar SSI 32-H5676 datasheet is available The chip outputs normal and quadrature error signals that are ±2V around the reference voltage which was about 5.5V. U14 buffers the signals and generates inverted versions. The pattern repeats every 4 tracks where one of the four error signals generated will be at the reference voltage when the head is on track. The inverting of the error signal was to make the error signal have the same polarity for the direction the head is off track. On page 29 U15 selects the correct error signal for the current track. U6 generates the difference between the error signal and the reference. When in track following mode it goes through U7 to page 30 where the error is converted to a drive current for the head positioner voice coil.
I disabled the seeking for retries in mfm_read by disabling the logic that sets seek_len in drive_read_disk since I suspected the drive would have problems seeking with an offset voltage added. To read the disk I injected a voltage through a 10k resistor into U6 pin 9. I first started with VREF and verified the drive performed the same. I then lowered the signal and saw the error rate dropping. I stopped at about 5 volts and got a read with 13 errors. I then lowered the voltage to 4.7V and got zero errors. At this voltage offset the drive could step up during the read but could not return back to track 0. The injected offset voltage from VREF should not get too close to the 2V error signal since at some point the drive will not be able to control the head position,
I was quite happy to get no errors. I was surprised that I was able to read the higher heads without getting errors on the lower heads. It will have to remain a mystery exactly what was going on with the drive. I used my mfm emulator and verified the 3B1 would boot from the image recovered. I did a quick hack at adding writing to the MFM unit and was able to write the data back to the drive. The 3B1 was then able to read the disk without error. It seems like the drive is ok for now.