{SccTest.mc, HGM, 12-Feb-85 0:54:50} Reserve[0F5F, 0FFF]; {section used by the CP Kernel } SetTask[0]; StartAddress[Go]; RegDef[address, R, 1]; RegDef[rhAddr, RH, 1]; RegDef[address10, R, 2]; RegDef[expected, R, 3]; RegDef[found, R, 4]; RegDef[temp, R, 0D]; RegDef[rhTemp, RH, 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; address ← 90, c1; address ← address LRot8, {9000} c2; address10 ← address + 10, {9010} c3; MainLoop: Noop, c1; Noop, c2; Noop, c3; {------------------------------------------------------------------------------------} FirstLoop: Noop, c1; Noop, c2; Noop, c3; FirstScc0: Noop, c1; Noop, c2; rhAddr ← 0, {Scc0: 09000} c3; IO ← [rhAddr, address+00], {WR0B/A} c1; MDR ← 2, {Shift Left (ADR0 is ignored)} c2; Noop, c3; IO ← [rhAddr, address+09], {WR9x} c1; MDR ← 0C2, {Reset, NV} c2; Noop, c3; Scc0IntVector: IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0IntVecFailed], c2; Noop, c3; Scc0ChanBLSB: IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0ChanBLSBFailed], c2; Noop, c3; Scc0ChanBMSB: IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0ChanBMSBFailed], c2; Noop, c3; Scc0ChanALSB: IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0ChanALSBFailed], c2; Noop, c3; Scc0ChanAMSB: IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0ChanAMSBFailed], c2; Noop, c3; FirstScc1: Noop, c1; Noop, c2; rhAddr ← 1, {Scc1: 19000} c3; IO ← [rhAddr, address+00], {WR0B/A} c1; MDR ← 2, {Shift Left (ADR0 is ignored)} c2; Noop, c3; IO ← [rhAddr, address+09], {WR9x} c1; MDR ← 0C2, {Reset, NV} c2; Noop, c3; Scc1IntVector: IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1IntVecFailed], c2; Noop, c3; Scc1ChanBLSB: IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1ChanBLSBFailed], c2; Noop, c3; Scc1ChanBMSB: IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1ChanBMSBFailed], c2; Noop, c3; Scc1ChanALSB: IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1ChanALSBFailed], c2; Noop, c3; Scc1ChanAMSB: IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1ChanAMSBFailed], c2; Noop, c3; FirstScc2: Noop, c1; Noop, c2; rhAddr ← 2, {Scc2: 29000} c3; IO ← [rhAddr, address+00], {WR0B/A} c1; MDR ← 2, {Shift Left (ADR0 is ignored)} c2; Noop, c3; IO ← [rhAddr, address+09], {WR9x} c1; MDR ← 0C2, {Reset, NV} c2; Noop, c3; Scc2IntVector: IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2IntVecFailed], c2; Noop, c3; Scc2ChanBLSB: IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2ChanBLSBFailed], c2; Noop, c3; Scc2ChanBMSB: IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2ChanBMSBFailed], c2; Noop, c3; Scc2ChanALSB: IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2ChanALSBFailed], c2; Noop, c3; Scc2ChanAMSB: IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2ChanAMSBFailed], c2; Noop, c3; FirstScc3: Noop, c1; Noop, c2; rhAddr ← 3, {Misc/Timers: 39000} c3; IO ← [rhAddr, address+00], {WR0B/A} c1; MDR ← 2, {Shift Left (ADR0 is ignored)} c2; Noop, c3; IO ← [rhAddr, address+09], {WR9x} c1; MDR ← 0C2, {Reset, NV} c2; Noop, c3; Scc3IntVector: IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3IntVecFailed], c2; Noop, c3; Scc3ChanBLSB: IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3ChanBLSBFailed], c2; Noop, c3; Scc3ChanBMSB: IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3ChanBMSBFailed], c2; Noop, c3; Scc3ChanALSB: IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0C], {Baud Rate Gen, LSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3ChanALSBFailed], c2; Noop, c3; Scc3ChanAMSB: IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; MDR ← expected, c2; Noop, c3; IO ← [rhAddr, address10 + 0D], {Baud Rate Gen, MSB} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3ChanAMSBFailed], c2; Noop, c3; FirstLoopEnd: Noop, c1; expected ← expected + 1, PgCarryBr, c2; expected ← expected and 0FF, BRANCH[FirstLoop, $], c3; {------------------------------------------------------------------------------------} SecondSection: expected ← 0, c1; Noop, c2; Noop, c3; SecondScc0: Noop, c1; Noop, c2; rhAddr ← 0, {Scc0: 09000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; SecondScc1: Noop, c1; Noop, c2; rhAddr ← 1, {Scc1: 19000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; SecondScc2: Noop, c1; Noop, c2; rhAddr ← 2, {Scc2: 29000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; SecondScc3: Noop, c1; Noop, c2; rhAddr ← 3, {Scc3: 39000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; SecondLoop: Noop, c1; Noop, c2; Noop, c3; SecondScc0Test: Noop, c1; Noop, c2; rhAddr ← 0, {Scc0: 09000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc0IntVecMashed], c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected + 1, c2; Noop, c3; SecondScc1Test: Noop, c1; Noop, c2; rhAddr ← 1, {Scc1: 19000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc1IntVecMashed], c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected + 1, c2; Noop, c3; SecondScc2Test: Noop, c1; Noop, c2; rhAddr ← 2, {Scc2: 29000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc2IntVecMashed], c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected + 1, c2; Noop, c3; SecondScc3Test: Noop, c1; Noop, c2; rhAddr ← 3, {Scc3: 39000} c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; Noop, c2; found ← MD, c3; [] ← found xor expected, NZeroBr, c1; BRANCH[$, Scc3IntVecMashed], c2; Noop, c3; IO ← [rhAddr, address10 + 02], {Interrupt Vector} c1; MDR ← expected + 1, c2; Noop, c3; SecondLoopEnd: Noop, c1; expected ← expected + 1, PgCarryBr, c2; expected ← expected and 0FF, BRANCH[SecondLoop, $], c3; ExtCtrl ← 3, {Gets Bumped on rising edge} c1; ExtCtrl ← 7, c2; passCount ← passCount + 1, GOTO[MainLoop], c3; {------------------------------------------------------------------------------------} WriteLoop: IO ← [rhAddr, address + 02], {Port A Interrupt Vector} c1; MDR ← expected, c2; Noop, c3; Noop, c1; Noop, c2; Noop, c3; Noop, c1; Noop, c2; Noop, c3; Noop, c1; Noop, c2; Noop, c3; Noop, c1; Noop, c2; Noop, c3; Noop, c1; Noop, c2; Noop, c3; Noop, c1; Noop, c2; expected ← expected + 1, GOTO[WriteLoop], c3; {------------------------------------------------------------------------------------} Scc0IntVecFailed: GOTO[Restart], c3; Scc0ChanBLSBFailed: GOTO[Restart], c3; Scc0ChanBMSBFailed: GOTO[Restart], c3; Scc0ChanALSBFailed: GOTO[Restart], c3; Scc0ChanAMSBFailed: GOTO[Restart], c3; Scc1IntVecFailed: GOTO[Restart], c3; Scc1ChanBLSBFailed: GOTO[Restart], c3; Scc1ChanBMSBFailed: GOTO[Restart], c3; Scc1ChanALSBFailed: GOTO[Restart], c3; Scc1ChanAMSBFailed: GOTO[Restart], c3; Scc2IntVecFailed: GOTO[Restart], c3; Scc2ChanBLSBFailed: GOTO[Restart], c3; Scc2ChanBMSBFailed: GOTO[Restart], c3; Scc2ChanALSBFailed: GOTO[Restart], c3; Scc2ChanAMSBFailed: GOTO[Restart], c3; Scc3IntVecFailed: GOTO[Restart], c3; Scc3ChanBLSBFailed: GOTO[Restart], c3; Scc3ChanBMSBFailed: GOTO[Restart], c3; Scc3ChanALSBFailed: GOTO[Restart], c3; Scc3ChanAMSBFailed: GOTO[Restart], c3; Scc0IntVecMashed: GOTO[Restart], c3; Scc1IntVecMashed: GOTO[Restart], c3; Scc2IntVecMashed: GOTO[Restart], c3; Scc3IntVecMashed: GOTO[Restart], c3; Restart: Q ← 0FF, c1; Noop, c2; RestartLoop: Noop, c3; Q ← Q - 1, ZeroBr, c1; BRANCH[RestartLoop, $], c2; GOTO[Go], c3; {------------------------------------------------------------------------------------}