{File name LoadStore.mc
Description: Mesa Load and Store op-codes
Author: JGS
Created: February 16, 1980
JPM 20-Feb-87 9:10:32 Bug fix in SGDB (L1 ← L1.None instead of L1.Pop).
AHL/JPM 6-Jan-87 12:02:35 MDS relief changes.
AHL 28-Feb-86 20:12:21 Fix SLDe to do the right thing.
JPM, 11-Sep-84 13:42:42, Fix BRANCH mask after XWtOKDisp; fix allocation errors.
DEG, 1-Sep-84 19:39:12, Add copyright notice.
JPM, 9-May-84 13:19:57, Replaced XDirtyDisp by XWtOKDisp
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, 1984 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 Load Immediate n, n = 0-10 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,10,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, DISP4[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 Load Local n, n = 0-11 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 Put Local n, n = 0-3 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 Store Local n, n = 0-10 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 Store 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, L0 ← 1, GOTO[LAa], c1, opcode[323'b];
@LA2: T ← 2, push, L0 ← 1, GOTO[LAa], c1, opcode[324'b];
@LA3: T ← 3, push, L0 ← 1, GOTO[LAa], c1, opcode[325'b];
@LA6: T ← 6, push, L0 ← 1, GOTO[LAa], c1, opcode[326'b];
@LA8: T ← 8, push, L0 ← 1, GOTO[LAa], c1, opcode[327'b];
LAa: STK ← TOS, PC ← PC + PC16, c2, at[1,10,LIn];
LAb: L0Disp, c3;
BRANCH[LAc,GAb,1], c1;
{*****************************************************************************
LAB Local Address Byte 2 clicks
*****************************************************************************}
@LAB: T ← ib, push, L0 ← 1, c1, opcode[330'b];
STK ← TOS, PC ← PC + 1, GOTO[LAb], c2;
{*****************************************************************************
LAW Local Address Word 3 clicks
*****************************************************************************}
@LAW: T ← ib, push, L0 ← 1, c1, opcode[331'b];
PC ← PC + 1, GOTO[LIWa], c2;
LAc: TOS ← UvL, IBDisp, c2;
PushTOSplusT:
TOS ← TOS + T, push, fZpop, DISPNI[OpTable], c3;
{*****************************************************************************
LGn Load Global n, n=0-2 1 click
*****************************************************************************}
{no page carry possible on global 0-2}
@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 clicks
*****************************************************************************}
@SGB: rhTT ← UvGhigh, push, c1, opcode[73'b];
Xbus ← rhG, XWtOKDisp, L2 ← L2.SG, c2;
TT ← UvG, BRANCH[SGa,SGb,0D], 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 3 clicks
*****************************************************************************}
@SGDB: rhTT ← UvGhigh, push, c1, opcode[166'b];
Xbus ← rhG, XWtOKDisp, L1 ← L1.None, c2;
TT ← UvG, BRANCH[SGDa,SGDb,0D], 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, L0 ← 3, c1, opcode[333'b];
STK ← TOS, PC ← PC + PC16, GOTO[LAb], c2, at[3,10,LIn];
{*****************************************************************************
GAB Global Address Byte 2 clicks
*****************************************************************************}
@GAB: T ← ib, push, L0 ← 3, c1, opcode[334'b];
STK ← TOS, PC ← PC + 1, GOTO[LAb], c2;
{*****************************************************************************
GAW Global Address Word 3 clicks
*****************************************************************************}
@GAW: T ← ib, push, L0 ← 3, c1, opcode[335'b];
PC ← PC + 1, GOTO[LIWa], c2;
GAb: TOS ← UvG, IBDisp, GOTO[PushTOSplusT], c2;
{*****************************************************************************
LGA0 Long Global Address Zero 1 clicks
*****************************************************************************}
@LGA0: T ← 0, push, c1, opcode[372'b];
STK ← TOS, PC ← PC + PC16, push, GOTO[LGAa], c2;
{*****************************************************************************
LGAB Long Global Address Byte 2 clicks
*****************************************************************************}
@LGAB: T ← ib, push, c1, opcode[373'b];
STK ← TOS, PC ← PC + 1, push, c2, at[2,10,LIn];
LGAa: TT ← UvG, c3;
TT ← TT + T, push, fZpop, c1;
STK ← TT, IBDisp, c2;
TOS ← UvGhigh, DISPNI[OpTable], c3;
{*****************************************************************************
LGAW Long Global Address Word 3 clicks
*****************************************************************************}
@LGAW: T ← ib, push, L0 ← 2, c1, opcode[374'b];
PC ← PC + PC16, GOTO[LIWa], c2;
{*****************************************************************************
DESC Descriptor 3 clicks
*****************************************************************************}
@DESC: T ← uGFI, push, c1, opcode[375'b];
STK ← TOS, c2;
TOS ← T or 3, GOTO[@LIW], c3;
{*****************************************************************************
LP Lengthen Pointer 1 click
*****************************************************************************}
@LP: [] ← TOS, ZeroBr, push, c1, opcode[367'b];
STK ← TOS, PC ← PC + PC16, IBDisp, push, BRANCH[LPnot, LPnil], c2;
LPnot: TOS ← UvMDS, pop, DISPNI[OpTable], c3;
LPnil: TOS ← 0, pop, DISPNI[OpTable], c3;
{*****************************************************************************
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, L0←L0.W, GOTO[WMpc3], c2;
SDMap: Map ← Q ← [rhMDS, Rx+Q], pop, GOTO[WDMpc2], c1, LSr[L2.SLDx];
SDnMap: Map ← Q ← [rhMDS, Rx+Q], pop, L0←L0.WD, c1, LSr[L2.SLDn];
PC ← PC - PC16, pop, GOTO[WDMpc3], c2;
PDMap: Map ← Q ← [rhMDS, Rx+Q], c1, LSr[L2.PLD];
TT ← STK, push, L0←L0.WD, 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 }