+-------------------------+ | | | The Rosetta Stone | | | | HP <-> AG Mnemonics | | | +-------------------------+ Compiled by Joseph K. Horn, from the HP-mnemonics list by Derek S. Nickel, dated 30 January 1991 and the AG disassembly program "DISD" by Kevin Pryor. (Both can be found on EduCALC Goodies Disk #2). Modified by Jan Brittenson October 1991, to match STAR syntax, to fill in unknowns, and to prepare it for inclusion as an appendix in the MLDL manual. Corrections and modifications by Dan Kirkland, summer of 1994. Syntax: +-------------------+ | HEX HP | AG | +-------------------+ Symbols used in code field: a Field select in the range 0-7. b Field select in the range 8-F. c Single-nibble length field (Load Constant). f Field select including A field. h...h Hexadecimal value. m Nibble whose value is d - 1. n Nibble whose value is d. n...n Nibbles whose value is expr. x...x Nibbles corresponding to ASCII characters. y Reference to a symbol (relative or absolute). Symbols used in modifier field: fs Field Select character. rfs Restricted Field Selection (S,P,WP, and XS not allowed). d Single-nibble field (**see note). expr Expression (*see note). h...h Hexadecimal value. label Label destination. \A...A\ ASCII characters. Symbols used in instruction field: k Constant length field (*** see note). Field Select table: +-------------------------------+ | fs: P WP XS X S M B W A | +-------------------------------+ | f: 0 1 2 3 4 5 6 7 F | | a: 0 1 2 3 4 5 6 7 | | b: 8 9 A B C D E F | +-------------------------------+ ================================================================ OVERVIEW ================================================================ 0... misc operations (see next page) 1... data movement/loading (see following page) 2n P= d | MOVE.1 d,P 3cn...n LC(k) expr | MOVE.Pk expr,C 3cx...x LCASC \A...A\ | MOVE.Pk `A...A',C 3ch...h LCHEX h...h | MOVE.Pk h...h,C 400 RTNC | RETCS 4yy GOC label | BRCS label 420 NOP3 | NOP3 500 RTNNC | RETCC 5yy GONC label | BRCC label 6yyy GOTO label | JUMP.3 label 6300 NOP4 | NOP4 64000 NOP5 | NOP5 7yyy GOSUB label | CALL.3 label A...F (see pages at end) ================================================================ 0 ================================================================ 00 RTNSXM | RETSETXM 01 RTN | RET 02 RTNSC | RETSETC 03 RTNCC | RETCLRC 04 SETHEX | SETHEX 05 SETDEC | SETDEC 06 RSTK=C | PUSH.A C 07 C=RSTK | POP.A C 08 CLRST | CLR.X ST 09 C=ST | MOVE.X ST,C 0A ST=C | MOVE.X C,ST 0B CSTEX | SWAP.X C,ST 0C P=P+1 | INC.1 P 0D P=P-1 | DEC.1 P 0Exx (see below) 0F RTI | RETI 0Ef0 A=A&B fs | AND.fs B,A 0Ef1 B=B&C fs | AND.fs C,B 0Ef2 C=C&A fs | AND.fs A,C 0Ef3 D=D&C fs | AND.fs C,D 0Ef4 B=B&A fs | AND.fs A,B 0Ef5 C=C&B fs | AND.fs B,C 0Ef6 A=A&C fs | AND.fs C,A 0Ef7 C=C&D fs | AND.fs D,C 0Ef8 A=A!B fs | OR.fs B,A 0Ef9 B=B!C fs | OR.fs C,B 0EfA C=C!A fs | OR.fs A,C 0EfB D=D!C fs | OR.fs C,D 0EfC B=B!A fs | OR.fs A,B 0EfD C=C!B fs | OR.fs B,C 0EfE A=A!C fs | OR.fs C,A 0EfF C=C!D fs | OR.fs D,C ================================================================ 10, 11, 12 ================================================================ 100 R0=A | MOVE.W A,R0 101 R1=A | MOVE.W A,R1 102 R2=A | MOVE.W A,R2 103 R3=A | MOVE.W A,R3 104 R4=A | MOVE.W A,R4 108 R0=C | MOVE.W C,R0 109 R1=C | MOVE.W C,R1 10A R2=C | MOVE.W C,R2 10B R3=C | MOVE.W C,R3 10C R4=C | MOVE.W C,R4 110 A=R0 | MOVE.W R0,A 111 A=R1 | MOVE.W R1,A 112 A=R2 | MOVE.W R2,A 113 A=R3 | MOVE.W R3,A 114 A=R4 | MOVE.W R4,A 118 C=R0 | MOVE.W R0,C 119 C=R1 | MOVE.W R1,C 11A C=R2 | MOVE.W R2,C 11B C=R3 | MOVE.W R3,C 11C C=R4 | MOVE.W R4,C 120 AR0EX | SWAP.W A,R0 121 AR1EX | SWAP.W A,R1 122 AR2EX | SWAP.W A,R2 123 AR3EX | SWAP.W A,R3 124 AR4EX | SWAP.W A,R4 128 CR0EX | SWAP.W C,R0 129 CR1EX | SWAP.W C,R1 12A CR2EX | SWAP.W C,R2 12B CR3EX | SWAP.W C,R3 12C CR4EX | SWAP.W C,R4 ================================================================ 13 through 1F ================================================================ 130 D0=A | MOVE.A A,D0 131 D1=A | MOVE.A A,D1 132 AD0EX | SWAP.A A,D0 133 AD1EX | SWAP.A A,D1 134 D0=C | MOVE.A C,D0 135 D1=C | MOVE.A C,D1 136 CD0EX | SWAP.A C,D0 137 CD1EX | SWAP.A C,D1 138 D0=AS | MOVE.4 A,D0 139 D1=AS | MOVE.4 A,D1 13A AD0XS | SWAP.4 A,D0 13B AD1XS | SWAP.4 A,D1 13C D0=CS | MOVE.4 C,D0 13D D1=CS | MOVE.4 C,D1 13E CD0XS | SWAP.4 C,D0 13F CD1XS | SWAP.4 C,D1 ---------- field ----------- A B fs d ---------------------------- 140 148 150a 158m DAT0=A fs | MOVE.fs A,@D0 141 149 151a 159m DAT1=A fs | MOVE.fs A,@D1 142 14A 152a 15Am A=DAT0 fs | MOVE.fs @D0,A 143 14B 153a 15Bm A=DAT1 fs | MOVE.fs @D1,A 144 14C 154a 15Cm DAT0=C fs | MOVE.fs C,@D0 145 14D 155a 15Dm DAT1=C fs | MOVE.fs C,@D1 146 14E 156a 15Em C=DAT0 fs | MOVE.fs @D0,C 147 14F 157a 15Fm C=DAT1 fs | MOVE.fs @D1,C 16m D0=D0+ d | ADD.A d,D0 17m D1=D1+ d | ADD.A d,D1 18m D0=D0- d | SUB.A d,D0 19nn D0=(2) expr | MOVE.2 expr,D0 19hh D0=HEX hh | MOVE.2 hh,D0 1Annnn D0=(4) expr | MOVE.4 expr,D0 1Ahhhh D0=HEX hhhh | MOVE.4 hhhh,D0 1Bnnnnn D0=(5) expr | MOVE.5 expr,D0 1Bhhhhh D0=HEX hhhhh | MOVE.5 hhhhh,D0 1Cm D1=D1- d | SUB.A d,D1 1Dnn D1=(2) expr | MOVE.2 expr,D1 1Dhh D1=HEX hh | MOVE.2 hh,D1 1Ennnn D1=(4) expr | MOVE.4 expr,D1 1Ehhhh D1=HEX hhhh | MOVE.4 hhhh,D1 1Fnnnnn D1=(5) expr | MOVE.5 expr,D1 1Fhhhhh D1=HEX hhhhh | MOVE.5 hhhhh,D1 ================================================================ 80 ================================================================ 800 OUT=CS | OUT.S C 801 OUT=C | OUT.X C 802 A=IN | IN.4 A 803 C=IN | IN.4 C 804 UNCNFG | UNCNFG 805 CONFIG | CONFIG 806 C=ID | MOVE.A ID,C 807 SHUTDN | SHUTDN 8080 INTON | INTON 80810 RSI | RSI 8082cn...n LA(k) expr | MOVE.Pk expr,A 8082cx...x LAASC \A...A\ | MOVE.Pk `A...A',A 8082ch...h LAHEX h...h | MOVE.Pk h...h,A 8083 BUSCB | BUSCB 8084n ABIT=0 d | CLRB d,A 8085n ABIT=1 d | SETB d,A 8086nyy ?ABIT=0 d | BRBC d,A,label / RETBC d,A 8087nyy ?ABIT=1 d | BRBS d,A,label / RETBS d,A 8088n CBIT=0 d | CLRB d,C 8089n CBIT=1 d | SETB d,C 808Anyy ?CBIT=0 d | BRBC d,C,label / RETBC d,C 808Bnyy ?CBIT=1 d | BRBS d,C,label / RETBS d,C 808C PC=(A) | JUMP.A @A 808D BUSCD | BUSCD 808E PC=(C) | JUMP.A @C 808F INTOFF | INTOFF 809 C+P+1 | ADD.A P+1,C 80A RESET | RESET 80B BUSCC | BUSCC 80Cn C=P d | MOVE.1 P,C.d 80Dn P=C d | MOVE.1 C.d,P 80E SREQ? | SREQ 80Fn CPEX d | SWAP.1 P,C.d ================================================================ 81 ================================================================ 810 ASLC | RLN.W A 811 BSLC | RLN.W B 812 CSLC | RLN.W C 813 DSLC | RLN.W D 814 ASRC | RRN.W A 815 BSRC | RRN.W B 816 CSRC | RRN.W C 817 DSRC | RRN.W D 81C ASRB | SRB.W A 81D BSRB | SRB.W B 81E CSRB | SRB.W C 81F DSRB | SRB.W D 818f0m A=A+CON rfs,d | ADD.rfs d,A 818f1m B=B+CON rfs,d | ADD.rfs d,B 818f2m C=C+CON rfs,d | ADD.rfs d,C 818f3m D=D+CON rfs,d | ADD.rfs d,D 818f8m A=A-CON rfs,d | SUB.rfs d,A 818f9m B=B-CON rfs,d | SUB.rfs d,B 818fAm C=C-CON rfs,d | SUB.rfs d,C 818fBm D=D-CON rfs,d | SUB.rfs d,D 819f0 ASRB.F fs | SRB.fs A 819f1 BSRB.F fs | SRB.fs B 819f2 CSRB.F fs | SRB.fs C 819f3 DSRB.F fs | SRB.fs D 81Af00 R0=A.F fs | MOVE.fs A,R0 81Af01 R1=A.F fs | MOVE.fs A,R1 81Af02 R2=A.F fs | MOVE.fs A,R2 81Af03 R3=A.F fs | MOVE.fs A,R3 81Af04 R4=A.F fs | MOVE.fs A,R4 81Af08 R0=C.F fs | MOVE.fs C,R0 81Af09 R1=C.F fs | MOVE.fs C,R1 81Af0A R2=C.F fs | MOVE.fs C,R2 81Af0B R3=C.F fs | MOVE.fs C,R3 81Af0C R4=C.F fs | MOVE.fs C,R4 81Af10 A=R0.F fs | MOVE.fs R0,A 81Af11 A=R1.F fs | MOVE.fs R1,A 81Af12 A=R2.F fs | MOVE.fs R2,A 81Af13 A=R3.F fs | MOVE.fs R3,A 81Af14 A=R4.F fs | MOVE.fs R4,A 81Af18 C=R0.F fs | MOVE.fs R0,C 81Af19 C=R1.F fs | MOVE.fs R1,C 81Af1A C=R2.F fs | MOVE.fs R2,C 81Af1B C=R3.F fs | MOVE.fs R3,C 81Af1C C=R4.F fs | MOVE.fs R4,C 81Af20 AR0EX.F fs | SWAP.fs A,R0 81Af21 AR1EX.F fs | SWAP.fs A,R1 81Af22 AR2EX.F fs | SWAP.fs A,R2 81Af23 AR3EX.F fs | SWAP.fs A,R3 81Af24 AR4EX.F fs | SWAP.fs A,R4 81Af28 CR0EX.F fs | SWAP.fs C,R0 81Af29 CR1EX.F fs | SWAP.fs C,R1 81Af2A CR2EX.F fs | SWAP.fs C,R2 81Af2B CR3EX.F fs | SWAP.fs C,R3 81Af2C CR4EX.F fs | SWAP.fs C,R4 81B2 PC=A | JUMP.A A 81B3 PC=C | JUMP.A C 81B4 A=PC | MOVE.A PC,A 81B5 C=PC | MOVE.A PC,C 81B6 APCEX | SWAP.A A,PC 81B7 CPCEX | SWAP.A C,PC ================================================================ 82 through 8F, 9 ================================================================ 82n HS=0 d | CLRB [d],HST {MP,SR,SB,XM} (see ** below) 821 XM=0 | CLRB [XM],HST { 0 0 0 1 -> 1} 822 SB=0 | CLRB [SB],HST { 0 0 1 0 -> 2} 824 SR=0 | CLRB [SR],HST { 0 1 0 0 -> 4} 828 MP=0 | CLRB [MP],HST { 1 0 0 0 -> 8} 82F CLRHST | CLRB [XM,SB,SR,MP],HST ** e.g. 829 is HS=0 9 | CLRB [XM,MP],HST Note: In the STAR assembler, the notation [A,B,C...] means "an integer with bits A,B,C... set". [] is zero. The symbols "MP", "SR", "SB", and "XM" are predefined by the assembler to the values 0, 1, 2, and 3 respectively. Thus, "[3,1]" is equivalent to "[XM,MP]". All [...] constructions are collectively refered to as a "bit pattern expressions." 83nyy ?XM=0 d | BRBC [d],HST,label / RETBC [d],HST ** 831yy ?XM=0 | BRBC [XM],HST,label / RETBC [XM],HST ** 832yy ?SB=0 | BRBC [SB],HST,label / RETBC [SB],HST ** 834yy ?SR=0 | BRBC [SR],HST,label / RETBC [SR],HST ** 838yy ?MP=0 | BRBC [MP],HST,label / RETBC [MP],HST ** ** See explanation of bit pattern expressions above. 84n ST=0 d | CLRB d,ST 85n ST=1 d | SETB d,ST 86nyy ?ST=0 d | BRBC d,ST,label / RETBC d,ST 87nyy ?ST=1 d | BRBS d,ST,label / RETBS d,ST 88nyy ?P# d | BRNE.1 P,d,label / RETNE.1 P,d 89nyy ?P= d | BREQ.1 P,d,label / RETEQ.1 P,d 8A...8b... (see below) 8Cyyyy GOLONG label | JUMP.4 label 8Dyyyyy GOVLNG label | JUMP.A label 8Eyyyy GOSUBL label | CALL.4 label 8Fyyyyy GOSBVL label | CALL.A label 9zxyy (see below) test00 RTNYES | (not needed; see test mnemonics) testyy GOYES label | (not needed; see test mnemonics) Relative gotos (GOTO, GOLONG, GOC, GONC, GOYES): Offset is relative to the first nibble of the offset. Relative gosubs (GOSUB, GOSUBL): Offset is relative to the first nibble of the next instruction. ================================================================ 8A, 8B, 9 ================================================================ --- field ---- A fs -------------- 8A0yy 9a0yy ?A=B fs | BREQ.fs A,B,PC+(yy+3) ** 8A1yy 9a1yy ?B=C fs | BREQ.fs B,C,PC+(yy+3) 8A2yy 9a2yy ?A=C fs | BREQ.fs A,C,PC+(yy+3) 8A3yy 9a3yy ?C=D fs | BREQ.fs C,D,PC+(yy+3) 8A4yy 9a4yy ?A#B fs | BRNE.fs A,B,PC+(yy+3) 8A5yy 9a5yy ?B#C fs | BRNE.fs B,C,PC+(yy+3) 8A6yy 9a6yy ?A#C fs | BRNE.fs A,C,PC+(yy+3) 8A7yy 9a7yy ?C#D fs | BRNE.fs C,D,PC+(yy+3) 8A8yy 9a8yy ?A=0 fs | BRZ.fs A,PC+(yy+3) 8A9yy 9a9yy ?B=0 fs | BRZ.fs B,PC+(yy+3) 8AAyy 9aAyy ?C=0 fs | BRZ.fs C,PC+(yy+3) 8AByy 9aByy ?D=0 fs | BRZ.fs D,PC+(yy+3) 8ACyy 9aCyy ?A#0 fs | BRNZ.fs A,PC+(yy+3) 8ADyy 9aDyy ?B#0 fs | BRNZ.fs B,PC+(yy+3) 8AEyy 9aEyy ?C#0 fs | BRNZ.fs C,PC+(yy+3) 8AFyy 9aFyy ?D#0 fs | BRNZ.fs D,PC+(yy+3) 8B0yy 9b0yy ?A>B fs | BRGT.fs A,B,PC+(yy+3) ** 8B1yy 9b1yy ?B>C fs | BRGT.fs B,C,PC+(yy+3) 8B2yy 9b2yy ?C>A fs | BRGT.fs C,A,PC+(yy+3) 8B3yy 9b3yy ?D>C fs | BRGT.fs D,C,PC+(yy+3) 8B4yy 9b4yy ?A=B fs | BRGE.fs A,B,PC+(yy+3) 8B9yy 9b9yy ?B>=C fs | BRGE.fs B,C,PC+(yy+3) 8BAyy 9bAyy ?C>=A fs | BRGE.fs C,A,PC+(yy+3) 8BByy 9bByy ?D>=C fs | BRGE.fs D,C,PC+(yy+3) 8BCyy 9bCyy ?A<=B fs | BRLE.fs A,B,PC+(yy+3) 8BDyy 9bDyy ?B<=C fs | BRLE.fs B,C,PC+(yy+3) 8BEyy 9bEyy ?C<=A fs | BRLE.fs C,A,PC+(yy+3) 8BFyy 9bFyy ?D<=C fs | BRLE.fs D,C,PC+(yy+3) ** RET instead of BR for all of the above, if yy=0. ================================================================ A, C, D ================================================================ -- field -- A fs ----------- C0 Aa0 A=A+B fs | ADD.fs B,A C1 Aa1 B=B+C fs | ADD.fs C,B C2 Aa2 C=C+A fs | ADD.fs A,C C3 Aa3 D=D+C fs | ADD.fs C,D C4 Aa4 A=A+A fs | ADD.fs A,A C5 Aa5 B=B+B fs | ADD.fs B,B C6 Aa6 C=C+C fs | ADD.fs C,C C7 Aa7 D=D+D fs | ADD.fs D,D C8 Aa8 B=B+A fs | ADD.fs A,B C9 Aa9 C=C+B fs | ADD.fs B,C CA AaA A=A+C fs | ADD.fs C,A CB AaB C=C+D fs | ADD.fs D,C CC AaC A=A-1 fs | DEC.fs A CD AaD B=B-1 fs | DEC.fs B CE AaE C=C-1 fs | DEC.fs C CF AaF D=D-1 fs | DEC.fs D D0 Ab0 A=0 fs | CLR.fs A D1 Ab1 B=0 fs | CLR.fs B D2 Ab2 C=0 fs | CLR.fs C D3 Ab3 D=0 fs | CLR.fs D D4 Ab4 A=B fs | MOVE.fs B,A D5 Ab5 B=C fs | MOVE.fs C,B D6 Ab6 C=A fs | MOVE.fs A,C D7 Ab7 D=C fs | MOVE.fs C,D D8 Ab8 B=A fs | MOVE.fs A,B D9 Ab9 C=B fs | MOVE.fs B,C DA AbA A=C fs | MOVE.fs C,A DB AbB C=D fs | MOVE.fs D,C DC AbC ABEX fs | SWAP.fs A,B DD AbD BCEX fs | SWAP.fs B,C DE AbE ACEX fs | SWAP.fs A,C DF AbF CDEX fs | SWAP.fs C,D ================================================================ B, E, F ================================================================ -- field --- A fs ------------ E0 Ba0 A=A-B fs | SUB.fs B,A E1 Ba1 B=B-C fs | SUB.fs C,B E2 Ba2 C=C-A fs | SUB.fs A,C E3 Ba3 D=D-C fs | SUB.fs C,D E4 Ba4 A=A+1 fs | INC.fs A E5 Ba5 B=B+1 fs | INC.fs B E6 Ba6 C=C+1 fs | INC.fs C E7 Ba7 D=D+1 fs | INC.fs D E8 Ba8 B=B-A fs | SUB.fs A,B E9 Ba9 C=C-B fs | SUB.fs B,C EA BaA A=A-C fs | SUB.fs C,A EB BaB C=C-D fs | SUB.fs D,C EC BaC A=B-A fs | SUBN.fs B,A ED BaD B=C-B fs | SUBN.fs C,B EE BaE C=A-C fs | SUBN.fs A,C EF BaF D=C-D fs | SUBN.fs C,D F0 Bb0 ASL fs | SLN.fs A F1 Bb1 BSL fs | SLN.fs B F2 Bb2 CSL fs | SLN.fs C F3 Bb3 DSL fs | SLN.fs D F4 Bb4 ASR fs | SRN.fs A F5 Bb5 BSR fs | SRN.fs B F6 Bb6 CSR fs | SRN.fs C F7 Bb7 DSR fs | SRN.fs D F8 Bb8 A=-A fs | NEG.fs A F9 Bb9 B=-B fs | NEG.fs B FA BbA C=-C fs | NEG.fs C FB BbB D=-D fs | NEG.fs D FC BbC A=-A-1 fs | NOT.fs A FD BbD B=-B-1 fs | NOT.fs B FE BbE C=-C-1 fs | NOT.fs C FF BbF D=-D-1 fs | NOT.fs D ================================================================ Data Storage Allocation ================================================================ 0...0 BSS expr | DATA0 expr ** n...n CON(x) expr | DATA.d expr y...y REL(x) label | DATA.d label x...x NIBASC \A...A\ | ASCII `A...A' h...h NIBHEX h...h | DATA.d h...h ** Requires inclusion of the following STAR macro definition: macro bss arg=0 save op arg=$arg op = `;' if arg > 0 if arg < 8 data.$arg 0 else op = `bss' endif endif $op $(arg-^d8) restore op endmacro --- End of Rosetta Stone ---