{ File name Read.mc Description: Mesa Read op-codes Author: DXC Created: February 16, 1980 AHL/JPM, 6-Jan-87 8:28:38, Changes for MDS relief DEG, 1-Sep-84 19:46:40, Add copyright notice AEF, 11-Nov-83 11:15:09, Add labels at R+1 and RL+1 AXD, 15-Jun-83 18:18:49, new instruction set JGS, January 13, 1982 3:32 PM, add L1¬L1.PopDec2 in LILP for RLIPF JGS, November 2, 1981 3:43 PM, new instruction set Last edited: DXC, March 28, 1980 5:06 PM Last edited: RXG, April 2, 1980 4:51 PM Last edited: JGS, 26-May-81 10:24:01 } { Copyright (C) 1980, 1981, 1982, 1983 by Xerox Corporation. All rights reserved.} { Rn Read n = 0-1 RB Read Byte RLn Read Long n = 0 RLB Read Long Byte RDn Read Double n = 0 RDB Read Double Byte RDLn Read Double Long n = 0 RDLB Read Double Long Byte RC Read Code RLI0n Read Local Indirect Zero n = 0-3 RLIP Read Local Indirect Pair RLILP Read Local Indirect Long Pair RLDI0n Read Local Double Indirect Zero n = 0 RLDIP Read Local Double Indirect Pair RLDILP Read Local Double Indirect Long Pair RGIP Read Global Indirect Pair RGILP Read Global Indirect Long Pair ROB Read Overhead Byte } {***************************************************************************** Rn{n:[0..1]} *****************************************************************************} @R0: Map ¬ Q ¬ [rhMDS, TOS + 0], L1¬L1.Dec, pop, GOTO[Rn], c1, opcode[100'b]; @R1: Map ¬ Q ¬ [rhMDS, TOS + 1], L1¬L1.Dec, pop, GOTO[Rn], c1, opcode[101'b]; Rn: push, PC ¬ PC + PC16, c2; RMpc3: Rx ¬ rhRx ¬ MD, XRefBr, c3; R: MAR ¬ [rhRx, Q + 0], L0¬L0.R, BRANCH[RMUD,$], c1, RMFRet[L0.R]; Ra: IBDisp, GOTO[LLa], c2; RMUD: CALL[RMapFix], c2; {***************************************************************************** RB *****************************************************************************} @RB: TT ¬ TOS + ib, L1¬L1.Dec2, c1, opcode[102'b]; pop, c2; RBa: rhTT ¬ UvMDS, push, GOTO[RLMpc1], c3; {***************************************************************************** RL0 and RLB *****************************************************************************} @RL0: TT ¬ STK{ptrL}, pop, L1¬L1.PushDec, c1, opcode[103'b]; PC ¬ PC - PC16, pop, GOTO[RLa], c2; @RLB: TT ¬ STK{ptrL}, pop, L1¬L1.PushDec2, c1, opcode[104'b]; TT ¬ TT + ib, CarryBr, pop, c2; RLa: rhTT ¬ TOS{ptrH} LRot0, push, BRANCH[RLMpc1,RLb], c3; RLb: Noop, c1; Q ¬ rhTT + 1, LOOPHOLE[byteTiming], c2; rhTT ¬ Q LRot0, c3; RLMpc1: Map ¬ Q ¬ [rhTT,TT], c1; RLMpc2: PC ¬ PC + 1, c2; RLMpc3: Rx ¬ rhRx ¬ MD, XRefBr, c3; RL: MAR ¬ [rhRx, Q + 0], L0¬L0.RL, BRANCH[RLMUD,$], c1, RLMFRet[L0.RL]; RLc: IBDisp, GOTO[LLa], c2; RLMUD: CALL[RLMapFix], c2; {***************************************************************************** RD0 and RDB *****************************************************************************} @RD0: Map ¬ Q ¬ [rhMDS, TOS + 0], L1¬L1.PopDec, c1, opcode[105'b]; PC ¬ PC + PC16, fXpop, push, GOTO[RDMpc3], c2; @RDB: TT ¬ TOS + ib, L1¬L1.PopDec2, c1, opcode[106'b]; PC ¬ PC + 1, fXpop, push, c2; Noop, c3; RDMpc1: Map ¬ Q ¬ [rhMDS, TT], c1; RDMpc2: Noop, c2; RDMpc3: Rx ¬ rhRx ¬ MD, XRefBr, push, c3; RD: MAR ¬ [rhRx, Q + 0], L0¬L0.RD, BRANCH[RDMUD,$], c1, RMFRet[L0.RD]; Q ¬ Q + 1, PgCarryBr, c2; T ¬ MD, BRANCH[RDa, RDb], c3; RDa: MAR ¬ [rhRx, Q + 0], c1; RDc: IBDisp, STK ¬ T, GOTO[LLa], c2; RDb: Map ¬ Q ¬ [rhMDS, Q], c1; rhTT ¬ UvMDS, GOTO[RDLe], c2; RDMUD: CALL[RMapFix], c2; {***************************************************************************** RDL0 and RDLB *****************************************************************************} @RDL0: TT ¬ STK{ptrL}, pop, L1¬L1.Dec, c1, opcode[107'b]; PC ¬ PC - PC16, pop, GOTO[RDLa], c2; @RDLB: TT ¬ STK{ptrL}, pop, L1¬L1.Dec2, c1, opcode[110'b]; TT ¬ TT + ib, CarryBr, pop, c2; RDLa: rhTT ¬ TOS{ptrH} LRot0, BRANCH[RDLMc1,RDLb], c3; RDLb: L2¬L2.RDL, CALL[VAHiInc], c1; VAHiInc: Q ¬ rhTT + 1, L2Disp, LOOPHOLE[byteTiming], c2; rhTT ¬ Q LRot0, RET[VAHiRtn], c3; RDLMc1: Map ¬ Q ¬ [rhTT,TT], c1, VAHiRet[L2.RDL]; RDLMc2: PC ¬ PC + 1, push, c2; RDLMc3: Rx ¬ rhRx ¬ MD, XRefBr, push, c3; RDL: MAR ¬ [rhRx,Q + 0], L0¬L0.RDL0, BRANCH[RDLM0,$], c1, RLMFRet[L0.RDL0]; [] ¬ Q + 1, PgCarryBr, c2; T ¬ MD, BRANCH[RDLc, RDLd], c3; RDLc: MAR ¬ [rhRx, Q + 1], c1; RDLg: STK ¬ T, IBDisp, CANCELBR[LLa,0], c2; RDLd: Map ¬ Q ¬ [rhTT, Q + 1], CarryBr, c1; RDLh: TT ¬ rhTT + 1, LOOPHOLE[byteTiming], BRANCH[RDLe, RDLf], c2; RDLe: Rx ¬ rhRx ¬ MD, XRefBr, c3; MAR ¬ [rhRx,Q + 0], L0¬L0.RDL1, BRANCH[RDLM1,RDLg], c1, RLMFRet[L0.RDL1]; RDLf: rhTT ¬ TT LRot0, c3; Map ¬ Q ¬ [rhTT, Q + 0], GOTO[RDLh], c1; RDLM0: CALL[RLMapFix], c2; RDLM1: CALL[RLMapFix], c2; {***************************************************************************** RC *****************************************************************************} @RC: rhTT ¬ UvChigh, c1, at[0B,10,ESC1n]; TT ¬ UvC, pop, c2; TT ¬ TT + ib, L1¬L1.Dec3, push, c3; Map ¬ Q ¬ [rhTT, TT + TOS], c1; PC ¬ PC + PC16, GOTO[RLMpc3], c2; {***************************************************************************** RLI0n{n:[0..3]} *****************************************************************************} @RLI00: MAR ¬ [rhL, L+0], push, c1, opcode[123'b]; T ¬ 0, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2; @RLI01: MAR ¬ [rhL, L+0], push, c1, opcode[124'b]; T ¬ 1, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2; @RLI02: MAR ¬ [rhL, L+0], push, c1, opcode[125'b]; T ¬ 2, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2; @RLI03: MAR ¬ [rhL, L+0], push, c1, opcode[126'b]; T ¬ 3, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2; RLI0n: Q ¬ MD, push, fZpop, c3; Map ¬ Q ¬ [rhMDS, Q + T], pop, GOTO[Rn], c1; {***************************************************************************** RLIP *****************************************************************************} @RLIP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLIP, push, c1, opcode[127'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[LIPa,LIPb,1], c2; Map ¬ Q ¬ [rhMDS, TT], L1¬L1.PopDec2, c1, IPRet[L0.RLIP]; LIPe: GOTO[RMpc3], c2; LIPa: TT ¬ MD, c3; LIPc: TT ¬ TT + alpha.right, L1¬L1.PopDec2, c1, LGMRet[L2.LIPx]; Xbus ¬ ib, Q ¬ TT, L0Disp, c2; rhTT ¬ UvMDS, RET[IPRtn], c3; LIPb: TT ¬ UvL, c3; LIPd: rhTT ¬ UvMDS, CALL[LGMap], c1; {***************************************************************************** RLILP *****************************************************************************} @RLILP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLILP, push, c1, opcode[130'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LILP0, BRANCH[LILPa,LILPb,1], c2; Rx ¬ rhRx ¬ MD, XRefBr, GOTO[RL], c3, ILPRet[L0.RLILP]; LILPa: TT ¬ MD, c3; MAR ¬ Q ¬ [rhL, L+alpha.left+1], L1¬L1.PopDec2, c1, LGMRet[L2.LILP0x]; T ¬ TT + alpha.right, CarryBr, BRANCH[LILPc,LILPd,1], c2; LILPc: rhTT ¬ MD, BRANCH[LILPe, LILPf], c3; LILPe: Map ¬ Q ¬ [rhTT, T], L0Disp, GOTO[LILPg], c1, LGMRet[L2.LILP1]; LILPg: TT ¬ T, Xbus ¬ ib, RET[ILPRtn], c2; LILPf: Noop, c1, LGMRet[L2.LILP1x]; Q ¬ rhTT + 1, LOOPHOLE[byteTiming], c2; rhTT ¬ Q LRot0, GOTO[LILPe], c3; LILPb: TT ¬ UvL, GOTO[LIPd], c3; LILPd: TT ¬ UvL, L2¬L2.LILP1, BRANCH[LIPd,$], c3; rhTT ¬ UvMDS, CALL[LGMap], c1; {***************************************************************************** RLDI00 *****************************************************************************} @RLDI00: MAR ¬ [rhL, L+0], push, L1¬L1.Pop2Dec, c1, opcode[131'b]; STK ¬ TOS, PC ¬ PC + PC16, c2; TT ¬ MD, GOTO[RDMpc1], c3; {***************************************************************************** RLDIP *****************************************************************************} @RLDIP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLDIP, push, c1, opcode[132'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[LIPa,LIPb,1], c2; Map ¬ Q ¬ [rhMDS, TT], L1¬L1.Pop2Dec2, GOTO[RDMpc2], c1, IPRet[L0.RLDIP]; {***************************************************************************** RLDILP *****************************************************************************} @RLDILP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLDILP, push, c1, opcode[133'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LILP0, BRANCH[LILPa,LILPb,1], c2; PC ¬ PC - 1, pop, L1¬L1.Pop2Dec2, GOTO[RDLMc1], c3, ILPRet[L0.RLDILP]; {***************************************************************************** RGIP *****************************************************************************} @RGIP: MAR ¬ Q ¬ [rhG, G+alpha.left], L0¬L0.RLIP, push, c1, opcode[134'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[GIPa,GIPb,1], c2; GIPa: TT ¬ MD, GOTO[LIPc], c3; GIPb: TT ¬ UvG, c3; GIPc: rhTT ¬ UvGhigh, CALL[LGMap], c1; {***************************************************************************** RGILP *****************************************************************************} @RGILP: MAR ¬ Q ¬ [rhG, G+alpha.left], L0¬L0.RLILP, push, c1, opcode[135'b]; STK ¬ TOS, PC ¬ PC + 1, L2¬L2.GILP0, BRANCH[GILPa,GILPb,1], c2; GILPa: TT ¬ MD, c3; MAR ¬ Q ¬ [rhG, G+alpha.left+1], L1¬L1.PopDec2, c1, LGMRet[L2.GILP0x]; T ¬ TT + alpha.right, CarryBr, BRANCH[GILPc,GILPd,1], c2; GILPc: rhTT ¬ MD, BRANCH[LILPe, LILPf], c3; GILPb: TT ¬ UvG, GOTO[GIPc], c3; GILPd: TT ¬ UvG, L2¬L2.LILP1, BRANCH[GIPc, $], c3; rhTT ¬ UvGhigh, CALL[LGMap], c1; {***************************************************************************** ROB Read Overhead Byte *****************************************************************************} @ROB: TT ¬ TOS - ib, L1¬L1.Dec3, c1, at[0E,10,ESC1n]; PC ¬ PC - PC16, pop, GOTO[RBa], c2; { E N D }