S a t u r n I n s t r u c t i o n S e t Derek S. Nickel 30 January 1991 ================================================================ 0... * misc operations (RTNs, modes, stack, status, P, logic) 1... * data movement/loading (D0,D1,R0-R4) 2n P= n 3xn..n LC(m) n..n (x = m - 1) 3mc..c LCASC \A..A\ (m = 2*characters - 1) 3nh..h LCHEX h..h (n = digits - 1) 400 RTNC 4aa GOC label 420 NOP3 500 RTNNC 5aa GONC label 6aaa GOTO label 6300 NOP4 64000 NOP5 7aaa GOSUB label 8... * misc, tests and branching 9... * tests w/fs Aax * math and assignment w/fs Abx * math and assignment w/fs Bax * math and assignment w/fs Bbx * math and assignment w/fs Cx * math and assignment w/A Dx * math and assignment w/A Ex * math and assignment w/A Fx * math and assignment w/A ================================================================ 0 ================================================================ 00 RTNSXM 01 RTN 02 RTNSC 03 RTNCC 04 SETHEX 05 SETDEC 06 RSTK=C 07 C=RSTK 08 CLRST 09 C=ST 0A ST=C 0B CSTEX 0C P=P+1 0D P=P-1 0Exx * logic operations 0F RTI -- field --- fs A ------------ 0Ea0 0EF0 A=A&B field 0Ea1 0EF1 B=B&C field 0Ea2 0EF2 C=C&A field 0Ea3 0EF3 D=D&C field 0Ea4 0EF4 B=B&A field 0Ea5 0EF5 C=C&B field 0Ea6 0EF6 A=A&C field 0Ea7 0EF7 C=C&D field 0Ea8 0EF8 A=A!B field 0Ea9 0EF9 B=B!C field 0EaA 0EFA C=C!A field 0EaB 0EFB D=D!C field 0EaC 0EFC B=B!A field 0EaD 0EFD C=C!B field 0EaE 0EFE A=A!C field 0EaF 0EFF C=C!D field fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 ================================================================ 10, 11, 12 ================================================================ 100 R0=A 101 R1=A 102 R2=A 103 R3=A 104 R4=A 105 106 107 108 R0=C 109 R1=C 10A R2=C 10B R3=C 10C R4=C 10D 10E 10F 110 A=R0 111 A=R1 112 A=R2 113 A=R3 114 A=R4 115 116 117 118 C=R0 119 C=R1 11A C=R2 11B C=R3 11C C=R4 11D 11E 11F 120 AR0EX 121 AR1EX 122 AR2EX 123 AR3EX 124 AR4EX 125 126 127 128 CR0EX 129 CR1EX 12A CR2EX 12B CR3EX 12C CR4EX 12D 12E 12F ================================================================ 13 through 1F ================================================================ 130 D0=A 131 D1=A 132 AD0EX 133 AD1EX 134 D0=C 135 D1=C 136 CD0EX 137 CD1EX 138 D0=AS 139 D1=AS 13A AD0XS 13B AD1XS 13C D0=CS 13D D1=CS 13E CD0XS 13F CD1XS ---------- field ----------- A B fs d ---------------------------- 140 148 150a 158x DAT0=A field 141 149 151a 159x DAT1=A field 142 14A 152a 15Ax A=DAT0 field 143 14B 153a 15Bx A=DAT1 field 144 14C 154a 15Cx DAT0=C field 145 14D 155a 15Dx DAT1=C field 146 14E 156a 15Ex C=DAT0 field 147 14F 157a 15Fx C=DAT1 field 16x D0=D0+ n 17x D1=D1+ n 18x D0=D0- n 19nn D0=(2) nn 19hh D0=HEX hh 1Annnn D0=(4) nnnn 1Ahhhh D0=HEX hhhh 1Bnnnnn D0=(5) nnnnn 1Bhhhhh D0=HEX hhhhh 1Cx D1=D1- n 1Dnn D1=(2) nn 1Dhh D1=HEX hh 1Ennnn D1=(4) nnnn 1Ehhhh D1=HEX hhhh 1Fnnnnn D1=(5) nnnnn 1Fhhhhh D1=HEX hhhhh fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 x = d - 1 x = n - 1 d = x + 1 n = x + 1 ================================================================ 80 ================================================================ 800 OUT=CS 801 OUT=C 802 A=IN 803 C=IN 804 UNCNFG 805 CONFIG 806 C=ID 807 SHUTDN 8080 INTON 80810 RSI 8082xn..n LA(m) n..n (x = m - 1) 8082mc..c LAASC \A..A\ (m = 2*characters - 1) 8082nh..h LAHEX h..h (n = digits - 1) 8083 BUSCB 8084n ABIT=0 d 8085n ABIT=1 d 8086nyy ?ABIT=0 d 8087nyy ?ABIT=1 d 8088n CBIT=0 d 8089n CBIT=1 d 808Anyy ?CBIT=0 d 808Bnyy ?CBIT=1 d 808C PC=(A) 808D BUSCD 808E PC=(C) 808F INTOFF 809 C+P+1 80A RESET 80B BUSCC 80Cn C=P n 80Dn P=C n 80E SREQ? 80Fn CPEX n ================================================================ 81 ================================================================ 810 ASLC 811 BSLC 812 CSLC 813 DSLC 814 ASRC 815 BSRC 816 CSRC 817 DSRC 818 819 81A 81B 81C ASRB 81D BSRB 81E CSRB 81F DSRB -- field --- fs A ------------ 818a0n A=A+n field 818a1n B=B+n field 818a2n C=C+n field 818a3n D=D+n field 818b0n A=A-n field 818b1n B=B-n field 818b2n C=C-n field 818b3n D=D-n field fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 b: 8 9 A B C D E F ================================================================ 82 through 8F, 9 ================================================================ 82n no opcode, clear hardware status w/n as bit mask 821 XM=0 822 SB=0 824 SR=0 828 MP=0 82F CLRHST 831yy ?XM=0 832yy ?SB=0 834yy ?SR=0 838yy ?MP=0 84n ST=0 n 85n ST=1 n 86nyy ?ST=0 n ?ST#1 n 87nyy ?ST=1 n ?ST#0 n 88nyy ?P# n 89nyy ?P= n 8Axyy * tests w/A (equal and not equal) 8Bxyy * tests w/A (inequality) 8Caaaa GOLONG label 8Daaaaa GOVLNG label 8Eaaaa GOSUBL label 8Faaaaa GOSBVL label 9zxyy * tests w/fs test00 RTNYES testyy GOYES label Relative gotos (GOTO, GOLONG, GOC, GONC, GOYES): Offset is relative to the first nibble of the offset. Relative gosubs (GOSUBm GOSUBL): Offset is relative to the first nibble of the next instruction. ================================================================ 8A, 8B, 9 ================================================================ --- field ---- A fs -------------- 8A0yy 9a0yy ?A=B field ?B=A field 8A1yy 9a1yy ?B=C field ?C=B field 8A2yy 9a2yy ?A=C field ?C=A field 8A3yy 9a3yy ?C=D field ?D=C field 8A4yy 9a4yy ?A#B field ?B#A field 8A5yy 9a5yy ?B#C field ?C#B field 8A6yy 9a6yy ?A#C field ?C#A field 8A7yy 9a7yy ?C#D field ?D#C field 8A8yy 9a8yy ?A=0 field 8A9yy 9a9yy ?B=0 field 8AAyy 9aAyy ?C=0 field 8AByy 9aByy ?D=0 field 8ACyy 9aCyy ?A#0 field 8ADyy 9aDyy ?B#0 field 8AEyy 9aEyy ?C#0 field 8AFyy 9aFyy ?D#0 field 8B0yy 9b0yy ?A>B field 8B1yy 9b1yy ?B>C field 8B2yy 9b2yy ?C>A field 8B3yy 9b3yy ?D>C field 8B4yy 9b4yy ?A=B field 8B9yy 9b9yy ?B>=C field 8BAyy 9bAyy ?C>=A field 8BByy 9bByy ?D>=C field 8BCyy 9bCyy ?A<=B field 8BDyy 9bDyy ?B<=C field 8BEyy 9bEyy ?C<=A field 8BFyy 9bFyy ?D<=C field fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 b: 8 9 A B C D E F ================================================================ A, C, D ================================================================ -- field -- A fs ----------- C0 Aa0 A=A+B field C1 Aa1 B=B+C field C2 Aa2 C=C+A field C3 Aa3 D=D+C field C4 Aa4 A=A+A field C5 Aa5 B=B+B field C6 Aa6 C=C+C field C7 Aa7 D=D+D field C8 Aa8 B=B+A field C9 Aa9 C=C+B field CA AaA A=A+C field CB AaB C=C+D field CC AaC A=A-1 field CD AaD B=B-1 field CE AaE C=C-1 field CF AaF D=D-1 field D0 Ab0 A=0 field D1 Ab1 B=0 field D2 Ab2 C=0 field D3 Ab3 D=0 field D4 Ab4 A=B field D5 Ab5 B=C field D6 Ab6 C=A field D7 Ab7 D=C field D8 Ab8 B=A field D9 Ab9 C=B field DA AbA A=C field DB AbB C=D field DC AbC ABEX field DD AbD BCEX field DE AbE ACEX field DF AbF CDEX field fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 a: 8 9 A B C D E F ================================================================ B, E, F ================================================================ -- field --- A fs ------------ E0 Ba0 A=A+B field E1 Ba1 B=B+C field E2 Ba2 C=C+A field E3 Ba3 D=D+C field E4 Ba4 A=A+1 field E5 Ba5 B=B+1 field E6 Ba6 C=C+1 field E7 Ba7 D=D+1 field E8 Ba8 B=B-A field E9 Ba9 C=C-B field EA BaA A=A-C field EB BaB C=C-D field EC BaC A=B-A field ED BaD B=C-B field EE BaE C=A-C field EF BaF D=C-D field F0 Bb0 ASL field F1 Bb1 BSL field F2 Bb2 CSL field F3 Bb3 DSL field F4 Bb4 ASR field F5 Bb5 BSR field F6 Bb6 CSR field F7 Bb7 DSR field F8 Bb8 A=-A field F9 Bb9 B=-B field FA BbA C=-C field FB BbB D=-D field FC BbC A=-A-1 field FD BbD B=-B-1 field FE BbE C=-C-1 field FF BbF D=-D-1 field fs: P WP XS X S M B W a: 0 1 2 3 4 5 6 7 b: 8 9 A B C D E F ================================================================ Data Storage Allocation ================================================================ 00..0 BSS expr nn..n CON(m) expr nn..n REL(m) expr zy..a NIBASC 'chars' zy..a NIBASC \chars\ hh..h NIBHEX h..hh ================================================================ New Instructions ================================================================ 818f0m A=A+CON rfs,d 818f1m B=B+CON rfs,d 818f2m C=C+CON rfs,d 818f3m D=D+CON rfs,d 818f8m A=A-CON rfs,d 818f9m B=B-CON rfs,d 818fAm C=C-CON rfs,d 818fBm D=D-CON rfs,d 819f0 ASRB.F fs 819f1 BSRB.F fs 819f2 CSRB.F fs 819f3 DSRB.F fs 81Af00 R0=A.F fs 81Af01 R1=A.F fs 81Af02 R2=A.F fs 81Af03 R3=A.F fs 81Af04 R4=A.F fs 81Af08 R0=C.F fs 81Af09 R1=C.F fs 81Af0A R2=C.F fs 81Af0B R3=C.F fs 81Af0C R4=C.F fs 81Af10 A=R0.F fs 81Af11 A=R1.F fs 81Af12 A=R2.F fs 81Af13 A=R3.F fs 81Af14 A=R4.F fs 81Af18 C=R0.F fs 81Af19 C=R1.F fs 81Af1A C=R2.F fs 81Af1B C=R3.F fs 81Af1C C=R4.F fs 81Af20 AR0EX.F fs 81Af21 AR1EX.F fs 81Af22 AR2EX.F fs 81Af23 AR3EX.F fs 81Af24 AR4EX.F fs 81Af28 CR0EX.F fs 81Af29 CR1EX.F fs 81Af2A CR2EX.F fs 81Af2B CR3EX.F fs 81Af2C CR4EX.F fs 81B2 PC=A 81B3 PC=C 81B4 A=PC 81B5 C=PC 81B6 APCEX 81B7 CPCEX ================================================================ Saturn Registers ================================================================ +--------------------------------+ | | A (current object pointer) +--------------------------------+ | | B (RPL return stack pointer) +--------------------------------+ | | C (general purpose) +--------------------------------+ | | D (stack space remaining) +--------------------------------+ +----------+ | | D0 (execution stack pointer) +----------+ | | D1 (data stack pointer) +----------+ +--+ | | P +--+ +----------+ | | PC (program counter) +----------+ +--------------------------------+ | | R0 +--------------------------------+ | | R1 +--------------------------------+ | | R2 +--------------------------------+ | | R3 +--------------------------------+ | | R4 +--------------------------------+ +--------+ | | IN (16 bits) +--------+ | | OUT (12 bits) +------+ +-+ | | Carry (1 bit) +-+ +--------+ | F .. 0 | ST (16 bits) +--------+ +-------------+ | MP SB SR XM | HST (4 bits) +-------------+ ================================================================ Work Sheet ================================================================ A: a B: b C: c D: d D0: d0 D1: d1 RSTK: R0: r0 R1: r1 R2: r2 R3: r3 R4: r4 d1: s1 d1+5: s2 d1+10: s3 d1+15: s4 s1: s2: s3: s4: