//************************************************************************************** //MISC2.TST //By C. Thacker and M. Thomson January 19, 1979 //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: //(none) //************************************************************************************** //Test 4: Test the CycleControl register (DBX,,MWX) (pages 5,6,7) let Test4() be [ SpeakTest(4) //set initial conditions (see notes at end of MISC.TEST) //cc contains DBX and MWX (via test connector from g10 (page 4) to tester socket "B") //{cc: DBX.2,DBX.3, DBX.4,DBX.5,MWX.0-b, MWX.1-b,MWX.2-b,MWX.3-b} //ccr is the high 8 bits of R (DBX[2:5],,MWX[0:3]) (page 7) //{ccr: R.00,R.01, R.02,R.03,R.04, R.05,R.06,R.07} {R←PCXF'}=0; //for R[0:3]←DBX[2:5], R[4:7]←MWX[0:3] when F2 not =#20 {F2}=#24; //for loadCycleControl and R←PCXF //Check CycleControl load and read DBX,,MWX for i = 0 to 7 do [ let x = 1 lshift i {ALUA}=x EClock() //for clkXLevel = EdgeClock.GoCycle1.(CycleControl← +...) //DBX[2:5]←ALUA[8:11], MWX[0:3]←ALUA[12:15] //readPCXF since F2 not =#20: R[0:3]←DBX[2:5], R[4:7]←MWX[0:3] WCompare({cc}, x,4000+i) //test via g10 test connector WCompare({ccr},x,4100+i) //test via rbus ] //Check that clkXLevel' is disabled properly (ccg = #164 is the "go" state) //{ccg: Suspend-a,Cycle0Feed', Abort',F2ok,F2.0, F2.1,F2.2,F2.3} {ALUA}=#377 EClock() //MWX←1111, DBX←1111 {ALUA}=#10; //alter DBX and MWX if illegal clkXLevel' occurs and F2=#24 during loop {F2.2}=1; //for F2=#26: loadDB EClock() //DB[0:5]←#10 to alter DBX if illegal clkXLevel' occurs and F2 not =#24 for i = 0 to 7 do [ let x = 1 lshift i {ccg} = #164 xor x EClock() //probe ccg WCompare({cc},#377,4200+i) //DBX and MWX should not change ] ] //************************************************************************************** //Test 5: Test the Iaddr register (page 1) and Test5() be [ SpeakTest(5) //set initial conditions (see notes at end of MISC.TEST) //{iaddr: Iaddr.0,Iaddr.1, Iaddr.2,Iaddr.3,Iaddr.4, Iaddr.5,Iaddr.6,Iaddr.7} //{ctask: CTask.0, CTask.1,CTask.2,CTask.3} //{ioval: H2.08,H2.09, H2.10,H2.11,H2.12, H2.13,H2.14,H2.15} //{noioval: BSEL.0,BSEL.1, F1.0,F1.1,F1.2, F1.3,LR,LT} for i = 0 to 7 do [ let x = 1 lshift i let y = (not i) & #377 for j = 0 to 15 do [ let n = (i lshift 4) % j let z = j lshift 4 {ctask} = j {ioval} = x {noioval} = y {IOInst} = 1; //select ioval % (ctask*16) as Iaddr input ClockAd() //load Iaddr WCompare({iaddr},x % z,5000,n) {IOInst} = 0; //select noioval % (ctask*16) as Iaddr input ClockAd() //load Iaddr WCompare({iaddr},y % z,5001,n) ] ] ] //************************************************************************************** //Test 6: Test the PCF and PCX registers (page 8) and Test6() be [ SpeakTest(6) //set initial conditions (see notes at end of MISC.TEST) //{PCF: PCF.0,PCF.1,PCF.2} //Initialize: {R←PCXF'}=0; //for R[8:11]←PCX[0:3], R[12:15]←PCF[0:3] when Rshift=0 {NewInst'}=0; //NewInst←1 to enable clkPCX' //Test the PCF[0:3]←(gnd, ALUA[13:15]) function, and //partially check PCX←PCF and the R[8:15] gates (a7) on page 7 {F2}=#34; //PCF←' ←0 (load PCF); Rshift=0 for R display //WaitForKey("F2=#34") for i = 0 to 7 do [ {ALUA}=i EClock() //PCF[0:3]←(gnd, ALUA[13:15]=i) WCompare({PCF},i rshift 1,6000,i) //PCF[0:2] edge-pins EClock() //clkPCX': PCX←PCF WCompare({rbus}Ź,(i lshift 4)%i,6010,i) //R[8:15]←PCX,,PCF ] //Test the PCF←PCF+1 function. //Completely check PCX←PCF and the R[8:15] gates (a7) on page 7. //Check the NextInstOpTrap logic. {ALUA}=0 EClock() //Load PCF with 0's WCompare({PCF},0,6011) //PCF[0:2] edge-pins, JUST TO BE SURE for i = 0 to 15 do [ //Check both inputs to gate h16c for NextInstOp'←0 (count PCF) {F1}=#36; //NextInst'←0, NextOp'←1; F2ok←0 for inhibit Load PCF //WCompare({PCF},7,6012) //PCF[0:2] edge-pins, JUST TO BE SURE {F1.3}=i; //NextInst'←1, NextOp'←0 if i[15]=1 //WCompare({PCF},7,6013) //PCF[0:2] edge-pins, JUST TO BE SURE EClock() //PCF←PCF+1 (PCX←PCF, insignificantly) //WCompare({PCF},7,6014) //PCF[0:2] edge-pins, JUST TO BE SURE {F1ok}=0; //for NextInstOp←0 //WCompare({PCF},7,6015) //PCF[0:2] edge-pins, JUST TO BE SURE EClock() //clkPCX': PCX←PCF; don't count PCF (since NextInstOp=0) //WCompare({PCF},7,6016) //PCF[0:2] edge-pins, JUST TO BE SURE let a = (i+1) //value that should be in PCX and PCF //WCompare({PCF},7,6017) //PCF[0:2] edge-pins, JUST TO BE SURE WCompare({PCF},a rshift 1,6020,i) //PCF[0:2] edge-pins WCompare({rbus}Ź,(a lshift 4)%a,6030,i) //R[8:15]←PCX,,PCF //Check the NextInstOpTrp logic (page 8) WCompare({NextInstOpTrp},(#77600 rshift i)&1,6040,i) //NextInstOp=0 {F1ok}=1; //for NextInstOp←1 WCompare({NextInstOpTrp},(#77700 rshift i)&1,6050,i) //NextInstOp=1 ] //Test the clkPCX' logic (page 9) //Status: PCX=0, PCF=0 //{clkPCXbus: NewInst',Suspend-a,Cycle0Feed'} EClock() //PCX←(PCF=0), PCF counts from 0 to 1 {F1ok}=0; //keep PCF=1 for i = 1 to 7 do [ {clkPCXbus} = i xor 1; //clkPCX' should stay inactive EClock() //don't PCX←(PCF=1), PCX should stay =0 WCompare({R.11},0,6100,i) //R.11=PCX.3=0 ] ]