//**************************************************************************************
//D0CS09.TST
//By B. Rosen and M. Thomson February 21, 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 14: Test Almost all of Control Store Ram
let Test14() be
[
SpeakTest(14) //set initial conditions (see notes at end of D0CS.TST)
let v = vec 64
let str = v
//This test is similar to test 13, except the data stored and retrieved is the
// complement of that used in Test 13.
TwoClocks() //Load Page 2 @1411
TwoClocks() //goto page 2 @1425
Ws("*nWriting Page")
RxCSData()
let d = #123456 //start random data
for l = 0 to 15 do //16 pages
[
Ws(FORMATN(" <B>",l))
FORMAT(str,"in dual address complement test write of Page <B>",l)
for k = (l gr 3? 0,1) to 3 do //64 word quarter pages, don't do first quarter
[
let lk = (l lshift 8) % (k lshift 6) //form address bits [4:9]
for j = 0 to 1 do //first two passes have extra Checks
[
let i = lk % j //form address
d = (d<<w.b1 xor d<<w.b4) % (d lshift 1); //up-date random data
let e = not d
{ALUA} = e; //Data to be loaded
{H2} = e; //extra 4 bit data
TwoClocks() //CSIn← @1022
{ALUA} = i; //Address to load
TwoClocks() //APC← @1003
Check("Cycle0Feed'",{Cycle0Feed'},0,"before write",14000,i)
EClock() //WriteCS @1004
Check("CS-A'",{CS-A'} xor #7777,i,"middle of write",14001,i)
{LoadAPC'xxx} = {LoadAPC'}
TwoEClocks()
Check("CS-A'",{CS-A'} xor #7777,#1005,"middle of fetch",14002,i)
{LoadAPC'xxx} = {LoadAPC'}
EClock()
{H2.15} = 0; //CSData[0:15] ← bits[0:15]
FourClocks() //APC← @1005; ReadCS @1006
Check("Msb Read Data",{R},e,str,14100,i)
{ALUA} = e; //Data to be loaded
TwoClocks() //Read Fetch
{ALUA} = i; //Address to load
FourClocks() //APC← @1007; WriteCS1 @1010
TwoClocks() //Write Fetch
//there is a branch instruction at the end of the loop
{J-TestResult'} = (i eq 4095?0,1)
TwoClocks() //Branch Loop @1011
]
for j = 2 to 63 do //remaining passes omit extra Checks for speed
[
let i = lk % j //form address
d = (d<<w.b1 xor d<<w.b4) % (d lshift 1); //up-date random data
let e = not d
{ALUA} = e; //Data to be loaded
{H2} = e; //extra 4 bit data
TwoClocks() //CSIn← @1022
{ALUA} = i; //Address to load
TwoClocks() //APC← @1003
FourClocks() //insert note here ******
{H2.15} = 0; //CSData[0:15] ← bits[0:15]
FourClocks() //APC← @1005; ReadCS @1006
Check("Msb Read Data",{R},e,str,14200,i)
{ALUA} = e; //Data to be loaded
TwoClocks() //Read Fetch
{ALUA} = i; //Address to load
FourClocks() //APC← @1007; WriteCS1 @1010
TwoClocks() //Write Fetch
//there is a branch instruction at the end of the loop
{J-TestResult'} = (i eq 4095?0,1)
TwoClocks() //Branch Loop @1011
]
]
]
EClock() //Burp
{J-TestResult'} = 1
TwoClocks() // Noop @1023
Check("CS-A",(not {CS-A'})ṡ,#1013,"between write and read",14300)
Ws("*nReading Page")
let d = #123456 //start random data
for l = 0 to 15 do //16 pages
[
Ws(FORMATN(" <B>",l))
FORMAT(str,"in dual address complement test read of Page <B>",l)
for k = (l gr 3? 0,1) to 3 do //64 word quarter pages, don't do first quarter
[
let lk = (l lshift 8) % (k lshift 6) //form address bits [4:9]
for j = 0 to 63 do
[
let i = lk % j //form address
d = (d<<w.b1 xor d<<w.b4) % (d lshift 1); //up-date random data
let e = not d
{ALUA} = i; //Address to read
{H2.15} = 0; //CSData[0:15] ← bits[0:15]
FourClocks() //APC←; ReadCS0
Check("Msb Read Data",{R},e,str,14400,i)
TwoClocks() //Read Fetch
{H2.15} = 1; //CSData ← LCSD[0:3],,bits[20:31]
{H2.14} = 0; //LCSD[0:3] ← bits[16:19]
FourClocks() //APC←; ReadCS1
Check("Middle Read Data",{R},e,str,14401,i)
TwoClocks() //Read Fetch
{H2.14} = 1; //LCSD[0:3] ← bits[32:35]
FourClocks() //APC←; ReadCS2
Check("Xtra Read Data",{R}𩠐,e lshift 12,str,14402,i)
TwoClocks() //Read Fetch
{J-TestResult'} = (i eq 4095?0,1)
TwoClocks() //Branch Loop
]
]
]
EClock() //Burp
]