//**************************************************************************************
//MISC8.TST
//By C. Thacker and M. Thomson October 6, 1978
//Sub Test Program for D0 MISC Module
//**************************************************************************************
get "misc.d"
//Edge pin signal busses used by all MISC test modules:
//{ALUA: ALUA.00, ALUA.01,ALUA.02,ALUA.03, ALUA.04,ALUA.05,ALUA.06, ALUA.07,ALUA.08,ALUA.09, ALUA.10,ALUA.11,ALUA.12, ALUA.13,ALUA.14,ALUA.15}
//{F1: F2ok,F1ok,F1.0, F1.1,F1.2,F1.3}
//{F2: F1ok,F2ok,F2.0, F2.1,F2.2,F2.3}
//{rbus: R.00, R.01,R.02,R.03, R.04,R.05,R.06, R.07,R.08,R.09, R.10,R.11,R.12, R.13,R.14,R.15}
//**************************************************************************************
//Edge pin signal busses and manifests used by this particular MISC test module:
//{Rsource: R←PCXF',R←DBSB',R←NBR', F1ok,F2ok,F2.0, F2.1, F2.2,F2.3}
//**************************************************************************************
//Test 15: Test MNBR and DBSB (pages 5,6,7)
//Note: Certain irregular coding techniques are used during this test to reduce execution time.
let Test15() be
[
SpeakTest(15) //set initial conditions (see notes at end of MISC.TEST)
//{DBR: R.04,R.05,R.06, R.07,R.08,R.09}
//{SBR: R.10,R.11,R.12, R.13,R.14,R.15}
//Test MNBR and DBSB load and read
for i = 0 to 15 do
[
let x = 1 lshift i
{ALUA}=x
{F2}=#33; //loadMNBR
EClock() //MNBR[0:15]←ALUA[0:15]
{Rsource}=#620; //readMNBR
WCompare({rbus},x,15000+i)
]
for i = 0 to 5 do
[
let x = 1 lshift i
{ALUA}=x
{F2}=#26; //loadDB
EClock() //DB[0:5]←ALUA[10:15]
{Rsource}=#520; //readDBSB
WCompare({DBR},x,15100+i)
]
for i = 0 to 5 do
[
let x = 1 lshift i
{ALUA}=x
{F2}=#25; //loadSB
EClock() //SB[0:5]←ALUA[10:15]
{Rsource}=#520; //readDBSB
WCompare({SBR},x,15200+i)
]
//Test increment of MNBR by MWX (BBFA=> MNBR← MNBR+MWX +1)
for i = 0 to 15 do
[
for j = 0 to 15 do
[
{ALUA}=i
{F2}=#33; //loadMNBR
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //MNBR[0:15]←(ALUA[0:15]=i)
{ALUA}=j
{F2}=#24; //loadCycleControl
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //MWX[0:3]←(ALUA[12:15]=j)
//set up BBFA (loads MNBR with MNBR+MWX+1)
{F1}=#20; //BBFA'←0, F2ok←0
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //MNBR[0:15]←((MNBR=i)+(MWX=j)+1)
{Rsource}=#620; //R←NBR'←0, F2←#20 (Rshift=1), F1ok←0, F2ok←1
WCompare({rbus},i+j+1,15300+i,j)
]
]
//Test increment of SB and DB by (MWX+1)
{Rsource}=#520; //R←DBSB'←0, F2←#20, F1ok←0, F2ok←1
//F1[0:3]=0 from prior logic (for BBFA'←0 when F1ok=1)
for i = 0 to 15 do
[
{ALUA}=i
{F2.1}=1; //for F2=#24: loadCycleControl
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //MWX[0:3]←(ALUA[12:15]=i)
let iplus1 = i + 1
for j = 0 to 63 do
[
{ALUA}=j
{F2.1}=1; {F2.3}=1; //for F2=#25: loadSB
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //SB[0:5]←(ALUA[10:15]=j)
{F2.2}=1; {F2.3}=0; //for F2=#26: loadDB
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //DB[0:5]←(ALUA[10:15]=j)
{F1ok}=1; {F2ok}=0; //BBFA'←0; DB←' ←1
{EdgeClockFeed'}=0
{EdgeClockFeed'}=1; //SB ← SB+MWX+1, DB ← DB+MWX+1
let sb = (iplus1 +j)M
//Set up R[4:9]←DB[0:5], R[10:15]←SB[0:5]
{F2}=#20; //F2←#20 (for RShift'←0), F1ok←0, F2ok←1
WCompare({SBR},sb,15400+i,j)
WCompare({DBR},sb,15500+i,j)
]
]
//Test bits [0:11] of the MNBR adder.
//Check one hex digit at a time, starting with bits [8:11].
//Clear MWX so that MNBR will have exclusive control of carries
{ALUA}=0
{F2}=#24; //loadCycleControl
EClock() //MWX[0:3]←(ALUA[12:15]=0)
for i = 4 to 12 by 4 do
[
let p = #7777 rshift (12-i); //carry propagator
for j = 0 to 15 do
[
let a = j lshift i
{ALUA}=a; //place j in hex digit selected by i
{F2}=#33; //loadMNBR
EClock() //clkMNBR': MNBR←(ALUA=a)
{Rsource}=#660; //R←NBR'←0, F2←#20 (Rshift=1), F1ok←1 (BBFA'←0)
EClock() //clkMNBR': MNBR←(MNBR+1)
WCompare({rbus},a+1,15600+i,j)
{ALUA} = a % p; //propagate carry into hex digit selected by i
{F2}=#33; //loadMNBR
EClock() //clkMNBR': MNBR←(ALUA=a%p)
{Rsource}=#660; //R←NBR'←0, F2←#20 (Rshift=1), F1ok←1 (BBFA'←0)
EClock() //clkMNBR': MNBR←(MNBR+1)
WCompare({rbus},(j+1) lshift i,15700+i,j)
]
]
//Test BBDisp.0, BBDisp.1, BBDisp.2 (pages 5,6)
//{BBDisp: BBDisp.0,BBDisp.1,BBDisp.2}
let BBsb = table [ 3;3;3;3; 7;6;5;4 ]
//The following loop causes: BBDisp.0←i[13], SBLast←i[14], DBLast←i[15]
for i = 0 to 7 do
[
{ALUA} = i lshift 13
{F2}=#33; //loadMNBR
EClock() //MNBR←(ALUA=i lshift 13), hence BBDisp.0=i[13]
{ALUA} = -1 * ((i rshift 1)&1)
{F2}=#25; //loadSB
EClock() //SB←(ALUA=-1) if i[14]=1 (else 0), hence SBLast=i[14]
{ALUA} = -1 * (i&1)
{F2}=#26; //loadDB
EClock() //DB←(ALUA=-1) if i[15]=1 (else 0), hence DBLast=i[15]
WCompare({BBDisp},BBsb!i,15800+i)
]
]