{DataTest.mc, HGM, 14-Feb-85 1:50:31} Reserve[0F5F, 0FFF]; {section used by the CP Kernel } SetTask[0]; StartAddress[Go]; RegDef[address, R, 1]; RegDef[rhAddr, RH, 1]; RegDef[expected, R, 3]; RegDef[found, R, 4]; RegDef[maskIn, R, 5]; RegDef[maskOut, R, 6]; RegDef[echoPlug, R, 09]; RegDef[address10, R, 0A]; RegDef[address20, R, 0B]; RegDef[temp, R, 0D]; RegDef[passCount, R, 0E]; {number of good passes} Trap: temp ¬ RRot1 ErrnIBnStkp, ClrIntErr, CANCELBR[$, 0F], c1, at[0]; Xbus ¬ temp LRot0, XwdDisp, c2; DISP2[TrapType], c3; Parity: GOTO[GoToGo], c1, at[0,4,TrapType]; Init: GOTO[GoToGo], c1, at[1,4,TrapType]; Stack: GOTO[GoToGo], c1, at[2,4,TrapType]; IB: GOTO[GoToGo], c1, at[3,4,TrapType]; GoToGo: Noop, c2; Noop, GOTO[Go], c3; Go: passCount ¬ 0, ClrIntErr, c1; ExtCtrl ¬ 5, {Init Incr, Zero, UnBlank} c2; expected ¬ 0, c3; MainLoop: Noop, c1; Noop, c2; Noop, c3; {------------------------------------------------------------------------------------} ResetEverybody: address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 4, {Misc: 49000} c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 001, {Krock to avoid getting Booted} c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 5, {EProm: 59000} c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 2, {Modem: 21000} c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 4, {Dialer0: 41000} c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 5, {Dialer1: 51000} c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 6, {Dialer2: 61000} c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 1, {Reset} c2; Noop, c3; FirstLoop: Noop, c1; Noop, c2; Noop, c3; Misc: address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 4, {Misc: 49000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestMiscA: maskOut ¬ 0FF, {All 8 bits} c1; maskIn ¬ 0FF, {All 8 bits}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortAFloatDataFailed], c2; Noop, c3; TestMiscB: maskOut ¬ 01F, {Low 5 bits} c1; maskIn ¬ 010, {Pullups on mEn work too well} c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 080, {Port B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortBFloatDataFailed], c2; Noop, c3; TestMiscC: maskOut ¬ 00E, {Only 4 bits, low bit is Boot'} c1; maskIn ¬ 002, {Pullups on IntChan} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, MiscPortCFloatDataFailed], c2; Noop, c3; EProm: address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 5, {EProm: 59000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestEPromA: maskOut ¬ 0FF, {All 8 bits} c1; maskIn ¬ 03F, {Pullups on 2 high bits}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortAFloatDataFailed], c2; Noop, c3; TestEPromB: maskOut ¬ 0FF, {All 8 bits} c1; maskIn ¬ 0FF, c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 080, {Port B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortBFloatDataFailed], c2; Noop, c3; TestEPromC: maskOut ¬ 00F, {Only 4 bits} c1; maskIn ¬ 007, {Pullup on PromOE'} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, EPromPortCFloatDataFailed], c2; Noop, c3; Modem: address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 2, {Modem: 21000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestModemA: maskOut ¬ 000, {DSR*'} c1; maskIn ¬ 000, {All are Input}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortAFloatDataFailed], c2; Noop, c3; TestModemB: maskOut ¬ 000, {RI*'} c1; maskIn ¬ 000, {All are Input}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 080, {Port B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortBFloatDataFailed], c2; Noop, c3; TestModemC: maskOut ¬ 00F, {Only 4 bits} c1; maskIn ¬ 00E, {Inputs to chips is too much load} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, ModemPortCFloatDataFailed], c2; Noop, c3; Dialer0: address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 4, {Dialer0: 41000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestDialer0A: maskOut ¬ 0FF, {All are outputs} c1; maskIn ¬ 000, {Chips pull up} c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortAFloatDataFailed], c2; Noop, c3; {Keep driving the data wanted below.} IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; TestDialer0B: maskOut ¬ 000, {DI0*'} c1; maskIn ¬ echoPlug, {Input from PortA}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 084, {Port A+B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; {This checking data that has gone all the way out through the echo plug.} [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortBEchoDataFailed], c2; Noop, c3; TestDialer0C: maskOut ¬ 00F, {Only 4 bits} c1; maskIn ¬ 00E, {Inputs to chips is too much load} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer0PortCFloatDataFailed], c2; Noop, c3; Dialer1: address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 5, {Dialer1: 51000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestDialer1A: maskOut ¬ 0FF, {All are outputs} c1; maskIn ¬ 000, {Chips pull up} c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortAFloatDataFailed], c2; Noop, c3; {Keep driving the data wanted below.} IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; TestDialer1B: maskOut ¬ 000, {DI0*'} c1; maskIn ¬ echoPlug, {Input from PortA}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 084, {Port A+B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; {This checking data that has gone all the way out through the echo plug.} [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortBEchoDataFailed], c2; Noop, c3; TestDialer1C: maskOut ¬ 00F, {Only 4 bits} c1; maskIn ¬ 00E, {Inputs to chips is too much load} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer1PortCFloatDataFailed], c2; Noop, c3; Dialer2: address ¬ 10, c1; address ¬ address LRot8, {1000} c2; rhAddr ¬ 6, {Dialer2: 61000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0], {Master Interrupt Control} c1; MDR ¬ 0, {~Reset} c2; Noop, c3; TestDialer2A: maskOut ¬ 0FF, {All are outputs} c1; maskIn ¬ 000, {Chips pull up} c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 004, {Port A Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortAInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortAFloatDataFailed], c2; Noop, c3; {Keep driving the data wanted below.} IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; TestDialer2B: maskOut ¬ 000, {DI0*'} c1; maskIn ¬ echoPlug, {Input from PortA}, c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 084, {Port A+B Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortBInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {Input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; {This checking data that has gone all the way out through the echo plug.} [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortBEchoDataFailed], c2; Noop, c3; TestDialer2C: maskOut ¬ 00F, {Only 4 bits} c1; maskIn ¬ 00E, {Inputs to chips is too much load} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ ~maskOut, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 010, {Port C Enable} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F and expected, {Write Enable mask} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskOut and found, c1; temp ¬ Q, c2; Q ¬ maskOut and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortCInternalDataFailed], c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Input (only 4 bits)} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; Noop, c2; found ¬ MD, c3; Q ¬ maskIn and found, c1; temp ¬ Q, c2; Q ¬ maskIn and expected, c3; [] ¬ temp xor Q, NZeroBr, c1; BRANCH[$, Dialer2PortCFloatDataFailed], c2; Noop, c3; FirstLoopEnd: Noop, c1; expected ¬ expected + 1, PgCarryBr, c2; expected ¬ expected and 0FF, BRANCH[FirstLoop, $], c3; {------------------------------------------------------------------------------------} {This isn't really what I want yet. Set mData, mEn and PromOE' HIGH. Maybe shorts to PromAd will show up. } SecondSection: Noop, c1; Noop, c2; Noop, c3; SecondMisc: address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 4, {Misc: 49000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ 0FF, c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 000, {Output} c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0E0, {Top 3 bits are input} c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ 0FF, {mEn} c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F, {Beware of Boot'} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 094, {Enable Ports A, B, and C} c2; Noop, c3; SecondEprom: address ¬ 90, c1; address ¬ address LRot8, {9000} c2; rhAddr ¬ 5, {EProm: 59000} c3; address10 ¬ address + 10, c1; address20 ¬ address + 20, c2; Noop, c3; IO ¬ [rhAddr, address + 0F], {Port C Data} c1; MDR ¬ 00F, {Beware of Boot'} c2; Noop, c3; IO ¬ [rhAddr, address + 06], {Port C Direction} c1; MDR ¬ 0F, {Output} c2; Noop, c3; IO ¬ [rhAddr, address + 01], {Master Config/Control} c1; MDR ¬ 094, {Enable Ports A, B, and C} c2; Noop, c3; SecondLoop: Noop, c1; Noop, c2; Noop, c3; TestPromAddr: IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 000, {All Output} c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 000, {All Output} c2; temp ¬ expected LRot8, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; MDR ¬ temp, c2; Noop, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; MDR ¬ expected, c2; Noop, c3; IO ¬ [rhAddr, address20 + 03], {Port A Direction} c1; MDR ¬ 03F, {2 high bits have pullups} c2; Noop, c3; IO ¬ [rhAddr, address20 + 0B], {Port B Direction} c1; MDR ¬ 0FF, {All Input (float)} c2; temp ¬ expected LRot8, c3; IO ¬ [rhAddr, address + 0D], {Port A Data} c1; Noop, c2; found ¬ MD, c3; IO ¬ [rhAddr, address + 0E], {Port B Data} c1; found ¬ found LRot8, c2; found ¬ found or MD, c3; [] ¬ found xor expected, NZeroBr, c1; BRANCH[$, PromAddrMashed], c2; Noop, c3; SecondLoopEnd: Noop, c1; expected ¬ expected + 1, CarryBr, c2; expected ¬ expected, BRANCH[SecondLoop, $], c3; ExtCtrl ¬ 3, {Gets Bumped on rising edge} c1; ExtCtrl ¬ 7, c2; passCount ¬ passCount + 1, GOTO[MainLoop], c3; {------------------------------------------------------------------------------------} MiscPortAInternalDataFailed: GOTO[Restart], c3; MiscPortAFloatDataFailed: GOTO[Restart], c3; MiscPortBInternalDataFailed: GOTO[Restart], c3; MiscPortBFloatDataFailed: GOTO[Restart], c3; MiscPortCInternalDataFailed: GOTO[Restart], c3; MiscPortCFloatDataFailed: GOTO[Restart], c3; EPromPortAInternalDataFailed: GOTO[Restart], c3; EPromPortAFloatDataFailed: GOTO[Restart], c3; EPromPortBInternalDataFailed: GOTO[Restart], c3; EPromPortBFloatDataFailed: GOTO[Restart], c3; EPromPortCInternalDataFailed: GOTO[Restart], c3; EPromPortCFloatDataFailed: GOTO[Restart], c3; ModemPortAInternalDataFailed: GOTO[Restart], c3; ModemPortAFloatDataFailed: GOTO[Restart], c3; ModemPortBInternalDataFailed: GOTO[Restart], c3; ModemPortBFloatDataFailed: GOTO[Restart], c3; ModemPortCInternalDataFailed: GOTO[Restart], c3; ModemPortCFloatDataFailed: GOTO[Restart], c3; Dialer0PortAInternalDataFailed: GOTO[Restart], c3; Dialer0PortAFloatDataFailed: GOTO[Restart], c3; Dialer0PortBInternalDataFailed: GOTO[Restart], c3; Dialer0PortBEchoDataFailed: GOTO[Restart], c3; Dialer0PortCInternalDataFailed: GOTO[Restart], c3; Dialer0PortCFloatDataFailed: GOTO[Restart], c3; Dialer1PortAInternalDataFailed: GOTO[Restart], c3; Dialer1PortAFloatDataFailed: GOTO[Restart], c3; Dialer1PortBInternalDataFailed: GOTO[Restart], c3; Dialer1PortBEchoDataFailed: GOTO[Restart], c3; Dialer1PortCInternalDataFailed: GOTO[Restart], c3; Dialer1PortCFloatDataFailed: GOTO[Restart], c3; Dialer2PortAInternalDataFailed: GOTO[Restart], c3; Dialer2PortAFloatDataFailed: GOTO[Restart], c3; Dialer2PortBInternalDataFailed: GOTO[Restart], c3; Dialer2PortBEchoDataFailed: GOTO[Restart], c3; Dialer2PortCInternalDataFailed: GOTO[Restart], c3; Dialer2PortCFloatDataFailed: GOTO[Restart], c3; PromAddrMashed: GOTO[Restart], c3; Restart: Q ¬ 0FF, c1; Noop, c2; RestartLoop: Noop, c3; Q ¬ Q - 1, ZeroBr, c1; BRANCH[RestartLoop, $], c2; GOTO[Go], c3; {------------------------------------------------------------------------------------}