mirror of
https://github.com/livingcomputermuseum/Darkstar.git
synced 2026-02-28 17:39:41 +00:00
39 lines
21 KiB
Plaintext
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
|
|
@@
|