Thanks Patrick! I had a look at the servo for Widget 2, and I think it's fine now. Many of the chips were socketed, so I pulled each, burnished the legs, applied contact cleaner, and reseated them all. The servo now passes all of the oscilloscope tests on your website, more or less (there's room for some adjustment, but things seem more or less OK). Now Widget 2's problem is that it can only read from Head 0; diagnostic reads from Head 1 yield something like the following:
> k101,101
160401010101E1 --> 00080000
> x
1209E4 --> 05090000
> s0,1
130100EB --> 00: 05090000
Standard Status:
No matching header found
Operation failed
Controller self test failed
Controller aborted last operation
130101EA --> 01: 05000000
Last logical block: 000000
130102E9 --> 02: 01010101
Last seek to cylinder 0101, head 01, sector 01
130103E8 --> 03: 01F90101
Current cylinder: 01F9
130104E7 --> 04: 81430102
Internal Status:
Auto recovery on
Controller LED on
Read a header after recal
Seek complete
Servo Auto-Offset is on
For the last system command,
* the current block is a Spare
130105E6 --> 05: 0001DBE0
Controller selftest failed:
* No spare table found
Z8 port 2:
* Disk R/W direction set to Read
* SIOrdy = 1
* MSel1 = 0
* MSel0 = 1
* /PBusy = 1
* /PCmd = 0
* ECC ok
* State machine is stopped
I/O control port 0x1F00:
* CRC ok
* Write valid
* ServoRdy = 1
* ServoErr = 0
State machine state 0
130106E5 --> 06: 88C09020
Last Read operation:
Read error occurred
CRC or ECC error occurred
ECC error detected
CRC error detected
Last Write operation:
Write error occurred
No matching header found
32 bad retries
130107E4 --> 07: 01010101
Last seek came from cylinder 0101, head 01, sector 01
I'll set Widget 2 aside now and return to Widget 1 for the time being...