{ File name read.mc Description: Mesa Read op-codes Author: don charnley Created: February 16, 1980 Amy Fasnacht, 11-Nov-83 11:15:09, Add labels at R+1 and RL+1 Daniels, 15-Jun-83 18:18:49, new instruction set Sandman, January 13, 1982 3:32 PM, add L1_L1.PopDec2 in LILP for RLIPF Sandman, November 2, 1981 3:43 PM, new instruction set Last edited: Charnley, March 28, 1980 5:06 PM Last edited: R. Garner, April 2, 1980 4:51 PM Last edited: Sandman, 26-May-81 10:24:01 } { 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]; 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, CALL[LGMap], c3; {***************************************************************************** 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, CALL[LGMap], c3; LILPd: TT _ UvL, L2_L2.LILP1, BRANCH[LGMap, LGMy], c3; {***************************************************************************** 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, CALL[LGMap], c3; {***************************************************************************** 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, CALL[LGMap], c3; GILPd: TT _ UvG, L2_L2.LILP1, BRANCH[LGMap, LGMy], c3; {***************************************************************************** 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 }