PDP-11/45: RK05 II - Head Load and Servo Calibration

Sun 09 April 2017 by Fritz Mueller

Okay, 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!