{File name Kiku2MLoadStore.mc
Description: Mesa Load and Store op-codes
Author: Sandman
Created: February 16, 1980
I. Yamaura, 1-Nov-84 10:36:26, Change for 2M word at {+++}
Daniels, 15-Jun-83 18:01:14, New instruction set.
Fay, 29-Apr-83 16:31:38, Changed L1.PushDec2 to L1.Push in SGDB to handle PC correctly on page faults
Sandman, November 10, 1981 11:27 AM, New Instruction Set
Garner, April 1, 1980 12:20 PM}
{
LLn Load Local n = 0-11
LLB Load Local Byte
LLDn Load Local Double n = 0-8,10
LLDB Load 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
LIN1 Load Immediate Negative One
LINI Load Immediate Negative Infinity
LIn Load Immediate n = 0-10
LIB Load Immediate Byte
LINB Load Immediate Negative Byte
LIW Load Immediate Word
LID0 Load Immediate Double Zero
LAn Local Address n = 0-3,6,8
LAB Local Address Byte
LAW Local Address Word
PLn Put Local n = 0-3
PLB Put Local Byte
PLDn Put Local Double n = 0
PLDB Put Local Double Byte
GAn Global Address n = 0-1
GAB Global Address Byte
GAW Global 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
}
{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];
{*****************************************************************************
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;
{*****************************************************************************
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.LL, BRANCH[LGa,LGb,1], c2;
LGa: TOS ← MD, push, fZpop, DISPNI[OpTable], c3;
LGb: Rx ← UvG, GOTO[LSMap], c3;
{*****************************************************************************
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;
{*****************************************************************************
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.LLD, BRANCH[LGDa,LGDb,1], c2;
LGDa: T ← MD, GOTO[LGD2], c3;
LGDb: Rx ← UvG, GOTO[LSMap], c3;
LGD2: MAR ← Q ← [rhG, Q + 1], c1;
STK ← T, IBDisp, L2←L2.LL, BRANCH[LGa,LGb,1], c2;
{*****************************************************************************
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;
PushT: TOS ← T, push, fZpop, DISPNI[OpTable], c3;
{*****************************************************************************
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];
{*****************************************************************************
LIB Load Immediate Byte 1 click
*****************************************************************************}
@LIB: T ← ib, push, c1, opcode[315'b];
STK ← TOS, PC ← PC + 1, IBDisp, GOTO[PushT], c2;
{*****************************************************************************
LIW Load Immediate Word 2 clicks
*****************************************************************************}
@LIW: T ← ib, push, c1, opcode[316'b];
LIWx: PC ← PC + 1, c2;
T ← T LRot8, c3;
T ← T or ib, GOTO[LIn], c1;
{*****************************************************************************
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;
{*****************************************************************************
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;
{*****************************************************************************
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;
{*****************************************************************************
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;
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←0, c1, opcode[331'b];
T ← T LRot8, c2;
LAWa: T ← T or ib, c3;
PC ← PC + 1, L0Disp, c1;
BRANCH[LAb, GABa], c2;
{*****************************************************************************
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←1, c1, opcode[335'b];
T ← T LRot8, GOTO[LAWa], c2;
{*****************************************************************************
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;
{*****************************************************************************
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;
{*****************************************************************************
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;
{*****************************************************************************
SGB Store Global Byte 1 click
*****************************************************************************}
@SGB: Q ← G + ib, PgCarryBr, L1←L1.Dec2, c1, opcode[73'b];
Xbus ← rhG, XwdDisp, push, BRANCH[SGa, SGb], c2; {+++ Change for 2M +++}
SGa: Rx ← UvG, DISP2[SGFix], c3; {+++ Change for 2M +++}
SGb: STK ← TOS, pop, PC ← PC + 1, CANCELBR[SGCross,3], c3;
SGOK: MAR ← [rhG, Q+0], GOTO[SLBx], c1,at[1,4,SGFix]; {+++ Change for 2M +++}
SGFix: Map ← [rhMDS, Rx],GOTO[SGFix1] c1,at[0,4,SGFix]; {+++ Change for 2M +++}
Map ← [rhMDS, Rx],GOTO[SGFix1] c1,at[2,4,SGFix]; {+++ Change for 2M +++}
Map ← [rhMDS, Rx],GOTO[SGFix1] c1,at[3,4,SGFix]; {+++ Change for 2M +++}
SGFix1: STK ← TOS, pop, PC ← PC + 1, c2; {+++ Change for 2M +++}
rhG ← MD, GOTO[SGCross], c3;
SGCross:
Rx ← UvG, L2←L2.SL, GOTO[LSMapx], c1;
{*****************************************************************************
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 ← 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;
{*****************************************************************************
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;
{*****************************************************************************
SGDB Store Global Double Byte 2 clicks
*****************************************************************************}
@SGDB: Q ← G + ib + 1, PgCarryBr, L1←L1.Push, c1, opcode[166'b];
Xbus ← rhG, Q ← Q - 1, XwdDisp, push, BRANCH[SGDa, SGDb], c2; {+++ Change for 2M +++}
SGDa: Rx ← UvG, DISP2[SGDc], c3; {+++ Change for 2M +++}
SGDc: Map ← [rhMDS, Rx], L2←L2.SLDx,GOTO[SGDe], c1,at[0,4,SGDc]; {+++ Change for 2M +++}
Map ← [rhMDS, Rx], L2←L2.SLDx,GOTO[SGDe], c1,at[2,4,SGDc]; {+++ Change for 2M +++}
Map ← [rhMDS, Rx], L2←L2.SLDx,GOTO[SGDe], c1,at[3,4,SGDc]; {+++ Change for 2M +++}
SGDe: STK ← TOS, c2;
rhG ← MD, GOTO[LSMap], c3;
SGDd: MAR ← Q ← [rhG, Q + 0], pop, c1,at[1,4,SGDc]; {+++ Change for 2M +++}
MDR ← STK, push, c2;
PC ← PC + 1, STK ← TOS, pop, c3;
MAR ← [rhG, Q + 1], GOTO[SLDd], L1←L1.PushDec2, c1;
SGDb: Rx ← UvG, CANCELBR[$,3], c3;
Map ← [rhMDS, Rx], L2←L2.SLDx, GOTO[SGDe], 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], c1, LSr[L2.LLx];
GOTO[RMpc3], c2;
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]; {+++ Change for 2M +++}
PC ← PC - PC16, pop, GOTO[WDMpc3], c2;
PDMap: Map ← Q ← [rhMDS, Rx+Q], c1, LSr[L2.PLD]; {+++ Change for 2M +++}
TT ← STK, push, GOTO[WDMpc3], c2;
{ E N D }