1
0
mirror of https://github.com/livingcomputermuseum/Darkstar.git synced 2026-02-28 17:39:41 +00:00
Files
livingcomputermuseum.Darkstar/D/CP/Source/LoadStore.mc,v
2023-09-27 16:17:41 -07:00

39 lines
21 KiB
Plaintext

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
@@