//**************************************************************************************
//D0CS01.TST
//By B. Rosen and M. Thomson December 18, 1978
//Sub Test Program for D0 CS Module
//**************************************************************************************
get "d0cs.d"
//Edge pin and test connector signal busses available to this sub-test: (none)
//**************************************************************************************
//Test 1: Test Clock Generator
let Test1() be
[
SpeakTest(1) //set initial conditions (see notes at end of D0CS.TST)
for i = 0 to 20 do TwoEClocks() //get clock to steady state
let i = 0
[
ExtClock()
if {RamClockFeed'} eq 0 then break; //wait for RamClock to go down
i=i+1
] repeatuntil i eq 25 //(but don't wait too long)
ClockCheck(i ls 25,"*nRamClockFeed' will not go low")
i = 0
[
ExtClock()
if {RamClockFeed'} eq 1 then break; //wait for it to come up again
i=i+1
] repeatuntil i eq 4 //(should come right back up)
ClockCheck(i ls 4,"*nRamClockFeed' will not go high")
//should now be sitting at first part of a cycle
ClockCheck({EdgeClockFeed'} eq 1,"*nEdgeClockFeed' is not high when RamClockFeed is high")
ClockCheck({EomClockFeed'} eq 1,"*nEomClockFeed' is not high when RamClockFeed is high")
i = 0
[
let c0 = {Cycle0Feed'}; //save current cycle
ExtClock() //run through the cycle
ClockCheck({RamClockFeed'} eq 1,"*nRamClockFeed' not high in 2nd click")
ClockCheck({EdgeClockFeed'} eq 1,"*nEdgeClockFeed' not high in 2nd click")
ClockCheck({EomClockFeed'} eq 0,"*nEomClockFeed' not low in 2nd click")
ClockCheck({Cycle0Feed'} eq c0,"*nCycle0Feed' changed in 2nd click")
ExtClock()
ClockCheck({RamClockFeed'} eq 0,"*nRamClockFeed' not low in 3rd click")
ClockCheck({EdgeClockFeed'} eq 1,"*nEdgeClockFeed' not high in 3rd cycle")
ClockCheck({EomClockFeed'} eq 1,"*nEomClockFeed' not high in 3rd cycle")
ClockCheck({Cycle0Feed'} eq c0,"*nCycle0Feed' changed in 3rd click")
ExtClock()
ClockCheck({RamClockFeed'} eq 0,"*nRamClockFeed' not low in 4th click")
ClockCheck({EdgeClockFeed'} eq 0,"*nEdgeClockFeed' not low in 4th click")
ClockCheck({EomClockFeed'} eq 0,"*nEomClockFeed' not low in 4th click")
ClockCheck({Cycle0Feed'} eq c0,"*nCycle0Feed' changed in 4th click")
ExtClock()
ClockCheck({RamClockFeed'} eq 1,"*nRamClockFeed' not high in 1st click")
ClockCheck({EdgeClockFeed'} eq 1,"*nEdgeClockFeed' not high in 1st click")
ClockCheck({EomClockFeed'} eq 1,"*nEomClockFeed' not high in 1st click")
ClockCheck({Cycle0Feed'} ne c0,"*nCycle0Feed' did not change in 1st click")
i=i+1
] repeatuntil i eq 100 //try a lot of cycles
//Waveforms look ok, try Cycle0/Cycle1 stuff
if {Cycle0Feed'} eq 1 then
[
EClock() //get to cycle 0
ClockCheck({Cycle0Feed'} eq 0,"*nCycle0Feed' would not go low after Cycle1")
]
for i = 1 to 100 do
[
EClock() //get to cycle 1
ClockCheck({Cycle0Feed'} eq 1,"*nCycle0Feed' would not go high after Cycle0")
EClock() //get back to cycle 0
ClockCheck({Cycle0Feed'} eq 0,"*nCycle0Feed' would not go back low after cycle1")
]
//Make sure Suspend stops cycling
{Suspend-a} = 1; //set suspend
for i = 1 to 80 do
[
ExtClock() //cycle0 should not change at all
ClockCheck({Cycle0Feed'} eq 0,"*nSuspend doesn't prevent Cycle0Feed' going to high")
]
{Suspend-a} = 0; //release suspension
EClock() //advance to cycle 1
{Suspend-a} = 1; //restore suspend
ClockCheck({Cycle0Feed'} eq 1,"*nFirst cycle after a suspend, Cycle0Feed' wouldn't go high")
for i = 1 to 80 do
[
ExtClock() //make sure it stays in cycle1
ClockCheck({Cycle0Feed'} eq 1,"*nSuspend doesn't prevent Cycle0Feed' going to low")
]
{Suspend-a} = 0
EClock()
ClockCheck({Cycle0Feed'} eq 0,"*nFirst Cycle after a suspend, Cycle0Feed' wouldn't go low")
//test Phase1Next follows Cycle0Feed (opposite polarity)
for i = 0 to 100 do
[
EClock()
ClockCheck({Phase1Next'} eq {Cycle0Feed'},"*nPhase1Next' not following Cycle0")
//Phase1Next is gated with Suspend' at b4
if {Phase1Next'} eq 0 then
[
{Suspend-a} = 1
ClockCheck({Phase1Next'} eq 1,"*nSuspend does not make Phase1Next' go high")
{Suspend-a} = 0
]
]
]
and ClockCheck(tst,msg) be
[
if tst then return
Ws(msg)
Ws("*nCheck the Waveforms on page 12 of the Logic Diagrams")
Ws(" Clicking... (any key will go on)")
while Endofs(keys) do
[
ExtClock()
]
Gets(keys)
Ws("*nRunning...")
]