//D0 Card Tester Program for EtherNet
//Test2B: Output Buffer Test
//R. Garner August 1, 1978 1:03 AM
//R. Crane November 20, 1978 11:28 PM
get "testdefs.d"
get "spgxwtest.d"
//{IData:IData.00,IData.01,IData.02,IData.03,IData.04,IData.05,IData.06,IData.07,IData.08,IData.09,IData.10,IData.11,IData.12,IData.13,IData.14,IData.15}
//{OData:OData.00,OData.01,OData.02,OData.03,OData.04,OData.05,OData.06,OData.07,OData.08,OData.09,OData.10,OData.11,OData.12,OData.13,OData.14,OData.15}
//{CTask:CTask.0,CTask.1,CTask.2,CTask.3}
//{U57A':U57A'.0,U57A'.1,U57A'.2,U57A'.3}
//{U57D:U57D.0,U57D.1,U57D.2,U57D.3}
//{U57Q':U57Q'.0,U57Q'.1,U57Q'.2,U57Q'.3}
//{IAddr:IAddr.0,IAddr.1,IAddr.2,IAddr.3,IAddr.4,IAddr.5,IAddr.6,IAddr.7}
//{IConds:InDiffNE0,InDiffNE15,InDiffGE4,InDiffLE11}
//{RData':RData.0',RData.1',RData.2',RData.3',RData.4',RData.5',RData.6',RData.7'}
//{TData':TData.0',TData.1',TData.2',TData.3',TData.4',TData.5',TData.6',TData.7'}
//{RamClock:RamClockFeed',RamClockFeed'}
//{EClock:EdgeClockFeed',EdgeClockFeed'}
//{PreRClk:PreRClock,PreRClock}
//{TClk:TClock,TClock',TClock,TClock'}
//{LoadHalfCAddr:SRClock,SRClock,SRDataIn',SRClock,SRClock,SRDataIn',SRClock,SRClock,SRDataIn',SRClock,SRClock,SRDataIn'}
let Test2B(TChar,Size,S,enable) be
[
//Continue with Test 2.
//go to CRCMode
if TChar eq $y then
[
{Collision}=1
{OValid'}=0
{EClock}=Eclick
{Collision}=0
{OFault'}=0
{OValid'}=1
{EClock}=Eclick
{TClk}=Tclick; //enough for Jam to kill PacketOutMode
{TClk}=Tclick
{TClk}=Tclick
goto BadStat
]
if Size ge 12 then goto BadStat
Compare({PacketOutMode},1,"PacketOutMode")
Compare({SendMode},1,"SendMode")
Compare({LoadOutSR},1,"LoadOutSR")
Compare({CRCMode},0,"CRCMode")
{TClk}=Tclick
Compare({CRCMode},1,"CRCMode")
{TClk}=Tclick
//Flush CRC & Quit
for i = 2 to 16 do {TClk}=Tclick
BadStat: Compare({SendMode},0,"SendMode")
Compare({CRCMode},0,"CRCMode")
Compare({PacketOutMode},0,"PacketOutMode")
Compare({Transmit},0,"Transmit")
{CTask}=0
{OValid'}=1
{Phase1Next'}=0;
//enough for OAttnReq,OWakeReq,Transmit,WakeOutTime,OMeF
for i = 1 to 17 do {EClock}=Eclick;
Compare({Transmit},1,"Transmit")
//Read output status
{IAddr}=302B; //IAddr[0..3]=12; IAddr[4..7]=2
{IValid'}=0
{EClock}=Eclick
S={IData}
test TChar eq $y ifso Compare(S & 1000B,1000B,"Bad Parity Status")
ifnot Compare(S & 1000B,0,"Bad Parity Status")
test Size ge 12 ifso Compare(S & 40000B,40000B,"UnderRun Status")
ifnot Compare(S & 40000B,0,"UnderRun Status")
test TChar eq $y ifso Compare(S & 10000B,10000B,"Collision Status")
ifnot Compare(S & 10000B,0,"Collision Status")
test TChar eq $y ifso Compare(S & 2000B,2000B,"OFault Status")
ifnot Compare(S & 2000B,0,"OFault Status")
// reset output & check for zero status
LoadState(300B,100B)
{IAddr}=122B; //IAddr[0..3]=5; IAddr[4..7]=2
{IValid'}=0
{EClock}=Eclick
Compare({IData},0,"Status-State")
Wss(D,"*nEnd of Test 2")
]