{ Recalibrate.mc Description: debugging hack for Initial.mc Last Edited: bj, 10-Mar-86 23:56:12 } { Copyright (C) 1981 by Xerox Corporation. All rights reserved. } SetTask[0]; { control bits, high byte and other useful combinations } Set[driveSelectBit, 4], Set[faultClearBit, 2]; Set[faultClearCmd, Or[driveSelectBit, faultClearBit]]; recal: rE ← 20 ,c1; stepCount ← rE ,c2; Noop ,c3; rE ← faultClearCmd ,c1; KCtl ← rE LRot8 ,c2; KCtl ← 0 ,c3; recal0: Xbus ← KStatus, XRefBr ,c1; rE ← driveSelectBit, BRANCH[$, recal1] ,c2; {check for drive ready} rE ← KCtl ← rE LRot8, GOTO[recal0] ,c3; { disk is ready } recal1: rE ← driveSelectBit ,c3; {step out first} rE ← rE LRot8 ,c1; rE ← rE or inBit ,c2; KCtl ← rE LRot0 ,c3; { Step bit must be high for at least one microsecond and then low for at least one microsecond. Since a click is 411 ns, stepBit can change only once every third click. } check00: rD ← ~KStatus, CANCELBR[$, 1] ,c1, at[0B, 10, check00]; rD ← rD LRot8, XDisp ,c2; {pick up status} [] ← rD and 2, ZeroBr, DISP4[check00, 0B] ,c3; {check for seek complete} seekComplete: rE ← rE or stepBit, BRANCH[at00, $] ,c1, at[0F, 10, check00]; KCtl ← rE LRot0 ,c2; rD ← 3 ,c3; seekWait: rE ← rE and ~stepBit ,c1; rD ← rD-1, ZeroBr ,c2; BRANCH[seekWait, $] ,c3; rD ← stepCount, ZeroBr ,c1; KCtl ← rE LRot0, BRANCH[$, countedOut] ,c2; rD ← rD-1 ,c3; stepCount ← rD ,c1; Noop ,c2; GOTO[check00] ,c3; countedOut: Noop ,c3; rD ← rE and inBit ,c1; [] ← rD, ZeroBr ,c2; rE ← rE xor inBit, BRANCH[$, recalLost] ,c3; rD ← 0FF+1 ,c1; {max is 256 cylinders for SA1000} rD ← LShift1 rD ,c2; stepCount ← rD, GOTO[check00] ,c3; recalLost: Noop ,c1; Noop ,c2; GOTO[recalLost] ,c3; at00: Noop ,c2; Noop ,c3; GOTO[at00] ,c1; {eof...}