DragonOpSum.tioga December 19, 1984 9:46:53 am PST Last Edited by Curry - Save Using - Copy /INDIGO/Dragon/Documentation/ _ DragonOpSum.tioga Conditional Jumps JEBB -J JBB--3-2-1 Jump = Byte Byte IF [S ] = A: THEN PC _ PC + B:s +EZ S_S-1 JNEBB-J JBB--3-2-1 Jump # Byte Byte IF [S ] # A: THEN PC _ PC + B:s -EZ S_S-1 RJEB -J RJB--3-2-1 Reg Jump = Byte IF [S|S-1] = Rb THEN PC _ PC + B:s +EZ S|S-1|S-2 RJNEB-J RJB--3-2-1 Reg Jump # Byte IF [S|S-1] # Rb THEN PC _ PC + B:s -EZ S|S-1|S-2 RJLB -J RJB--3-2-1 Reg Jump < Byte IF [S|S-1] < Rb THEN PC _ PC + B:s +LZ S|S-1|S-2 RJGEB-J RJB--3-2-1 Reg Jump >= Byte IF [S|S-1] >= Rb THEN PC _ PC + B:s -LZ S|S-1|S-2 RJLEB-J RJB--3-2-1 Reg Jump <= Byte IF [S|S-1] <= Rb THEN PC _ PC + B:s +LE S|S-1|S-2 RJGB -J RJB--3-2-1 Reg Jump > Byte IF [S|S-1] > Rb THEN PC _ PC + B:s -LE S|S-1|S-2 Unconditional Jumps J1 OI---1-1-1 Jump PC+1 PC _ PC + 1 J2 OB---2-1-1 Jump PC+2 PC _ PC + 2 J3 ODB--3-1-1 Jump PC+3 PC _ PC + 3 J5 OQB--5-1-1 Jump PC+5 PC _ PC + 5 JB OB---2-1-1 Jump Byte PC _ PC + A:s JDB ODB--3-1-1 Jump Double Byte PC _ PC + B:A:s DJ OQB--5-1-1 Direct Jump PC _ D:G:B:A: SJ OI---1-1-1 Stack Jump PC _ PC + [S] S_S-1 Returns RET OB---2-1-1 Return Pop(PC, L) S_L+A: RETK OB---2-1-1 Return from kernal Pop(PC, L) after doing SPR IFUStatus S_L+A: RETN OI---1-1-1 Return No Adjst Pop(PC, L) RETT OI---1-1-1 Return From Trap Pop(PC, L) Calls Trap ------32-1 Trap Push PC PC_TrapLoc XOP1 ----1----1 Direct Call Push PC+1 PC_xop[OP] [S]_D:G:B:A: * S_S+1* XOP2 ----2----1 Direct Call Push PC+2 PC_xop[OP] [S]_D:G:B:A: * S_S+1* XOP3 ----3----1 Direct Call Push PC+3 PC_xop[OP] [S]_D:G:B:A: * S_S+1* XOP5 ----5----1 Direct Call Push PC+5 PC_xop[OP] [S]_D:G:B:A: * S_S+1* KFC OI---1-1-1 Kernal Call Push PC+1 PC_xop[OP] [S]_IFUStatus * S_S+1 LFC ODB--3-1-1 Local Call Push PC+3 PC_PC+B:A:s * DFC OQB--5-1-1 Direct Call Push PC+5 PC_D:G:B:A: * SFC OI---1-1-3 Stack Call Push PC+1 PC_[S] * S_S-1 SFCI OI---1-1-3 Stk Call Indirect Push PC+1 PC_[S]^ * * Read PIN OB---2-1-1 PBus Fetch [ S ] _ ([ S ] )^A: In OB---2-1-1 Input [ S ] _ ([ S ] + B:A:)^I/O * RB OB---2-1-1 Read Byte [ S ] _ ([ S ] + A: )^ * RSB OB---2-1-1 Read Save Byte [ S+1 ] _ ([ S ] + A: )^ * S_S+1* LRIn LRB-2-16-1 Load Reg Indrct n [ S+1 ] _ ([ L+n ] + A: )^ * S_S+1* LGF ODB--3-1-1 Load Global Frame [ S+1 ] _ ([Ax+gb ] + B:A:)^ * S_S+1* RAI LRRB-3-1-1 Read Aux Reg Indrct [ L+B:l] _ ([Ax+B:r] + A: )^ * RRI LRRB-3-1-1 Read Reg Indrct [ L+B:l] _ ([ L+B:r] + A: )^ * CST old=[S+1] tst=[S] A=[S-1] new=[S-2] CST CST--2-1-5 Conditional STore IF old_A^H=tst THEN A^_new ELSE[]_A^ *|EZ S_S+1* Write POUT OB---2-1-1 PBus Store ([ S ] )^A: _ [ S-1 ] S_S-2 Out OB---2-1-1 Ouput ([ S ] + B:A:)^I/O _ [ S-1 ] * S_S-2 WB OB---2-1-1 Writ Byte ([ S ] + A: )^ _ [ S-1 ] * S_S-2 WSB OB---2-1-1 Writ Swapped Byte ([ S-1 ] + A: )^ _ [ S ] * S_S-2 PSB OB---2-1-1 Put Swapped Byte ([ S-1 ] + A: )^ _ [ S ] * S_S-1 SRIn LRB-2-16-1 Stor Reg Indrct n ([ L+n ] + A: )^ _ [ S ] * S_S-1 WRI LRRB-3-1-1 Writ Reg Indrct ([ L+B:l] + A: )^ _ [ L+B:r] * WAI LRRB-3-1-1 Writ Aux Reg Indrct ([Ax+B:l] + A: )^ _ [ L+B:r] * Index fiddling instructions DIS OI---1-1-1 DIScard S _ S - 1 No data moves S_S-1 EP (ALS) OB---2-1-1 Enter Procedure L _ (S + A:) MOD StackSize AL OB---2-1-1 Add to L L _ (L + A:) MOD StackSize AS OB---2-1-1 Add to Stack S _ (S + A:) MOD StackSize S_S+A: ASL OB---2-1-1 Add to Stack from L S _ (L + A:) MOD StackSize S_L+A: Stack Load Store LIB OB---2-1-1 Load Im Byte [ S+1 ] _ A: S_S+1* LIDB ODB--3-1-1 Load Im Dbl Byte [ S+1 ] _ B:A: S_S+1* LIQB OQB--5-1-1 Load Im Quad Byte [ S+1 ] _ D:G:B:A: S_S+1* LRn LR--1-16-1 Load from LOC n [ S+1 ] _ [ L+n ] S_S+1* SRn LR--1-16-1 Store to LOC n [ L+n ] _ [ S ] S_S-1 LIP OB---2-1-1 Load Internal Proc [ S+1 ] _ [ A: ] S_S+1* SIP OB---2-1-1 Store Internal Proc [ A: ] _ [ S ] S_S-1 LCn OI---1-8-1 Load from CON n [ S+1 ] _ [CON+n ] S_S+1* DUP OI---1-1-1 DUPlicate [ S+1 ] _ [ S ] S_S+1* EXDIS OI---1-1-1 EXCHange discard [ S-1 ] _ [ S ] S_S-1 EXCH OI---1-1-2 EXCHange [ S-1 ] _ [ S ] [S]_[S-1] NO Bypass Arithmetic Immediate Ops ADDB OB---2-1-1 Add Byte [S] _ [S] + A: *+OF SUBB OB---2-1-1 Sub Byte [S] _ [S] - A: *+OF ADDDB ODB--3-1-1 Add Double Byte [S] _ [S] + B:A: *+OF SUBDB ODB--3-1-1 Sub Double Byte [S] _ [S] - B:A: *+OF Arithmetic Logical Stack Ops ADD OI---1-1-1 Stack signed ADD [S-1] _ [S-1] + [S] + C C _ 0 *+OF S_S-1 SUB OI---1-1-1 Stack signed SUB [S-1] _ [S-1] - [S] - C C _ 0 *+OF S_S-1 LADD OI---1-1-1 Stack Lisp ADD [S-1] _ [S-1] + [S] C _ 0 *+IL S_S-1 LSUB OI---1-1-1 Stack Lisp SUB [S-1] _ [S-1] - [S] C _ 0 *+IL S_S-1 OR OI---1-1-1 Stack OR [S-1] _ [S-1] Or [S] S_S-1 AND OI---1-1-1 Stack AND [S-1] _ [S-1] And[S] S_S-1 RX OI---1-1-1 Stack Read indeXed [S-1] _ ([S-1] + [S])^ * S_S-1 BC OI---1-1-1 Stack BoundsCheck [S-1]<0 ([S-1] - [S])>=0 => *+BC S_S-1 Arithmetic Logical Quick Ops ADD R1---2-1-1 Quick signed ADD [S] _ [S] + Rb + C C _ 0 *+OF SUB R1---2-1-1 Quick signed SUB [S] _ [S] - Rb - C C _ 0 *+OF LADD R1---2-1-1 Quick Lisp ADD [S] _ [S] + Rb C _ 0 *+IL LSUB R1---2-1-1 Quick Lisp SUB [S] _ [S] - Rb C _ 0 *+IL OR R1---2-1-1 Quick OR [S] _ [S] OR Rb AND R1---2-1-1 Quick AND [S] _ [S] AND Rb RX R1---2-1-1 Quick Read indeXed [S] _ ([S] + Rb)^ * BC R1---2-1-1 Quick BoundsCheck [S]<0 ([S] - Rb)>=0 => *+BC Arithmetic Logical Field Register Ops RADD RR---3-1-1 Reg signed ADD Rc _ Ra + Rb + C C _ 0 *+OF RRStk* RSUB RR---3-1-1 Reg signed SUB Rc _ Ra - Rb - C C _ 0 *+OF RRStk* RLADD RR---3-1-1 Reg Lisp ADD Rc _ Ra + Rb C _ 0 *+IL RRStk* RLSUB RR---3-1-1 Reg Lisp SUB Rc _ Ra - Rb C _ 0 *+IL RRStk* ROR RR---3-1-1 Reg OR Rc _ Ra OR Rb RRStk* RAND RR---3-1-1 Reg AND Rc _ Ra AND Rb RRStk* RRX RR---3-1-1 Reg Read indeXed Rc _ (Ra + Rb)^ * RRStk* RBC RR---3-1-1 Reg Bounds Check Ra<0 (Ra - Rb)>=0 *+BC RRStk* RVSUB RR---3-1-1 Reg Vanilla SUB Rc _ Ra - Rb RRStk* RVADD RR---3-1-1 Reg Vanilla ADD Rc _ Ra + Rb RRStk* RUADD RR---3-1-1 Reg Unsigned ADD Rc _ Ra + Rb + C C _ COut RRStk* RUSUB RR---3-1-1 Reg Unsigned SUB Rc _ Ra - Rb - C C _~COut RRStk* RXOR RR---3-1-1 Reg XOR Rc _ Ra XOR Rb RRStk* RFU RR---3-1-1 Reg Field Unit Rc _ Ra FU Rb FUop_field RRStk* Field, Multiply, Divide and Floating Point FSDB ODB--3-1-1 Field Set Dbl Byte [ field ] _ [S] + B:A: S_S-1 SHL ODB--3-1-1 Left Shift [S ] _ [S ] FU 0 FUop_B:A: SHR ODB--3-1-1 Right Shift Extract [S ] _ [S ] FU [S] FUop_B:A: SHD ODB--3-1-1 Double Shift [S-1] _ [S-1] FU [S] FUop_B:A: S_S-1 UDIV OI---1-1-1 Unsigned Division QtntRem=[S-2][S-1] _ [S-2][S-1]/[S] *+OF S_S-1 SMUL OI---1-1-1 Signed Multiply DblProd=[S-1][S ] _ [S-1]*[S] SFP OB---2-1-1 Store Floating Pt [fpxAarg] _ [stack] FPStk* FLIP ODB--3-1-1 FP Internal result [fpxAarg] _ [fpxAarg] op [stack] * FPStk* FLOP ODB--3-1-1 FP Stack result [stack] _ [fpxAarg] op [stack] * FPStk* Map 0000 0 : OI 1 Byte x x x x x x x x 0000 1 : OI 1 Byte x x x x x x x x 0001 0 : OI 1 Byte x x x x x x x x 0001 1 : OI 1 Byte x x x x x x x x 0010 0 : OQB 5 Bytes x x x x x x x x 0010 1 : --- 5 Bytes x x x x x x x x 0011 0 : --- 5 Bytes x DFC LIQB x x x J5 DJ 0011 1 : --- 5 Bytes x x x x x x x x 0100 0 : RR0 1 Byte OR AND RX BC ADD SUB LADD LSUB 0100 1 : OI 1 Byte DUP DIS EXCH EXDIS SFC SFCI RETN x 0101 0 : OI 1 Byte x SMUL UDIV x KFC x J1 SJ 0101 1 : OI 1 Byte LC0 LC1 LC2 LC3 LC4 LC5 LC6 LC7 0110 0 : LR 1 Byte LR0 LR1 LR2 LR3 LR4 LR5 LR6 LR7 0110 1 : LR 1 Byte LR8 LR9 LR10 LR11 LR12 LR13 LR14 LR15 0111 0 : LR 1 Byte SR0 SR1 SR2 SR3 SR4 SR5 SR6 SR7 0111 1 : LR 1 Byte SR8 SR9 SR10 SR11 SR12 SR13 SR14 SR15 1000 0 : RR1 2 Bytes QOR QAND QRX QBC QADD QSUB QLADD QLSUB 1000 1 : OB 2 Bytes EP AL ASL AS CST x RET RETK 1001 0 : OB 2 Bytes LIP SIP LIB SFP ADDB SUBB J2 JB 1001 1 : OB 2 Bytes RB WB RSB WSB PIN POUT x PSB 1010 0 : LRB 2 Bytes LRI0 LRI1 LRI2 LRI3 LRI4 LRI5 LRI6 LRI7 1010 1 : LRB 2 Bytes LRI8 LRI9 LRI10 LRI11 LRI12 LRI13 LRI14 LRI15 1011 0 : LRB 2 Bytes SRI0 SRI1 SRI2 SRI3 SRI4 SRI5 SRI6 SRI7 1011 1 : LRB 2 Bytes SRI8 SRI9 SRI10 SRI11 SRI12 SRI13 SRI14 SRI15 1100 0 : RR3 3 Bytes ROR RAND RRX RBC RADD RSUB RLADD RLSUB 1100 1 : RR3 3 Bytes RXOR *** RFU *** RVADD RVSUB RUADD RUSUB 1101 0 : ODB 3 Bytes LGF LFC LIDB x ADDDB SUBDB J3 JDB 1101 1 : ODB 3 Bytes RAI WAI RRI WRI IN OUT x x 1110 0 : RJB 3 Bytes *** RJEB RJLB RJLEB *** RJNEB RJGEB RJGB 1110 1 : RJB 3 Bytes *** RJNEBJ RJGEBJ RJGBJ *** RJEBJ RJLBJ RJLEBJ 1111 0 : JBB 3 Bytes JEBB JNEBB JEBBJ JNEBBJ x x x x 1111 1 : ODB 3 Bytes SHL SHR SHD FSDB FLIP FLOP x x x => XOP *** => Not defined as XOP => Undefined behavior