//************************************************************************************** //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<