//************************************************************************************** //D0CS05.TST //By B. Rosen and M. Thomson February 7, 1979 //Sub Test Program for D0 CS Module //************************************************************************************** get "d0cs.d" //Edge pin and test connector signal busses available to this sub-test: //{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} //{CS-A': TrmCS-A.00'a,TrmCS-A.01'a,TrmCS-A.02'a, TrmCS-A.03'a,TrmCS-A.04'a,TrmCS-A.05'a, TrmCS-A.06'a,TrmCS-A.07'a,TrmCS-A.08'a, TrmCS-A.09'a,TrmCS-A.10'a,CS-A.11'} //{H2: H2.12, H2.13,H2.14,H2.15} //{R: 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} //************************************************************************************** //Test 9: Test Simple Read/Write Control Store let Test9() be [ SpeakTest(9) //set initial conditions (see notes at end of D0CS.TST) let v = vec 64 let str = v //This test reads location #1000, which is preloaded by boot to a known constant (#125252). //Then Write the complement of that into loc #1000 and verify that it worked by reading it out. str = "in first ReadCS" //WaitForKey("Before Load APC (with #1000)") {ALUA} = #1000; //First Instruction is an APC ← ALUA TwoClocks() //Load APC (with #1000) RxAPC() Check("APC",{R}ṡ,#1000,str,9000) //WaitForKey("Before read of first ReadCS, and after TwoClocks ") //Address should be coming from APC (=#1000) EClock() //1st cycle of read Check("CS-A",(not {CS-A'})ṡ,#1000,str,9001) //WaitForKey("middle of first ReadCS") EClock() //2nd cycle of read //The data is #125252... Loaded by LoadBootRom RxCSData() Check("CSData",{R},#52525,str,9002) //Now, the address should be coming from JA (=#422) EClock() //first cycle of fetch for read Check("CS-A",(not {CS-A'})ṡ,#422,str,9003) //WaitForKey("Now, the address should be coming from JA (=#422)") //CSData should stick around EClock() //t2 for read Check("CSData after fetch",{R},#52525,str,9004) str = "in first WriteCS" {ALUA} = #125252; //Data to be written into CS //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY AFTER ALUA 1252525",9009) {H2} = #12; //Data for extra 4 bits //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY AFTER H2= 12",9009) TwoClocks() //CSIn←Data @423 //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY AFTER TWO CLOCKS",9009) {ALUA} = #1000; //Address to write it in //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY AFTER AFTER ALUA =1000",9009) TwoClocks() //APC←Address @424 //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY AFTER TWO CLOCKS",9009) RxAPC() //Check("APC",{R}ṡ,#1000,str,9005) //address from APC EClock() //Start the write @424 Check("CS-A",(not {CS-A'})ṡ,#1000,str,9006) //address from JA EClock() //last cycle of write RxCSData() EClock() //1st cycle of fetch after write {LoadAPC'xxx} = {LoadAPC'} RxCSData() Check("CS-A",(not {CS-A'})ṡ,#425,str,9007) //WaitForKey("Middle of fetch after write") EClock() //finish fetch //We used the Restore option to Load APC, verify that output works Check("Restore'",{Restore'},0,str,9008) str = "in ReadCS after WriteCS" {ALUA} = #1000; //Address to write it in {H2} = 0; //select hi bits, ALUA is still #1000 TwoClocks() //APC←Address @425 RxAPC() Check("APC",{R}ṡ,#1000,str,9009) //Check("APC",{R}ṡ,0,"1000 is correct TEST CASE ONLY",9009) EClock() //start Read @426 Check("CS-A",(not {CS-A'})ṡ,#1000,str,9010) //Check("CS-A",(not {CS-A'})ṡ,0,"1000 IS CORRECT TEST CASE ONLY",9010) EClock() //finish read RxCSData() Check("CSData",{R},#125252,str,9011) EClock() //start fetch Check("CS-A",(not {CS-A'})ṡ,#427,str,9012) {ALUA} = #132754; //some bits get complemented EClock() //finish fetch, CSIn←Data {ALUA} = #1000 TwoClocks() //APC←Address @427 {H2} = 1; //select low bits TwoClocks() //Do WriteCS1 @430 TwoClocks() //finish fetch TwoClocks() //APC←#1000 @431 TwoClocks() //Read part of ReadCS @432 Check("CSData",{R},#132754,"in read after 2nd WriteCS",9013) {H2} = 0; //select hi bits TwoClocks() //finish read Check("CSData",{R},#132754,"in read after 2nd WriteCS",9014) {H2} = 3; //select extra 4 bits TwoClocks() //APC←1000 @433 TwoClocks() //ReadCS @434 Check("CSData",{R},#122754,"in read of extra 4 bits",9015) TwoClocks() //finish read ]