//**************************************************************************************
//ECLutvfca.TST
//*** Rev.H May30,1979
//***Rev. B June 19.1978
//V.Vysin
//Main Test Program and Subroutines for UTVFC Controller Module
//**************************************************************************************
//**************************************************************************************
//To include the following definition files in the compilation
get "tester.d"
get "ECLutvfc.d"
//**************************************************************************************
//To define bus structure
//{CTask: CTask.0, CTask.1, CTask.2, CTask.3}
//{IAddr: Iaddr.0, Iaddr.1, Iaddr.2, Iaddr.3, Iaddr.4, Iaddr.5, Iaddr.6, Iaddr.7}
//{IDataM: Idata.00, Idata.01, Idata.02, Idata.03, Idata.04, Idata.05, Idata.06, Idata.07}
//{IDataL: Idata.08, Idata.09, Idata.10, Idata.11, Idata.12, Idata.13, Idata.14, Idata.15}
//{IData0: Idata.00, Idata.01, Idata.02, Idata.03}
//{IData1: Idata.04, Idata.05, Idata.06, Idata.07}
//{IData2: Idata.08, Idata.09, Idata.10, Idata.11}
//{IData3: Idata.12, Idata.13, Idata.14, Idata.15}
//{ODataM: Odata.00, Odata.01, Odata.02, Odata.03, Odata.04, Odata.05, Odata.06, Odata.07}
//{ODataL: Odata.08, Odata.09, Odata.10, Odata.11, Odata.12, Odata.13, Odata.14, Odata.15}
//{OData0: Odata.00, Odata.01, Odata.02, Odata.03}
//{OData1: Odata.04, Odata.05, Odata.06, Odata.07}
//{OData2: Odata.08, Odata.09, Odata.10, Odata.11}
//{OData3: Odata.12, Odata.13, Odata.14, Odata.15}
//{Clocks: ClkCR', ClkStart', ClkIAR', WriteHorCont', WriteOddBuf', WriteEvenBuf'}
//{WakeP' : WakeP1', WakeP2', WakeP3'}
//**************************************************************************************
//Clocking routines defined on p. 5
let RClock() be
[
SetPinValue(8,0 ); //RamClkFeed' is normally high
SetPinValue(8,1)
]
and EClock() be
[
SetPinValue(7,0 ); //EdgeClkFeed' is normally high
SetPinValue(7,1)
]
and Clocks() be
[
RClock()
EClock()
]
and SetOaddr(g) be
[
SetBusValue(8,141,205,142,206,144,208,145,209,g)
SetPinValue(16,0)
EClock()
SetPinValue(16,1)
SetPinValue(41,1)
EClock()
SetPinValue(41,0)
]
and InputSequ() be
[
SetPinValue(16,0)
EClock() //OCompare should become 1
SetPinValue(16,1)
SetPinValue(41,1)
EClock() //OCompr =1
SetPinValue(41,0)
]
and NClk(k;numargs na) be
[
DefaultArgs(lv na, -1, 0)
unless k eq 0 do
[
SetBusValue(8,139,138,137,136,135,134,133,129,#1 ); //OutD.15 to reset Gray Counter,Allow WU=0
SetOaddr(0) //to prepare ClkCR
SetPinValue(231,0)
EClock() //first after OValid' sets OMeF,loads outD.15
SetBusValue(8,139,138,137,136,135,134,133,129,#200); //OutD.08 to enable clocking of NClk,
EClock() //first CR loads CR ,resets NClk,loads OutD.8
for i=1 to 4*(k-1) do
[
EClock()
]
EClock() // first CR into NClk
EClock()
EClock()
SetPinValue(231,1)
SetBusValue(8,139,138,137,136,135,134,133,129,0 ); //0 is the final contents of Cont.Reg
EClock() //last ClkCR,also resets OMeF,removes OutD.8
]
]
and NClko(cr) be
[
SetBusValue(8,139,138,137,136,135,134,133,129,#1 ); //OutD.15 to reset Gray Counter,Allow WU =0
SetOaddr(0) //to prepare ClkCR
SetPinValue(231,0)
EClock() //first after OValid' sets OMeF,loads OutD.15
SetBusValue(8,139,138,137,136,135,134,133,129,#200+cr); //OutD.08 to enable clocking of NClk,cr is the (even) contents of Control Reg. during the Nclk
EClock() //first CR loads CR ,resets NClk,loads OutD.8
EClock() // first into NClk
EClock()
EClock()
SetPinValue(231,1)
SetBusValue(8,139,138,137,136,135,134,133,129,cr )
EClock() //last ClkCR,also resets OMeF ,removes OutD.8
]
and SRClock() be
[
SetPinValue(96,0 ); //SRClock is normally high
SetPinValue(96,1)
]
and Reset() be
[
SetPinValue(153,0 ); //Run is normally high for Controller in operation
SetPinValue(153,1 ); //will make a negative pulse in Rst'
]
and ClkCR() be
[
SetOaddr(0)
SetPinValue(231,0)
EClock() //sets OMeF since OCompr=1 from prev.tests
SetPinValue(231,1)
EClock() //this makes the ClkCR' and resets OMeF
]
and ClkStart() be
[
SetOaddr(1)
SetPinValue(231,0)
EClock() //sets OMeF since OCompr=1 from prev.tests
SetPinValue(231,1)
EClock() //this makes the ClkStart' and resets OMeF
]
and ClkIAR() be
[
SetOaddr(3)
SetPinValue(231,0)
EClock() //sets OMeF since OCompr=1 from prev.tests
SetPinValue(231,1)
EClock() //this makes the ClkIAR' and resets OMeF
]
and ClkCur() be
[
SetOaddr(4)
SetPinValue(231,0)
EClock() // sets OMeF
SetPinValue(231,1)
EClock() // makes the pulse,resets OMeF
SetOaddr(5); // the other one too
SetPinValue(231,0)
EClock() // sets OMeF
SetPinValue(231,1)
EClock() // makes the pulse,resets OMeF
]
and CurWri() be
[
SetOaddr(6)
SetPinValue(231,0)
EClock() // sets OMeF
RClock() // the write pulse proper
SetPinValue(231,1)
EClock() // resets OMeF
SetOaddr(7); // the other one too
SetPinValue(231,0)
EClock() // sets OMeF
RClock() // the write pulse proper
SetPinValue(231,1)
EClock() // resets OMeF
]
and WriteHorCont() be
[
SetOaddr(2)
SetPinValue(231,0)
EClock() //sets OMeF since OCompr=1 from prev.tests
SetPinValue(231,1)
RClock() //this makes the WriteHorCont' pulse
EClock() //this resets OMeF
]
and WriteBuf(i) be
[
//EvenLine() //cant be here,would destroy set OData!
//OddLine() //cant be here,would destroy set OData!
SetOaddr(#10 + i)
SetPinValue(231,0)
EClock() //sets OMeF since OCompr=1 from prev.tests
SetPinValue(231,1)
RClock() //this makes the WriteHorCont' pulse
EClock() //this generates ClkIAR' and resets OMeF
]
and WriteAll() be
[
WriteBuf(0)
WriteBuf(1)
WriteBuf(2)
WriteBuf(3)
]
and XeroData() be
[
SetBusValue(8,139,138,137,136,135,134,133,129,0)
SetBusValue(8,167,165,164,163,162,159,156,155,0)
]
and EvenLine() be
[
let eli=GetPinValue(122)
if eli eq 0 do
[
Switch()
NClk(1)
]
]
and OddLine() be
[
let eli=GetPinValue(122)
if eli eq 1 do
[
Switch()
NClk(1)
]
]
and Switch() be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#200 ); //OutD.0 =1 to keep IAR from loading
ClkStart()
NClk(1) // 0 into AAR,AAR left in loading state
SetBusValue(4,135,134,133,129,#12 ); // SetCPhase,PSwitch
WriteHorCont()
NClk(1) // sets SetCPhase
NClk(1) // sets ControlPhase
SetBusValue(4,135,134,133,129,2 ); // Switch only,we must drop setCPhase
WriteHorCont() // writes into HeRAM
NClk(1) // Switch =1 now,SetCPhase=0
SetBusValue(4,135,134,133,129,0 ); // housekeeping
WriteHorCont() // adddress 0 cleared again
// M U S T be followed by a NClk,which will put Switch =0,ControlPhase=0
]
and HSpulse() be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#200 ); //OutD.0 =1 to keep IAR from loading
ClkStart()
NClk(1) // 0 into AAR;AAR left in loading state
SetBusValue(4,135,134,133,129,#16 ); // PSwitch=1,PHS=1,SetCPhase=1
WriteHorCont()
NClk(1) // sets SetCPhase;PHS,PSwitch=1
NClk(1) // sets ControlPhase
NClk(1) // sets HS =1, Switch =1
SetBusValue(4,135,134,133,129,0 ); // housekeeping
WriteHorCont() // adddress 0 cleared again
// M U S T be followed by a NClk,which will put HS=0, Switch=0, ControlPhase=0
]
and MLpulse() be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#200 ); //OutD.0 =1 to keep IAR from loading
ClkStart()
NClk(1) // 0 into AAR;AAR left in loading state
SetBusValue(4,135,134,133,129,#1); // ML =1
WriteHorCont()
NClk(1) // sets ML=1
SetBusValue(4,135,134,133,129,0 ); // housekeeping
WriteHorCont() // adddress 0 cleared again
// M U S T be followed by a NClk,which will put ML=0
]
and LoadAAR(a) be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#200 + a ); //a limited to 6 bits-starting address
ClkStart()
NClk(1)
SetBusValue(8,167,165,164,163,162,159,156,155,#300 ); // enables counting by Nclk
ClkStart()
]
and LoadIAR(a) be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#100 + a ); //a limited to 6 bits-starting address
ClkStart()
ClkIAR()
SetBusValue(8,167,165,164,163,162,159,156,155,#300 ); // enables counting by Nclk
ClkStart()
]
and PrepareTSR() be
[
SetPinValue(140,0)
EClock() // sets IMeF
SetBusValue(8,141,205,142,206,144,208,145,209,4)
EClock() // loads IReg
SetBusValue(8,141,205,142,206,144,208,145,209,0); // enables shifting now
]
// EClock(n) now must follow .Without any pulse,output =VS
and EndTSR() be
[
SetPinValue(140,1)
EClock() // resets IMeF
]
and SetIMeF() be
[
SetPinValue(140,0)
EClock()
]
and SetOMeF() be
[
SetPinValue(231,0)
EClock()
]
and ResetIMeF() be
[
SetPinValue(140,1)
EClock()
]
and ResetOMeF() be
[
SetPinValue(231,1)
EClock()
]
and SetControlPhase() be
[
SetBusValue(8,167,165,164,163,162,159,156,155,#200)
ClkStart()
NClk(1)
SetBusValue(4,135,134,133,129,#10)
WriteHorCont()
NClk(1)
NClk(1)
SetBusValue(4,135,134,133,129,0)
WriteHorCont()
NClk(1)
]
//Left Cycle-shift routine
and LCyc(wrd,amount)= valof
[
resultis((wrd lshift amount) % (wrd rshift (16-amount)))
]
//Odd-parity checking routine
and Parity(x) = valof
[
let parity = 0
for i = 0 to 15 do
[
parity = parity+x ; //"+" is faster than "XOR"
x = x rshift 1
]
resultis (parity & 1)
]
//UNKNOWN SIGNALS REQUIRED: