mirror of
https://github.com/livingcomputermuseum/Darkstar.git
synced 2026-02-28 09:37:43 +00:00
39 lines
10 KiB
Plaintext
39 lines
10 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.26; author freier; state Exp;
|
|
branches 1.1.1.1;
|
|
next ;
|
|
|
|
1.1.1.1
|
|
date 2001.08.12.22.22.26; author freier; state Exp;
|
|
branches ;
|
|
next ;
|
|
|
|
|
|
desc
|
|
@@
|
|
|
|
|
|
|
|
1.1
|
|
log
|
|
@Initial revision
|
|
@
|
|
text
|
|
@{
|
|
File name read.mc
|
|
Description: Mesa Read op-codes
|
|
Author: don DXC
|
|
Created: February 16, 1980
|
|
Dennis DEG , 1-Sep-84 19:46:40, Add copyright notice
|
|
AeF AEF , 11-Nov-83 11:15:09, Add labels at R+1 and RL+1
|
|
AXD , 15-Jun-83 18:18:49, new instruction set
|
|
JGS , January 13, 1982 3:32 PM, add L1¬L1.PopDec2 in LILP for RLIPF
|
|
JGS , November 2, 1981 3:43 PM, new instruction set
|
|
Last edited: DXC , March 28, 1980 5:06 PM
|
|
Last edited: R. RXG , April 2, 1980 4:51 PM
|
|
Last edited: JGS , 26-May-81 10:24:01
|
|
}
|
|
|
|
{ Copyright (C) 1980, 1981, 1982, 1983 by Xerox Corporation. All rights reserved.}
|
|
|
|
{
|
|
Rn Read n = 0-1
|
|
RB Read Byte
|
|
RLn Read Long n = 0
|
|
RLB Read Long Byte
|
|
RDn Read Double n = 0
|
|
RDB Read Double Byte
|
|
RDLn Read Double Long n = 0
|
|
RDLB Read Double Long Byte
|
|
RC Read Code
|
|
|
|
RLI0n Read Local Indirect Zero n = 0-3
|
|
RLIP Read Local Indirect Pair
|
|
RLILP Read Local Indirect Long Pair
|
|
RLDI0n Read Local Double Indirect Zero n = 0
|
|
RLDIP Read Local Double Indirect Pair
|
|
RLDILP Read Local Double Indirect Long Pair
|
|
|
|
RGIP Read Global Indirect Pair
|
|
RGILP Read Global Indirect Long Pair
|
|
|
|
ROB Read Overhead Byte
|
|
}
|
|
|
|
{*****************************************************************************
|
|
Rn{n:[0..1]}
|
|
*****************************************************************************}
|
|
|
|
@@R0: Map ¬ Q ¬ [rhMDS, TOS + 0], L1¬L1.Dec, pop, GOTO[Rn], c1, opcode[100'b];
|
|
@@R1: Map ¬ Q ¬ [rhMDS, TOS + 1], L1¬L1.Dec, pop, GOTO[Rn], c1, opcode[101'b];
|
|
|
|
Rn: push, PC ¬ PC + PC16, c2;
|
|
RMpc3: Rx ¬ rhRx ¬ MD, XRefBr, c3;
|
|
|
|
R: MAR ¬ [rhRx, Q + 0], L0¬L0.R, BRANCH[RMUD,$], c1, RMFRet[L0.R];
|
|
Ra: IBDisp, GOTO[LLa], c2;
|
|
|
|
RMUD: CALL[RMapFix], c2;
|
|
|
|
|
|
{*****************************************************************************
|
|
RB
|
|
*****************************************************************************}
|
|
|
|
@@RB: TT ¬ TOS + ib, L1¬L1.Dec2, c1, opcode[102'b];
|
|
pop, c2;
|
|
RBa: rhTT ¬ UvMDS, push, GOTO[RLMpc1], c3;
|
|
|
|
|
|
{*****************************************************************************
|
|
RL0 and RLB
|
|
*****************************************************************************}
|
|
|
|
@@RL0: TT ¬ STK{ptrL}, pop, L1¬L1.PushDec, c1, opcode[103'b];
|
|
PC ¬ PC - PC16, pop, GOTO[RLa], c2;
|
|
|
|
@@RLB: TT ¬ STK{ptrL}, pop, L1¬L1.PushDec2, c1, opcode[104'b];
|
|
TT ¬ TT + ib, CarryBr, pop, c2;
|
|
RLa: rhTT ¬ TOS{ptrH} LRot0, push, BRANCH[RLMpc1,RLb], c3;
|
|
|
|
RLb: Noop, c1;
|
|
Q ¬ rhTT + 1, LOOPHOLE[byteTiming], c2;
|
|
rhTT ¬ Q LRot0, c3;
|
|
|
|
RLMpc1: Map ¬ Q ¬ [rhTT,TT], c1;
|
|
RLMpc2: PC ¬ PC + 1, c2;
|
|
RLMpc3: Rx ¬ rhRx ¬ MD, XRefBr, c3;
|
|
|
|
RL: MAR ¬ [rhRx, Q + 0], L0¬L0.RL, BRANCH[RLMUD,$], c1, RLMFRet[L0.RL];
|
|
RLc: IBDisp, GOTO[LLa], c2;
|
|
|
|
RLMUD: CALL[RLMapFix], c2;
|
|
|
|
|
|
{*****************************************************************************
|
|
RD0 and RDB
|
|
*****************************************************************************}
|
|
|
|
@@RD0: Map ¬ Q ¬ [rhMDS, TOS + 0], L1¬L1.PopDec, c1, opcode[105'b];
|
|
PC ¬ PC + PC16, fXpop, push, GOTO[RDMpc3], c2;
|
|
|
|
@@RDB: TT ¬ TOS + ib, L1¬L1.PopDec2, c1, opcode[106'b];
|
|
PC ¬ PC + 1, fXpop, push, c2;
|
|
Noop, c3;
|
|
|
|
RDMpc1: Map ¬ Q ¬ [rhMDS, TT], c1;
|
|
RDMpc2: Noop, c2;
|
|
RDMpc3: Rx ¬ rhRx ¬ MD, XRefBr, push, c3;
|
|
|
|
RD: MAR ¬ [rhRx, Q + 0], L0¬L0.RD, BRANCH[RDMUD,$], c1, RMFRet[L0.RD];
|
|
Q ¬ Q + 1, PgCarryBr, c2;
|
|
T ¬ MD, BRANCH[RDa, RDb], c3;
|
|
|
|
RDa: MAR ¬ [rhRx, Q + 0], c1;
|
|
RDc: IBDisp, STK ¬ T, GOTO[LLa], c2;
|
|
|
|
RDb: Map ¬ Q ¬ [rhMDS, Q], c1;
|
|
rhTT ¬ UvMDS, GOTO[RDLe], c2;
|
|
|
|
RDMUD: CALL[RMapFix], c2;
|
|
|
|
|
|
{*****************************************************************************
|
|
RDL0 and RDLB
|
|
*****************************************************************************}
|
|
|
|
@@RDL0: TT ¬ STK{ptrL}, pop, L1¬L1.Dec, c1, opcode[107'b];
|
|
PC ¬ PC - PC16, pop, GOTO[RDLa], c2;
|
|
|
|
@@RDLB: TT ¬ STK{ptrL}, pop, L1¬L1.Dec2, c1, opcode[110'b];
|
|
TT ¬ TT + ib, CarryBr, pop, c2;
|
|
RDLa: rhTT ¬ TOS{ptrH} LRot0, BRANCH[RDLMc1,RDLb], c3;
|
|
|
|
RDLb: L2¬L2.RDL, CALL[VAHiInc], c1;
|
|
VAHiInc:
|
|
Q ¬ rhTT + 1, L2Disp, LOOPHOLE[byteTiming], c2;
|
|
rhTT ¬ Q LRot0, RET[VAHiRtn], c3;
|
|
|
|
RDLMc1: Map ¬ Q ¬ [rhTT,TT], c1, VAHiRet[L2.RDL];
|
|
RDLMc2: PC ¬ PC + 1, push, c2;
|
|
RDLMc3: Rx ¬ rhRx ¬ MD, XRefBr, push, c3;
|
|
|
|
RDL: MAR ¬ [rhRx,Q + 0], L0¬L0.RDL0, BRANCH[RDLM0,$], c1, RLMFRet[L0.RDL0];
|
|
[] ¬ Q + 1, PgCarryBr, c2;
|
|
T ¬ MD, BRANCH[RDLc, RDLd], c3;
|
|
|
|
RDLc: MAR ¬ [rhRx, Q + 1], c1;
|
|
RDLg: STK ¬ T, IBDisp, CANCELBR[LLa,0], c2;
|
|
|
|
RDLd: Map ¬ Q ¬ [rhTT, Q + 1], CarryBr, c1;
|
|
RDLh: TT ¬ rhTT + 1, LOOPHOLE[byteTiming], BRANCH[RDLe, RDLf], c2;
|
|
RDLe: Rx ¬ rhRx ¬ MD, XRefBr, c3;
|
|
|
|
MAR ¬ [rhRx,Q + 0], L0¬L0.RDL1, BRANCH[RDLM1,RDLg], c1, RLMFRet[L0.RDL1];
|
|
|
|
RDLf: rhTT ¬ TT LRot0, c3;
|
|
|
|
Map ¬ Q ¬ [rhTT, Q + 0], GOTO[RDLh], c1;
|
|
|
|
RDLM0: CALL[RLMapFix], c2;
|
|
RDLM1: CALL[RLMapFix], c2;
|
|
|
|
|
|
{*****************************************************************************
|
|
RC
|
|
*****************************************************************************}
|
|
|
|
@@RC: rhTT ¬ UvChigh, c1, at[0B,10,ESC1n];
|
|
TT ¬ UvC, pop, c2;
|
|
TT ¬ TT + ib, L1¬L1.Dec3, push, c3;
|
|
|
|
Map ¬ Q ¬ [rhTT, TT + TOS], c1;
|
|
PC ¬ PC + PC16, GOTO[RLMpc3], c2;
|
|
|
|
|
|
{*****************************************************************************
|
|
RLI0n{n:[0..3]}
|
|
*****************************************************************************}
|
|
|
|
@@RLI00: MAR ¬ [rhL, L+0], push, c1, opcode[123'b];
|
|
T ¬ 0, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2;
|
|
|
|
@@RLI01: MAR ¬ [rhL, L+0], push, c1, opcode[124'b];
|
|
T ¬ 1, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2;
|
|
|
|
@@RLI02: MAR ¬ [rhL, L+0], push, c1, opcode[125'b];
|
|
T ¬ 2, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2;
|
|
|
|
@@RLI03: MAR ¬ [rhL, L+0], push, c1, opcode[126'b];
|
|
T ¬ 3, STK ¬ TOS, L1¬L1.PopDec, GOTO[RLI0n], c2;
|
|
|
|
RLI0n: Q ¬ MD, push, fZpop, c3;
|
|
|
|
Map ¬ Q ¬ [rhMDS, Q + T], pop, GOTO[Rn], c1;
|
|
|
|
|
|
{*****************************************************************************
|
|
RLIP
|
|
*****************************************************************************}
|
|
|
|
@@RLIP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLIP, push, c1, opcode[127'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[LIPa,LIPb,1], c2;
|
|
|
|
Map ¬ Q ¬ [rhMDS, TT], L1¬L1.PopDec2, c1, IPRet[L0.RLIP];
|
|
LIPe: GOTO[RMpc3], c2;
|
|
|
|
LIPa: TT ¬ MD, c3;
|
|
|
|
LIPc: TT ¬ TT + alpha.right, L1¬L1.PopDec2, c1, LGMRet[L2.LIPx];
|
|
Xbus ¬ ib, Q ¬ TT, L0Disp, c2;
|
|
rhTT ¬ UvMDS, RET[IPRtn], c3;
|
|
|
|
LIPb: TT ¬ UvL, c3;
|
|
|
|
LIPd: rhTT ¬ UvMDS, CALL[LGMap], c1;
|
|
|
|
|
|
{*****************************************************************************
|
|
RLILP
|
|
*****************************************************************************}
|
|
|
|
@@RLILP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLILP, push, c1, opcode[130'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LILP0, BRANCH[LILPa,LILPb,1], c2;
|
|
|
|
Rx ¬ rhRx ¬ MD, XRefBr, GOTO[RL], c3, ILPRet[L0.RLILP];
|
|
|
|
LILPa: TT ¬ MD, c3;
|
|
|
|
MAR ¬ Q ¬ [rhL, L+alpha.left+1], L1¬L1.PopDec2, c1, LGMRet[L2.LILP0x];
|
|
T ¬ TT + alpha.right, CarryBr, BRANCH[LILPc,LILPd,1], c2;
|
|
LILPc: rhTT ¬ MD, BRANCH[LILPe, LILPf], c3;
|
|
|
|
LILPe: Map ¬ Q ¬ [rhTT, T], L0Disp, GOTO[LILPg], c1, LGMRet[L2.LILP1];
|
|
LILPg: TT ¬ T, Xbus ¬ ib, RET[ILPRtn], c2;
|
|
|
|
LILPf: Noop, c1, LGMRet[L2.LILP1x];
|
|
|
|
Q ¬ rhTT + 1, LOOPHOLE[byteTiming], c2;
|
|
rhTT ¬ Q LRot0, GOTO[LILPe], c3;
|
|
|
|
LILPb: TT ¬ UvL, GOTO[LIPd], c3;
|
|
LILPd: TT ¬ UvL, L2¬L2.LILP1, BRANCH[LIPd, $], c3;
|
|
|
|
rhTT ¬ UvMDS, CALL[LGMap], c1;
|
|
|
|
{*****************************************************************************
|
|
RLDI00
|
|
*****************************************************************************}
|
|
|
|
@@RLDI00:
|
|
MAR ¬ [rhL, L+0], push, L1¬L1.Pop2Dec, c1, opcode[131'b];
|
|
STK ¬ TOS, PC ¬ PC + PC16, c2;
|
|
TT ¬ MD, GOTO[RDMpc1], c3;
|
|
|
|
|
|
{*****************************************************************************
|
|
RLDIP
|
|
*****************************************************************************}
|
|
|
|
@@RLDIP: MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLDIP, push, c1, opcode[132'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[LIPa,LIPb,1], c2;
|
|
|
|
Map ¬ Q ¬ [rhMDS, TT], L1¬L1.Pop2Dec2, GOTO[RDMpc2], c1, IPRet[L0.RLDIP];
|
|
|
|
|
|
{*****************************************************************************
|
|
RLDILP
|
|
*****************************************************************************}
|
|
|
|
@@RLDILP:
|
|
MAR ¬ Q ¬ [rhL, L+alpha.left], L0¬L0.RLDILP, push, c1, opcode[133'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LILP0, BRANCH[LILPa,LILPb,1], c2;
|
|
|
|
PC ¬ PC - 1, pop, L1¬L1.Pop2Dec2, GOTO[RDLMc1], c3, ILPRet[L0.RLDILP];
|
|
|
|
|
|
|
|
{*****************************************************************************
|
|
RGIP
|
|
*****************************************************************************}
|
|
|
|
@@RGIP: MAR ¬ Q ¬ [rhG, G+alpha.left], L0¬L0.RLIP, push, c1, opcode[134'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.LIP, BRANCH[GIPa,GIPb,1], c2;
|
|
GIPa: TT ¬ MD, GOTO[LIPc], c3;
|
|
|
|
GIPb: TT ¬ UvG, c3;
|
|
|
|
GIPc: rhTT ¬ UvGhigh, CALL[LGMap], c1;
|
|
|
|
|
|
{*****************************************************************************
|
|
RGILP
|
|
*****************************************************************************}
|
|
|
|
@@RGILP: MAR ¬ Q ¬ [rhG, G+alpha.left], L0¬L0.RLILP, push, c1, opcode[135'b];
|
|
STK ¬ TOS, PC ¬ PC + 1, L2¬L2.GILP0, BRANCH[GILPa,GILPb,1], c2;
|
|
|
|
GILPa: TT ¬ MD, c3;
|
|
|
|
MAR ¬ Q ¬ [rhG, G+alpha.left+1], L1¬L1.PopDec2, c1, LGMRet[L2.GILP0x];
|
|
T ¬ TT + alpha.right, CarryBr, BRANCH[GILPc,GILPd,1], c2;
|
|
GILPc: rhTT ¬ MD, BRANCH[LILPe, LILPf], c3;
|
|
|
|
GILPb: TT ¬ UvG, CALL[GIPc], c3;
|
|
GILPd: TT ¬ UvG, L2¬L2.LILP1, BRANCH[GIPc, $], c3;
|
|
|
|
rhTT ¬ UvGhigh, CALL[LGMap], c1;
|
|
|
|
|
|
{*****************************************************************************
|
|
ROB Read Overhead Byte
|
|
*****************************************************************************}
|
|
|
|
@@ROB: TT ¬ TOS - ib, L1¬L1.Dec3, c1, at[0E,10,ESC1n];
|
|
PC ¬ PC - PC16, pop, GOTO[RBa], c2;
|
|
|
|
|
|
{ E N D }
|
|
|
|
@
|
|
|
|
|
|
1.1.1.1
|
|
log
|
|
@first add
|
|
@
|
|
text
|
|
@@
|