{
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...}