//**************************************************************************************
//MISC3.TST
//By C. Thacker and M. Thomson February 15, 1979
//Modified by Frank Vest 6-12-80 to test rev. gb multiwire boards properly
//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:
//{mirbus: MemInst/d',RMOD/d, RSEL.0/d',RSEL.1/d',RSEL4and5/d}
//{promb19bus: ALUF.0,ALUF.1, ALUF.2,ALUF.3,SRC/DEST=0'}
//**************************************************************************************
//Test 7: Partially check the b19 prom and the b18, b17 flip-flops (page 1)
// (Only the edge-pin outputs are tested here; other outputs are tested later.)
let Test7() be
[
SpeakTest(7) //set initial conditions (see notes at end of MISC.TEST)
//{MC1/MC2outpins: MC1DQWRef',MC1QWRef', MC2AllowWrite,MC2DQWRef',MC2QWRef'}
let t7sb = table [ #37;#37;#37;#37; #04;#04;#37;#37;
#37;#37;#15;#15; #04;#04;#37;#37;
#33;#33;#11;#11; #04;#04;#33;#33;
#37;#37;#37;#37; #04;#04;#37;#37 ]
for i = 0 to 31 do
[
{promb19bus}=i
ClockAd() //b18 ff's ← b19 prom
ClockMC2() //b17 ff's ← b18 ff's
WCompare({MC1/MC2outpins},t7sb!i,7000,i)
]
//Check that clkAd' and clkMC2' are inactive when qualifiers are off
{promb19bus}=4; //for b19 prom, pin 1 =0
EClock() //LoadAd'=1, hence clkAd' is inactive
WCompare({MC1DQWRef'},1,7001) //should stay =1
ClockAd() //MC1DQWRef'←0
EClock() //AdvancePipe'=1, hence clkMC2' is inactive
WCompare({MC2DQWRef'},1,7002) //should stay =1
]
//**************************************************************************************
//Test 8: Test the PAbort logic (pages 1,2)
and Test8() be
[
SpeakTest(8) //set initial conditions (see notes at end of MISC.TEST)
{LoadMIR}=1; //all clocks except ClockCycle0 will load MIR
//Initial conditions from SpeakTest (partial list):
//EmRef=0, BPC-Refill'=1, StartFault'=1, MC2Active'=1, MC1Active'=1
//MC1Compa=0, MC1Compb=0, MC2Compa=0, MC2Compb=0, MemInst-a=0
//Cycle0=0
//Confirm that above terms result in all inputs to the a17 gate =1
ClockCycle0() //PAbort←0
WCompare({PAbort},0,8000)
//Test the pin 4,3,2 inputs to gate a17, check DC reset of PAbort (RUN=0)
//{t8dr1: StartFault', BPC-Refill',EmRef,NewInst'}
let t8sb1 = table [ 0;0;0;1; 1;1;1;1; 1 ]
for i = 0 to 8 do
[
{t8dr1} = i xor #15
ClockCycle0() //PAbort←t8sb1!i
WCompare({PAbort},t8sb1!i,8001,i)
]
{RUN}=0; //PAbort←0 (check DC reset)
{RUN}=1; //restore to normal
WCompare({PAbort},0,8002)
{StartFault'}=1; //deactivate for future tests
//Test the pin 1,5,6 inputs to gate a17, (StkpInUse logic)
//Test the StkpInUse signal by qualifying the a16a gate
{MC1Active'}=0
{RSEL.2/d}=1; //for StkpDown=1
{mirbus}=#31; //StkpInUse configuration:
//MemInst=0, RMOD=1, RSEL=11 xx 11
{promb19bus}=#12; //for prom b19, pin 7 =1
ClockAd() //MC1StkPf2P←1 (b18 ff), (raises StkPf2P since MC1Active=1)
//Load MIR (e16 ff's): StkpInUse←1, StkpDown←1
ClockCycle0() //PAbort←1 (a16a gate active)
WCompare({PAbort},1,8010)
//Check that clkMIR' is inactive unless Cycle0=0 and LoadMIR=1
//{clkMIRbus: Cycle0Feed',LoadMIR}
{RSEL4and5/d}=0; //a false clkMIR' would cause StkpInUse←0
for i = 0 to 2 do
[
{clkMIRbus}=i
EClock() //probe clkMIR' gate
ClockCycle0() //should not change PAbort since StkpInUse should stay =1
WCompare({PAbort},1,8012,i)
]
{LoadMIR}=1; //resume all clocks except ClockCycle0 will load MIR
//Check that StkpInUse is =0 in all mirbus cases except #31 (using the a16a gate)
for i = 0 to #36 do
[
{mirbus} = i xor 6
EClock() //Load MIR (e16 ff's): StkpInUse←0, StkpDown←1
ClockCycle0() //PAbort←0
WCompare({PAbort},0,8020,i)
]
//Check that StkpInUse properly qualifies gate a16b
{promb19bus}=#22; //for prom b19, pin 9 =1
{RSEL.2/d}=0; //for StkpUp=1
ClockAd() //MC1StkPsP←1, MC1StkPf2P←0, StkpUp←1, StkpDown←0
//b16d gate becomes active, b16b gate becomes inactive
ClockCycle0() //PAbort←0 since StkpInUse=0
WCompare({PAbort},0,8021)
{RSEL4and5/d}=1; //for mirbus=#31
EClock() //StkpInUse←1
ClockCycle0() //PAbort←1
WCompare({PAbort},1,8022)
//With StkpInUse=1, check all input values of signals to gates a16a and a16b
//{t8dr2: MC1Active',MC2Active', RSEL.2/d,ALUF.0,ALUF.1}
let t8sb2 = table [ 0;0;0;0;0;0;0;0; 0;0;0;1;0;0;1;0; 0;0;1;0;0;1;0;0 ]
//note: promb19bus=#22. Counting ALUF[0:1], then ClockAd, results in:
//ALUF[0:1]=1 => prom b19 addr =#12 => MC1StkPf2P←1 (otherwise ←0)
//ALUF[0:1]=2 => prom b19 addr =#22 => MC1StkPsP ←1 (otherwise ←0)
for i = 0 to 23 do
[
{t8dr2} = i xor #30
ClockAd() //load b18 ff's, load MIR (StkpDown←i[13])
ClockCycle0() //PAbort←t8sb2!i
WCompare({PAbort},t8sb2!i,8030,i)
ClockMC2() //load b17 ff's (placed here so b17's lag b18's for WCompare)
]
//check that all prom b19 addresses yield proper pin 7,9 outputs
//using b16b and b16d gates (MC1Active=1 and StkpInUse=1 from above logic)
let t8sb3 = table [
0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0; 1;0;1;0;0;0;0;0; 0;0;0;0;0;0;0;0;
0;0;0;0;0;0;0;0; 0;0;1;0;0;0;0;0; 0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0 ]
for i = 0 to 63 do
[
{RSEL.2/d} = i rshift 5; //for StkpDown←i[10]
{promb19bus} = i; //i[11:15]
ClockAd() //load b18 ff's, load MIR: StkpDown←i[10]
ClockCycle0() //PAbort←t8sb3!i
WCompare({PAbort},t8sb3!i,8040,i)
]
{RSEL4and5/d}=0
EClock() //load MIR: StkpInUse←0 (for future tests)
//Test the pin 11,12 inputs to gate a17 (InstReadingR and InstWritingR logic)
//{MC1/MC2Comp: MC1Compa, MC1Compb,MC2Compa,MC2Compb}
//{t8dr4: MC1Active',MC2Active', MemInst-a,ALUF.0,ALUF.1}
let t8sb4 = table [ 0;0;0;0;0;0;0;0; 0;0;1;1;0;0;1;0; 0;1;1;0;0;1;0;0; 0;1 ]
{promb19bus}=3; //Counting ALUF[0:1], then ClockAd, results in:
//ALUF[0:1]=1 => prom b19 addr =#13 => MC1PfP←1 (otherwise ←0)
//ALUF[0:1]=2 => prom b19 addr =#23 => MC1PsP←1 (otherwise ←0)
{MC1/MC2Comp}=#17; //enable gates f16a and f16b
{LR}=1
//note: ALUF[0:3]#0 (since ALUF.3=1, until changed later)
for i = 0 to 25 do
[
{t8dr4} = i xor #30
ClockAd() //load b18 ff's
ClockCycle0() //PAbort←t8sb4!i
WCompare({PAbort},t8sb4!i,8050,i)
ClockMC2() //load b17 ff's (placed here so b17's lag b18's for WCompare)
]
//Test the MC1/MC2Comp qualifiers
//Status: MC1Actve=1, MC2Active=1, MC1PfP=1, MC2PfP=1'
// MemInst-a=0, ALUF[0:3]#0, (hence a16c, a15b gates are active)
let t8sb5 = table [ 0;0;0;1; 0;0;0;1; 0;0;0;1; 1;1;1;1 ]
for i = 0 to 15 do
[
{MC1/MC2Comp} = i
ClockCycle0() //PAbort←t8sb5!i
WCompare({PAbort},t8sb5!i,8060,i)
]
//Test the a13a gate (ALUF[0:3]=0 disqualifies InstReadingR)
let t8sb6 = table [ 0;1;1;1; 1;1;1;1; 1 ]
for i = 0 to 8 do
[
{promb19bus} = i lshift 1; //ALUF[0:3]←i[12:15]
ClockCycle0() //PAbort←t8sb6!i
WCompare({PAbort},t8sb6!i,8070,i)
]
//Check that LR=0 disqualifies InstWritingR
{promb19bus}=#23
ClockAd() //MC1PsP←1, MC1PfP←0
ClockMC2() //MC2PsP←1, MC2PfP←0
ClockCycle0() //PAbort←1
WCompare({PAbort},1,8080)
{LR}=0
ClockCycle0() //PAbort←0
WCompare({PAbort},0,8081)
//Check that all prom b19 addresses yield proper pin 3,8 outputs
//using the a15b and a15c gates (MemInst-a still =0)
let t8sb7 = table [
0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0; 1;1;1;1;1;1;1;1; 0;0;0;0;1;1;0;0;
0;0;0;0;1;1;0;0; 1;1;1;1;1;1;1;1; 0;0;0;0;0;0;0;0; 0;0;0;0;1;1;0;0 ]
{MC2Active'}=1; //only MC1Active remains =1
for i = 0 to 63 do
[
{promb19bus} = i; //prom b19 addr.←i[11:15]
ClockAd() //load b18 ff's (MC1PfP, MC1PsP)
{promb19bus} = 0; //for ALUF[0:3]=0
{LR} = not (i rshift 5); //check MC1PsP when i[10]=0
{ALUF.3} = i rshift 5 ; //check MC1PfP when i[10]=1
ClockCycle0() //PAbort←t8sb7!i
WCompare({PAbort},t8sb7!i,8090,i)
]
//Test the InstReadingStack logic (page 2) (rev. J)
//Check that with StkpInUse=1, InstReadingStack=InstReadingR
{mirbus}=#31; //StkpInUse configuration:
//MemInst=0, RMOD=1, RSEL=11 xx 11
EClock() //clkMIR': StkpInUse←1
//{t8dr8: MemInst-a,ALUF.0, ALUF.1,ALUF.2,ALUF.3}
for i = 0 to 16 do
[
{t8dr8}=i
WCompare({InstReadingStack},(#177776 rshift i)&1,8100,i)
]
//Check that StkpInUse=0 disqualifies InstReadingStack
{MemInst-a}=0; //for InstReadingR←1
{RMOD/d}=0; // for StkpInUse←0
EClock() //clkMIR': StkpInUse←0
WCompare({InstReadingStack},0,8101)
]
//**************************************************************************************
//Test 9: Test the R parity logic (page 1)
// Test the IOStrobe logic (page 8) (revision E-1 and E-3 boards)
// Test the Odata.16 logic (page 1) (revision E-1 boards)
and Test9() be
[
SpeakTest(9) //set initial conditions (see notes at end of MISC.TEST)
//PART 1: Test the R parity logic (page 1)
//Test the RPByte0In and RPByte1In parity generators:
for i = 0 to 255 do
[
let a = i % (i lshift 8) //R bytes are equal
let par = i<<w.b8 xor i<<w.b9 xor i<<w.b10 xor i<<w.b11 xor
i<<w.b12 xor i<<w.b13 xor i<<w.b14 xor i<<w.b15
{rbus} = a
EClock()
WCompare({RPByte0In},par,9000,i)
WCompare({RPByte1In},par,9001,i)
]
//Test the RParityError' logic (gate e11c - page 1)
//{t9dr1: EnableRDlyd2,R.00, R.08,RPByte0,RPByte1}
let t9sb1 = table [
1;1;1;1;1;1;1;1; 1;1;1;1;1;1;1;1; 1;0;0;1;0;1;1;0; 0;1;1;0;1;0;0;1 ]
{rbus}=0; //initialize so R.00 and R.08 can control RPByte0In and RPByte1In
for i = 0 to 31 do
[
{t9dr1}=i
EClock() //RPByte0In←i[12], RPByte1In←i[13]
EClock() //h18b ff ← 0 if i[12]=i[13], else 1
WCompare({RParityError'},t9sb1!i,9100,i)
]
//PART 2: Test the IOStrobe logic (page 8) (revision E-1 and E-3 boards)
//Test to see if the IOStrobe signal is connected to Edge pin 47 and is =0 (F1=0)
WCompare({IOStrobe},0,9199) //fails if rev. E-1 not installed
let notrevE1 = {IOStrobe} //for preventing 62 stops on next loop in unmodified boards
for i = 0 to 63 do
[
{Cycle0Feed'} = i rshift 5; //GoCycle1←i[10] (for E-3 boards)
{F2}=i; //F2ok←i[11], F2[0:3]←i[12:15]
WCompare({IOStrobe},((i eq #63)&1) % notrevE1,9200,i)
//unmodified rev. E boards will not stop (due to notrevE1 term)
//modified rev. E boards with E-1 but not E-3 change should stop when i=#23
//modified rev. E boards with both E-1 and E-3 changes should not stop
]
//PART 3: Test the Odata.16 logic (page 1) (revision E-1 boards)
//{t9dr3: GateALUParity,RPByte0,RPByte1}
let t9sb3 = table [ 1;1;1;1; 1;0;0;1 ]
//Set old signal MC2EnableRP' to 1 for predictable failure on unmodified rev. E boards
ClockAd() //b18,pin12 ff ←1 (prom b19 address =0 from SpeakTest initialization)
ClockMC2() //b17,pin12 ff (MC2EnableRP') ← (b18,pin12 ff =1)
for i = 0 to 7 do
[
{t9dr3}=i
WCompare({Odata.16},t9sb3!i,9300+i)
//unmodified rev. E boards will stop when i=5,6
]
]