PDP-11/45: RK05 II - Head Load and Servo Calibration
Sun 09 April 2017 by Fritz MuellerOkay, disassembled and cleaned a few RK05 cartidges, following advice from the vcfed forum and cctalk mailing list (cleanroom gloves and wipes, 99% anyhydrous isoprop). Was surprised to find foam inside the hub on the disks (see pic below) but folks on vcfed advise that it is high-density polyeurethane and not subject to decay to the same extent as the other DEC foams, so I left it be.
Mounted one of the cleaned packs, and let it spin in the drive for a few hours with head load disabled in order to get a good flush on the air filtration system, let the various bearings on the drive loosen up, and make sure the replacement head retract batteries got a good charge. Drive ran quiet and balanced.
After that, took a deep breath and let the heads load -- no crash! Proceeded to work through the dynamic off-line calibration procedure for the head positioning servo system. This involves jumpering the control electronics on the drive to strobe simulated cylinder addresses from the sector counter. That provides a convenient source of oscillating seeks that can be used to calibrate the servos. Video here shows head load, a four cylinder oscillating seek, and a scope trace of the resulting sine position output of the electro-optical carriage position sensor:
Surprisingly, after about thirty years of non-operation, all of the servo calibration was within specified error bars, so no adjustments were necessary! At this point I decided to go for broke, cabled the drive to the RK11-C controller and attempted a boot. Some cncouraging front panel indicator activity, but soon halted with a seek error flagged in RKER. Not too surprising.
Okay, on to debugging the drive online with the controller, then. Worked up the following test code, inspired by something in one of the RK05 SPI workbooks. This reads two cylinder addresses from the high and low bytes of the front panel switches, and instructs the controller to instruct the drive to seek alternately between them:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 177570 SW=177570
177400 RKDS=177400
177404 RKCS=177404
177412 RKDA=177412
000000 .ASECT
001000 .=1000
001000 012706 000700 START: MOV #700,SP ;INIT STACK POINTER
001004 013700 177570 L0: MOV @#SW,R0 ;RETRIEVE SWITCHES
001010 000300 SWAB R0 ;LOWER SWITCHES TO UPPER
001012 004767 000012 JSR PC,SEEK ;DO THE SEEK
001016 013700 177570 MOV @#SW,R0 ;RETRIEVE SWITCHES
001022 004767 000002 JSR PC,SEEK ;DO THE SEEK
001026 000766 BR L0 ;START OVER
001030 042700 000377 SEEK: BIC #377,R0 ;MASK OFF LOWER BYTE
001034 072027 177775 ASH #-3,R0 ;SHIFT OVER TO CYL ADDRESS
001040 105737 177404 L1: TSTB @#RKCS ;CHECK RKCS RDY BIT
001044 100375 BPL L1 ;LOOP IF BUSY
001046 032737 000100 177400 L2: BIT #100,@#RKDS ;CHECK RKDS ARDY BIT
001054 001774 BEQ L2 ;LOOP IF BUSY
001056 010037 177412 MOV R0,@#RKDA ;WRITE SEEK TARGET TO RKDA
001062 012737 000011 177404 MOV #11,@#RKCS ;WRITE SEEK CMD + GO TO RKCS
001070 000207 RTS PC ;RETURN TO CALLER
001000 .END START
|
At first this code was generating no seek activity on the drive. Decided to try swapping out the BC11-A drive cable, and that produced some limited success -- drive seeks, but some bits of the cylinder address are still apparently not making it across the cable.
The BC11-A cables are problematic. They seem flaky and fragile, and many of my spares seem bad. Any given cable may beep out fine on the bench, and yet fail consistently in use... It looks like what's up next is a voyage through my box of spares, swapping in cables looking for one that works reliably. Failing that, I'll need work on some sort of modern replacement, since original BC11-A in good shape are getting hard to find. It will be sad if at the end of this journey I can't boot the machine for mere lack of a good cable between the drives and controller!