head 1.1; branch 1.1.1; access ; symbols start:1.1.1.1 Xerox:1.1.1; locks ; strict; comment @# @; 1.1 date 2001.08.12.22.22.23; author freier; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2001.08.12.22.22.23; author freier; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @{File name LoadStore.mc Description: Mesa Load and Store op-codes Author: JGS Created: February 16, 1980 AHL 27-Aug-86 12:02:35 MDS relief changes. AHL 28-Feb-86 20:12:21 Fix SLDe to do the right thing. DEG 1-Sep-84 19:39:12, Add copyright notice. AXD 15-Jun-83 18:01:14, New instruction set. CRF 29-Apr-83 16:31:38, Changed L1.PushDec2 to L1.Push in SGDB to handle PC correctly on page faults JGS November 10, 1981 11:27 AM, New Instruction Set RXG April 1, 1980 12:20 PM} { Copyright (C) 1980, 1981, 1983 by Xerox Corporation. All rights reserved.} { LIn Load Immediate n = 0-10 LIB Load Immediate Byte LIHB Load Immediate High Byte LINB Load Immediate Negative Byte LIW Load Immediate Word LIN1 Load Immediate Negative One LINI Load Immediate Negative Infinity LID0 Load Immediate Double Zero LLn Load Local n = 0-11 LLB Load Local Byte LLDn Load Local Double n = 0-8,10 LLDB Load Local Double Byte PLn Put Local n = 0-3 PLB Put Local Byte PLD0 Put Local Double Zero PLDB Put Local Double Byte SLn Store Local n = 0-10 SLB Store Local Byte SLDn Store Local Double n = 0-6,8 SLDB Store Local Double Byte LAn Local Address n = 0-3,6,8 LAB Local Address Byte LAW Local Address Word LGn Load Global n = 0-2 LGB Load Global Byte LGDn Load Global Double n = 0,2 LGDB Load Global Double Byte SGB Store Global Byte SGDB Store Global Double Byte GAn Global Address n = 0-1 GAB Global Address Byte GAW Global Address Word LGA0 Long Global Address 0 LGAB Long Global Address Byte LGAW Long Global Address Word DESC Descriptor LP Lengthen Pointer } {Times for memory operations are + 2 if page cross + 2 if fix map flags} {L2 LSMap} MacroDef[LSr, at[#1,10,LSRtn]]; Set[L2.LL, 1]; Set[L2.LLx, Or[L2.LL, 2]]; Set[L2.LLD, 5]; Set[L2.LLDx, Or[L2.LLD, 2]]; Set[L2.SL, 0]; Set[L2.SLD, 9]; Set[L2.SLDx, Or[L2.SLD, 2]]; Set[L2.PLD, 0D]; Set[L2.SLDn, 4]; MacroDef[LSGr, at[#1,10,LSGRtn]]; Set[L2.LG, 1]; Set[L2.LGx, Or[L2.LG, 2]]; Set[L2.LGD, 5]; Set[L2.LGDx, Or[L2.LGD, 2]]; Set[L2.SG, 0]; Set[L2.SGD, 0E]; {***************************************************************************** LIn{n:[0..10]} Load Immediate n 1 click *****************************************************************************} @@LI0: T ¬ 0, push, GOTO[LIn], c1, opcode[300'b]; @@LI1: T ¬ 1, push, GOTO[LIn], c1, opcode[301'b]; @@LI2: T ¬ 2, push, GOTO[LIn], c1, opcode[302'b]; @@LI3: T ¬ 3, push, GOTO[LIn], c1, opcode[303'b]; @@LI4: T ¬ 4, push, GOTO[LIn], c1, opcode[304'b]; @@LI5: T ¬ 5, push, GOTO[LIn], c1, opcode[305'b]; @@LI6: T ¬ 6, push, GOTO[LIn], c1, opcode[306'b]; @@LI7: T ¬ 7, push, GOTO[LIn], c1, opcode[307'b]; @@LI8: T ¬ 8, push, GOTO[LIn], c1, opcode[310'b]; @@LI9: T ¬ 9, push, GOTO[LIn], c1, opcode[311'b]; @@LI10: T ¬ 0A, push, GOTO[LIn], c1, opcode[312'b]; LIn: STK ¬ TOS, PC ¬ PC + PC16, IBDisp, c2, at[0,4,LIn]; PushT: TOS ¬ T, push, fZpop, DISPNI[OpTable], c3; {***************************************************************************** LIB Load Immediate Byte 1 click *****************************************************************************} @@LIB: T ¬ ib, push, c1, opcode[315'b]; STK ¬ TOS, PC ¬ PC + 1, IBDisp, GOTO[PushT], c2; {***************************************************************************** LIHB Load Immediate High Byte 1 click *****************************************************************************} @@LIHB: T ¬ ib, push, c1, opcode[320'b]; STK ¬ TOS, PC ¬ PC + 1, push, fZpop, IBDisp, c2; TOS ¬ T LRot8, DISPNI[OpTable], c3; {***************************************************************************** LINB Load Immediate Negative Byte 1 click *****************************************************************************} @@LINB: Q ¬ ib, push, c1, opcode[317'b]; STK ¬ TOS, PC ¬ PC + 1, push, fZpop, IBDisp, c2; TOS ¬ Q xor ~0FF, DISPNI[OpTable], c3; {***************************************************************************** LIW Load Immediate Word 2 clicks *****************************************************************************} @@LIW: T ¬ ib, push, L0 ¬ 0, c1, opcode[316'b]; LIWx: PC ¬ PC + 1, c2; LIWa: T ¬ T LRot8, L0Disp, c3; T ¬ T or ib, DISP2[LIn], c1; {***************************************************************************** LIN1 Load Immediate Negative One 1 click *****************************************************************************} @@LIN1: T ¬ T xor ~T, push, GOTO[LIn], c1, opcode[313'b]; {***************************************************************************** LINI Load Immediate Negative Infinity 1 click *****************************************************************************} @@LINI: T ¬ RShift1 0, SE ¬ 1, push, GOTO[LIn], c1, opcode[314'b]; {***************************************************************************** LID0 Load Immediate Double Zero 1 click *****************************************************************************} @@LID0: push, c1, opcode[321'b]; STK ¬ TOS, PC ¬ PC + PC16, push, IBDisp, c2; STK ¬ TOS ¬ 0, push, fZpop, DISPNI[OpTable], c3; {***************************************************************************** LLn{n:[0..11]} Load Local n 1 click *****************************************************************************} @@LL0: MAR ¬ Q ¬ [rhL, L+0], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[1'b]; @@LL1: MAR ¬ Q ¬ [rhL, L+1], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[2'b]; @@LL2: MAR ¬ Q ¬ [rhL, L+2], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[3'b]; @@LL3: MAR ¬ Q ¬ [rhL, L+3], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[4'b]; @@LL4: MAR ¬ Q ¬ [rhL, L+4], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[5'b]; @@LL5: MAR ¬ Q ¬ [rhL, L+5], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[6'b]; @@LL6: MAR ¬ Q ¬ [rhL, L+6], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[7'b]; @@LL7: MAR ¬ Q ¬ [rhL, L+7], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[10'b]; @@LL8: MAR ¬ Q ¬ [rhL, L+8], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[11'b]; @@LL9: MAR ¬ Q ¬ [rhL, L+9], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[12'b]; @@LL10: MAR ¬ Q ¬ [rhL, L+0A], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[13'b]; @@LL11: MAR ¬ Q ¬ [rhL, L+0B], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[14'b]; LLn: STK ¬ TOS, PC ¬ PC + PC16, IBDisp, L2¬L2.LL, BRANCH[LLa,LLb,1], c2; LLa: TOS ¬ MD, push, fZpop, DISPNI[OpTable], c3; LLb: Rx ¬ UvL, GOTO[LSMap], c3; {***************************************************************************** LLB Load Local Byte 1 click *****************************************************************************} @@LLB: MAR ¬ Q ¬ [rhL, L+ib], L1¬L1.PopDec2, push, c1, opcode[15'b]; STK ¬ TOS, PC ¬ PC + 1, IBDisp, L2¬L2.LL, BRANCH[LLa,LLb,1], c2; {***************************************************************************** LLDn Load Local Double n, n = 0-8,10 2 clicks *****************************************************************************} @@LLD0: MAR ¬ Q ¬ [rhL, L + 0], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[16'b]; @@LLD1: MAR ¬ Q ¬ [rhL, L + 1], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[17'b]; @@LLD2: MAR ¬ Q ¬ [rhL, L + 2], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[20'b]; @@LLD3: MAR ¬ Q ¬ [rhL, L + 3], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[21'b]; @@LLD4: MAR ¬ Q ¬ [rhL, L + 4], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[22'b]; @@LLD5: MAR ¬ Q ¬ [rhL, L + 5], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[23'b]; @@LLD6: MAR ¬ Q ¬ [rhL, L + 6], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[24'b]; @@LLD7: MAR ¬ Q ¬ [rhL, L + 7], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[25'b]; @@LLD8: MAR ¬ Q ¬ [rhL, L + 8], push, L1¬L1.Pop2Dec, GOTO[LLDn], c1, opcode[26'b]; @@LLD10: MAR ¬ Q ¬ [rhL, L + 0A], push, L1¬L1.Pop2Dec,GOTO[LLDn], c1, opcode[27'b]; LLDn: STK ¬ TOS, PC ¬ PC + PC16, push, L2¬L2.LLD, BRANCH[LLDa, LLDb,1], c2; LLDa: T ¬ MD, GOTO[LLD2], c3; LLDb: Rx ¬ UvL, GOTO[LSMap], c3; LLD2: MAR ¬ Q ¬ [rhL, Q + 1], c1; STK ¬ T, IBDisp, L2¬L2.LL, BRANCH[LLa,LLb,1], c2; {***************************************************************************** LLDB Load Local Double Byte 2 clicks *****************************************************************************} @@LLDB: MAR ¬ Q ¬ [rhL, L + ib], push, L1¬L1.Pop2Dec2, c1, opcode[30'b]; STK ¬ TOS, PC ¬ PC + 1, push, L2¬L2.LLD, BRANCH[LLDa, LLDb,1], c2; {***************************************************************************** PLn{n:[0..3]} Put Local n 1 click *****************************************************************************} {no page carry possible on local 0-3} @@PL0: MAR ¬ Q ¬ [rhL, L+0], fXpop, push, GOTO[PLn], c1, opcode[55'b]; @@PL1: MAR ¬ Q ¬ [rhL, L+1], fXpop, push, GOTO[PLn], c1, opcode[56'b]; @@PL2: MAR ¬ Q ¬ [rhL, L+2], fXpop, push, GOTO[PLn], c1, opcode[57'b]; @@PL3: MAR ¬ Q ¬ [rhL, L+3], fXpop, push, GOTO[PLn], c1, opcode[60'b]; PLn: MDR ¬ TOS, PC ¬ PC + PC16, IBDisp, CANCELBR[PLa,0], c2; {***************************************************************************** PLB Put Local Byte 1 click *****************************************************************************} @@PLB: MAR ¬ Q ¬ [rhL, L+ib], L1 ¬ L1.PopDec2, push, c1, opcode[61'b]; PLBx: STK ¬ MDR ¬ TOS, PC ¬ PC + 1, IBDisp, fXpop, fZpop, BRANCH[PLa,PLb,1], c2; PLa: DISPNI[OpTable], c3; PLb: Rx ¬ UvL, L2¬L2.SL, push, GOTO[LSMap], c3; {***************************************************************************** PLD0 Put Local Double Zero 2 clicks *****************************************************************************} @@PLD0: MAR ¬ Q ¬ [rhL, L + 0], fXpop, fZpop, push, c1, opcode[62'b]; MDR ¬ STK, c2; GOTO[@@PL1], c3; {***************************************************************************** PLDB Put Local Double Byte 2 clicks *****************************************************************************} @@PLDB: MAR ¬ Q ¬ [rhL, L + ib], L1¬L1.None, c1, opcode[63'b]; MDR ¬ STK, fXpop, fZpop, push, BRANCH[PLDBa, PLDBb,1], c2; PLDBa: GOTO[PLDB2], c3; PLDBb: Rx ¬ UvL, L2¬L2.PLD, push, GOTO[PLBc], c3; PLDB2: MAR ¬ Q ¬ [rhL, Q + 1], push, L1¬L1.PopDec2, GOTO[PLBx], c1; PLBc: STK ¬ T ¬ TOS, pop, GOTO[LSMapx], c1; {***************************************************************************** SLn{n:[0..10]} Store Local n 1 click *****************************************************************************} @@SL0: MAR ¬ Q ¬ [rhL, L+0], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[31'b]; @@SL1: MAR ¬ Q ¬ [rhL, L+1], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[32'b]; @@SL2: MAR ¬ Q ¬ [rhL, L+2], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[33'b]; @@SL3: MAR ¬ Q ¬ [rhL, L+3], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[34'b]; @@SL4: MAR ¬ Q ¬ [rhL, L+4], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[35'b]; @@SL5: MAR ¬ Q ¬ [rhL, L+5], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[36'b]; @@SL6: MAR ¬ Q ¬ [rhL, L+6], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[37'b]; @@SL7: MAR ¬ Q ¬ [rhL, L+7], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[40'b]; @@SL8: MAR ¬ Q ¬ [rhL, L+8], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[41'b]; @@SL9: MAR ¬ Q ¬ [rhL, L+9], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[42'b]; @@SL10: MAR ¬ Q ¬ [rhL, L+0A], L1¬L1.Dec, push, GOTO[SLn], c1, opcode[43'b]; SLn: MDR ¬ STK ¬ TOS, PC ¬ PC + PC16, pop, IBDisp, BRANCH[SLa,SLb,1], c2; SLa: TOS ¬ STK, pop, DISPNI[OpTable], c3; SLb: Rx ¬ UvL, L2¬L2.SL, GOTO[LSMap], c3; {***************************************************************************** SLB Store Local Byte 1 click *****************************************************************************} @@SLB: MAR ¬ Q ¬ [rhL, L+ib], L1 ¬ L1.Dec2, push, c1, opcode[44'b]; SLBx: MDR ¬ STK ¬ TOS, PC ¬ PC + 1, pop, IBDisp, BRANCH[SLa,SLb,1], c2; {***************************************************************************** SLDn Load Local Double n, n = 0-6,8 2 clicks *****************************************************************************} @@SLD0: MAR ¬ Q ¬ [rhL, L + 0], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[45'b]; @@SLD1: MAR ¬ Q ¬ [rhL, L + 1], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[46'b]; @@SLD2: MAR ¬ Q ¬ [rhL, L + 2], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[47'b]; @@SLD3: MAR ¬ Q ¬ [rhL, L + 3], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[50'b]; @@SLD4: MAR ¬ Q ¬ [rhL, L + 4], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[51'b]; @@SLD5: MAR ¬ Q ¬ [rhL, L + 5], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[52'b]; @@SLD6: MAR ¬ Q ¬ [rhL, L + 6], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[53'b]; @@SLD8: MAR ¬ Q ¬ [rhL, L + 8], L1¬L1.PushInc, GOTO[SLDn], c1, opcode[54'b]; SLDn: MDR ¬ TT ¬ STK, push, BRANCH[SLDa,SLDb,1], c2; SLDa: STK ¬ TOS, PC ¬ PC + PC16, L1¬L1.PushDec, GOTO[SLDc], c3; SLDb: Rx ¬ UvL, L2¬L2.SLDn, GOTO[SLDe], c3; SLDc: MAR ¬ Q ¬ [rhL, Q + 1], pop, c1; SLDd: MDR ¬ TOS, pop, IBDisp, BRANCH[SLa,SLb,1], c2; SLDe: T ¬ STK ¬ TOS, GOTO[LSMapx], c1; {***************************************************************************** SLDB Store Local Double Byte 2 clicks *****************************************************************************} @@SLDB: MAR ¬ Q ¬ [rhL, L + ib], L1¬L1.Push, c1, opcode[165'b]; MDR ¬ STK, push, L2¬L2.SLD, BRANCH[SLDBa, SLDBb,1], c2; SLDBa: PC ¬ PC + 1, STK ¬ TOS, L1¬L1.PushDec2, GOTO[SLDBc], c3; SLDBb: Rx ¬ UvL, GOTO[LSMap], c3; SLDBc: MAR ¬ Q ¬ [rhL, Q + 1], pop, GOTO[SLDd], c1; {***************************************************************************** LAn Local Address n, n = 0-3,6,8 2 clicks *****************************************************************************} @@LA0: T ¬ UvL, push, GOTO[LIn], c1, opcode[322'b]; @@LA1: T ¬ 1, push, GOTO[LAa], c1, opcode[323'b]; @@LA2: T ¬ 2, push, GOTO[LAa], c1, opcode[324'b]; @@LA3: T ¬ 3, push, GOTO[LAa], c1, opcode[325'b]; @@LA6: T ¬ 6, push, GOTO[LAa], c1, opcode[326'b]; @@LA8: T ¬ 8, push, GOTO[LAa], c1, opcode[327'b]; LAa: Noop, c2, at[1,4,LIn]; LAb: TT ¬ UvL, c3; LAc: T ¬ TT + T, GOTO[LIn], c1; {***************************************************************************** LAB Local Address Byte 2 clicks *****************************************************************************} @@LAB: T ¬ ib, push, c1, opcode[330'b]; PC ¬ PC + PC16, GOTO[LAb], c2; {***************************************************************************** LAW Local Address Word 2 clicks *****************************************************************************} @@LAW: T ¬ ib, push, L0¬1, c1, opcode[331'b]; PC ¬ PC + 1, GOTO[LIWa], c2; {***************************************************************************** LGn{n:[0..2]} Load Global n 1 click *****************************************************************************} @@LG0: MAR ¬ Q ¬ [rhG, G+0], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[64'b]; @@LG1: MAR ¬ Q ¬ [rhG, G+1], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[65'b]; @@LG2: MAR ¬ Q ¬ [rhG, G+2], L1¬L1.PopDec, push, GOTO[LLn], c1, opcode[66'b]; {***************************************************************************** LGB Load Global Byte 1 click *****************************************************************************} @@LGB: MAR ¬ Q ¬ [rhG, G+ib], L1¬L1.PopDec2, push, c1, opcode[67'b]; STK ¬ TOS, PC ¬ PC + 1, IBDisp, L2¬L2.LG, BRANCH[LGa,LGb,1], c2; LGa: TOS ¬ MD, push, fZpop, DISPNI[OpTable], c3; LGb: TT ¬ UvG, GOTO[LSGMap], c3; {***************************************************************************** LGDn Load Global Double n, n = 0,2 2 clicks *****************************************************************************} @@LGD0: MAR ¬ Q ¬ [rhG, G + 0], push, L1¬L1.Pop2Dec, GOTO[LGDn], c1, opcode[70'b]; @@LGD2: MAR ¬ Q ¬ [rhG, G + 2], push, L1¬L1.Pop2Dec, GOTO[LGDn], c1, opcode[71'b]; LGDn: STK ¬ TOS, PC ¬ PC + PC16, push, BRANCH[LGDa,LGDb,1], c2; {***************************************************************************** LGDB Load Global Double Byte 2 clicks *****************************************************************************} @@LGDB: MAR ¬ Q ¬ [rhG, G + ib], push, L1¬L1.Pop2Dec2, c1, opcode[72'b]; STK ¬ TOS, PC ¬ PC + 1, push, L2¬L2.LGD, BRANCH[LGDa,LGDb,1], c2; LGDa: T ¬ MD, GOTO[LGD2], c3; LGDb: TT ¬ UvG, GOTO[LSGMap], c3; LGD2: MAR ¬ Q ¬ [rhG, Q + 1], c1; STK ¬ T, IBDisp, L2¬L2.LG, BRANCH[LGa,LGb,1], c2; {***************************************************************************** SGB Store Global Byte 2 click *****************************************************************************} @@SGB: rhTT ¬ UvGhigh, push, c1, opcode[73'b]; Xbus ¬ rhG, XDirtyDisp, L2 ¬ L2.SG, c2; TT ¬ UvG, BRANCH[SGa, SGb, 1], c3; SGa: Map ¬ [rhTT, TT], L1 ¬ L1.Pop, c1; SGe: Q ¬ G + ib, c2; STK ¬ TOS, rhG ¬ MD, GOTO[LSGMap], c3; SGb: MAR ¬ Q ¬ [rhG, G + ib], L1 ¬ L1.Pop, c1; MDR ¬ STK ¬ TOS, PC ¬ PC + 1, pop, IBDisp, BRANCH[SGc,SGd,1], c2; SGc: TOS ¬ STK, pop, DISPNI[OpTable], c3; SGd: PC ¬ PC - 1, push, GOTO[LSGMap], c3; {***************************************************************************** SGDB Store Global Double Byte 2 clicks *****************************************************************************} @@SGDB: rhTT ¬ UvGhigh, push, c1, opcode[166'b]; Xbus ¬ rhG, XDirtyDisp, L1 ¬ L1.None, c2; TT ¬ UvG, BRANCH[SGDa, SGDb, 1], c3; SGDa: Map ¬ [rhTT, TT], L2 ¬ L2.SGD, GOTO[SGe], c1; SGDb: MAR ¬ Q ¬ [rhG, G + ib + 1], L2 ¬ L2.SGD, c1; MDR ¬ STK ¬ TOS, pop, BRANCH[SGDd,SGDc,1], c2; SGDc: Q ¬ Q - 1, push, GOTO[LSGMap], c3; SGDd: T ¬ STK, c3; MAR ¬ [rhG, Q - 1], GOTO[WDLb], c1; {***************************************************************************** GAn Global Address n, n = 0-1 1 clicks *****************************************************************************} @@GA0: T ¬ UvG, push, GOTO[LIn], c1, opcode[332'b]; @@GA1: T ¬ 1, push, c1, opcode[333'b]; GOTO[GABa], c2; {***************************************************************************** GAB Global Address Byte 2 clicks *****************************************************************************} @@GAB: T ¬ ib, push, c1, opcode[334'b]; PC ¬ PC + PC16, c2; GABa: TT ¬ UvG, GOTO[LAc], c3; {***************************************************************************** GAW Global Address Word 2 clicks *****************************************************************************} @@GAW: T ¬ ib, push, L0¬2, c1, opcode[335'b]; PC ¬ PC + 1, GOTO[LIWa], c2; GOTO[GABa], c2, at[2,4,LIn]; {***************************************************************************** LGA0 Long Global Address 0 2 clicks *****************************************************************************} @@LGA0: TT ¬ UvG, push, c1, opcode[372'b]; STK ¬ TOS, T ¬ 0, push, GOTO[LGAb], c2; {***************************************************************************** LGAB Long Global Address Byte 3 clicks *****************************************************************************} @@LGAB: T ¬ 0, push, L0¬3, c1, opcode[373'b]; STK ¬ TOS, PC ¬ PC + PC16, GOTO[LIWa], c2; {***************************************************************************** LGAW Long Global Address Word 3 clicks *****************************************************************************} @@LGAW: T ¬ ib, push, L0¬3, c1, opcode[374'b]; STK ¬ TOS, PC ¬ PC + 1, GOTO[LIWa], c2; LGAa: TT ¬ UvG, push, c2, at[3,4,LIn]; LGAb: TT ¬ T + TT, c3; STK ¬ TT, PC ¬ PC + PC16, c1; T ¬ UvGhigh, IBDisp, GOTO[PushT], c2; {***************************************************************************** DESC Descriptor 1 clicks *****************************************************************************} @@DESC: T ¬ uGFI, push, c1, opcode[375'b]; STK ¬ TOS, c2; TOS ¬ T or 3, GOTO[@@LIW], c3; {***************************************************************************** LP Lengthen Pointer 2 click *****************************************************************************} @@LP: [] ¬ TOS, ZeroBr, fXpop, push, c1, opcode[367'b]; BRANCH[LPnot, LPnil], c2; LPnot: T ¬ UvMDS, GOTO[LPTail], c3; LPnil: T ¬ 0, GOTO[LPTail], c3; LPTail: push, GOTO[LIn], c1; {***************************************************************************** Load/Store Carry Logic *****************************************************************************} LSMap: T ¬ TOS, {for SLD and SGD} c1; LSMapx: Q ¬ Q - Rx, L2Disp, c2; Q ¬ Q and 0FF, RET[LSRtn], c3; LLMap: Map ¬ Q ¬ [rhMDS, Rx+Q], GOTO[LIPe], c1, LSr[L2.LLx]; LDMap: Map ¬ Q ¬ [rhMDS, Rx+Q], pop, GOTO[RDMpc2], c1, LSr[L2.LLDx]; SLMap: Map ¬ Q ¬ [rhMDS, Rx+Q], c1, LSr[L2.SL]; T ¬ TOS, GOTO[WMpc3], c2; SDMap: Map ¬ Q ¬ [rhMDS, Rx+Q], pop, GOTO[WDMpc2], c1, LSr[L2.SLDx]; SDnMap: Map ¬ Q ¬ [rhMDS, Rx+Q], pop, c1, LSr[L2.SLDn]; PC ¬ PC - PC16, pop, GOTO[WDMpc3], c2; PDMap: Map ¬ Q ¬ [rhMDS, Rx+Q], c1, LSr[L2.PLD]; TT ¬ STK, push, GOTO[WDMpc3], c2; LSGMap: Q ¬ Q - TT, c1; Q ¬ Q and 0FF, L2Disp, c2; TT ¬ TT + Q, rhTT ¬ UvGhigh, RET[LSGRtn], c3; {LGMap:} Map ¬ Q ¬ [rhTT, TT], c1, LSGr[L2.LGx]; GOTO[RLMpc3], c2; LGDMap: Map ¬ Q ¬ [rhTT, TT], pop, c1, LSGr[L2.LGDx]; GOTO[RDLMc3], c2; SGMap: Map ¬ Q ¬ [rhTT, TT], GOTO[WLMpc2], c1, LSGr[L2.SG]; SGDMap: Map ¬ Q ¬ [rhTT, TT], GOTO[WDLMc2], c1, LSGr[L2.SGD]; { E N D } @ 1.1.1.1 log @first add @ text @@