----------------------------------------------------------- uCOM-87 Instruction set (uPD7800,uPD7801,uPD78C06) ----------------------------------------------------------- xx = Data (Byte) aa = Address (Byte) wa = Offset (Byte) Offset to V (vector "page" register) bbaa = Address (Word) NOTES by Chris C: (May or may not be correct...) ----------------- On the uPD78C06, the V register is hardwired to #$FF. Several instructions (somewhat ambiguously) enable a skip condition, meaning that the instruction (of any byte length) following it will be skipped if a condition was met: /C = skip if Carry /NC = skip if No Carry /B = skip if Borrow /NB = skip if No Borrow /Z = skip if Zero /NZ = skip if Non-Zero RETS skips the instruction directly following its return point. A few instructions identified by (1),(2) skip all identical instructions following them. In other words, if there are three "LXI H,bbaa" instructions in a row, only the data in the first LXI H instruction gets loaded into HL. This is one quick way to load different data into A, L, or HL depending on which point of execution the program jumps into, and then to end up at a common destination (ie: using the data in A, L, HL.) The NEC uPD78C06 PDF notes the above, but not very well. 00 NOP 01 HLT 02 INX SP 03 DCX SP 04 aa bb LXI SP,bbaa 05 wa xx ANIW wa,xx 06 ---- 07 xx ANI A,xx 08 RET 09 SIO 0A MOV A,B 0B MOV A,C 0C MOV A,D 0D MOV A,E 0E MOV A,H 0F MOV A,L 12 INX B (BC) 13 DCX B (BC) 14 aa bb LXI B,bbaa 15 wa xx ORIW wa,xx 16 xx XRI A,xx 17 xx ORI A,xx 18 RETS / 19 STM 1A MOV B,A 1B MOV C,A 1C MOV D,A 1D MOV E,A 1E MOV H,A 1F MOV L,A 20 wa INRW wa /C 22 INX D (DE) 23 DCX D (DE) 24 aa bb LXI D,bbaa 25 wa xx GTIW wa,xx /NB 26 xx ADINC A,xx /NC 27 xx GTI A,xx /NB 28 wa LDAW wa 29 LDAX B (BC) 2A LDAX D (DE) 2B LDAX H (HL) 2C LDAX D+ (DE) 2D LDAX H+ (HL) 2E LDAX D- (DE) 2F LDAX H- (HL) 30 wa DCRW wa /B 32 INX H (HL) 33 DCX H (HL) 34 aa bb LXI H,bbaa (2) 35 wa xx LTIW wa,xx /B 36 xx SUINB A,xx /NB 37 xx LTI A,xx /B 38 wa STAW wa 39 STAX B (BC) 3A STAX D (DE) 3B STAX H (HL) 3C STAX D+ (DE) 3D STAX H+ (HL) 3E STAX D- (DE) 3F STAX H- (HL) 40 --- 41 INR A /C 42 INR B /C 43 INR C /C 44 aa bb CALL bbaa 45 wa xx ONIW wa,xx /NZ 46 xx ADI A,xx 47 xx ONI A,xx /NZ 48 0E PUSH V 48 0F POP V 48 10 SKNIT F0 /NF0 48 11 SKNIT FT /NFT 48 12 SKNIT F1 /NF1 48 13 SKNIT F2 /NF2 48 14 SKNIT FS /NFS 48 1A SKN CY /NC 48 1C SKN Z /NZ 48 1E PUSH B (BC) 48 1F POP B (BC) 48 20 EI 48 24 DI 48 2A CLC 48 2B STC 48 2D PEX 48 2E PUSH D (DE) 48 2F POP D (DE) 48 30 RAL 48 31 RAR 48 38 RLD 48 39 RRD 48 3C PER 48 3E PUSH H (HL) 48 3F POP H (HL) 4C C0 MOV A,PA 4C C1 MOV A,PB 4C C2 MOV A,PC 4C C3 MOV A,MK 4C C4 MOV A,MB 4C C5 MOV A,MC 4C C6 MOV A,TM0 4C C7 MOV A,TM1 4C C8 MOV A,S 4C C9 MOV A,TMM 4D C0 MOV PA,A 4D C1 MOV PB,A 4D C2 MOV PC,A 4D C3 MOV MK,A 4D C4 MOV MB,A 4D C5 MOV MC,A 4D C6 MOV TM0,A 4D C7 MOV TM1,A 4D C8 MOV S,A 4D C9 MOV TMM,A 4E xx JRE +offset xx 4F xx JRE -offset (-xx) 50 --- 51 DCR A /B 52 DCR B /B 53 DCR C /B 54 aa bb JMP bbaa 55 wa xx OFFIW wa,xx /Z 56 xx ACI xx 57 xx OFFI A,xx /Z 60 08-0F ANA r,A (r = V,A,B,C,D,E,H,L) 60 10-17 XRA r,A 60 18-1F ORA r,A 60 20-27 ADDNC r,A /NC 60 28-2F GTA r,A /NB 60 30-37 SUBNB r,A /NB 60 38-3F LTA r,A /B 60 40-47 ADD r,A 60 50-57 ADC r,A 60 60-67 SUB r,A 60 68-6F NEA r,A /NZ 60 70-77 SBB r,A 60 78-7F EQA r,A /Z 60 88-8F ANA A,r 60 90-97 XRA A,r 60 98-9F ORA A,r 60 A0-A7 ADDNC A,r /NC 60 A8-AF GTA A,r /NB 60 B0-B7 SUBNB A,r /NB 60 B8-BF LTA A,r /B 60 C0-C7 ADD A,r 60 D0-D7 ADC A,r 60 E0-E7 SUB A,r 60 E8-EF NEA A,r /NZ 60 F0-F7 SBB A,r 60 F8-FF EQA A,r /Z 61 DAA 62 RETI 64 08-0F xx ANI r,xx (r = V,A,B,C,D,E,H,L) 64 10-17 xx XRI r,xx 64 18-1F xx ORI r,xx 64 20-27 xx ADINC r,xx /NC 64 28-2F xx GTI r,xx /NB 64 30-37 xx SUINB r,xx /NB 64 38-3F xx LTI r,xx /B 64 40-47 xx ADI r,xx 64 48-4F xx ONI r,xx /NZ 64 50-57 xx ACI r,xx 64 58-5F xx OFFI r,xx /Z 64 60-67 xx SUI r,xx 64 68-6F xx NEI r,xx /NZ 64 70-77 xx SBI r,xx 64 78-7F xx EQI r,xx /Z 64 88-8B xx ANI r,xx (r = PA,PB,PC,MK) 64 98-9B xx ORI r,xx 64 C8-CB xx ONI r,xx /NZ 64 D8-DB xx OFFI r,xx /Z 65 wa xx NEIW wa,xx /NZ 66 xx SUI A,xx 67 xx NEI A,xx /NZ 69 xx MVI A,xx (1) 6A xx MVI B,xx 6B xx MVI C,xx 6C xx MVI D,xx 6D xx MVI E,xx 6E xx MVI H,xx 6F xx MVI L,xx (2) 70 0E aa bb SSPD bbaa 70 0F aa bb LSPD bbaa 70 1E aa bb SBCD bbaa 70 1F aa bb LBCD bbaa 70 2E aa bb SDED bbaa 70 2F aa bb LDED bbaa 70 3E aa bb SHLD bbaa 70 3F aa bb LHLD bbaa 70 68 aa bb MOV V,bbaa 70 69 aa bb MOV A,bbaa 70 6A aa bb MOV B,bbaa 70 6B aa bb MOV C,bbaa 70 6C aa bb MOV D,bbaa 70 6D aa bb MOV E,bbaa 70 6E aa bb MOV H,bbaa 70 6F aa bb MOV L,bbaa 70 78 aa bb MOV aabb,V 70 79 aa bb MOV aabb,A 70 7A aa bb MOV aabb,B 70 7B aa bb MOV aabb,C 70 7C aa bb MOV aabb,D 70 7D aa bb MOV aabb,E 70 7E aa bb MOV aabb,H 70 7F aa bb MOV aabb,L 70 89-8F ANAX rpa (rpa = B,D,H,D+,H+,D-,H-) 70 91-97 XRAX rpa 70 99-9F ORAX rpa 70 A1-A7 ADDNCX rpa /NC 70 A9-AF GTAX rpa /NB 70 B1-B7 SUBNBX rpa /NB 70 B9-BF LTAX rpa /B 70 C1-C7 ADDX rpa 70 C9-CF ONAX rpa /NZ 70 D1-D7 ADCX rpa 70 D9-DF OFFAX rpa /Z 70 E1-E7 SUBX rpa 70 EA-EF NEAX rpa /NZ 70 F1-F7 SBBX rpa 70 F9-FF EQAX rpa /Z 73 JB 75 wa xx EQIW wa,xx /Z 76 xx SBI A,xx 77 xx EQI A,xx /Z 78 aa...7F aa CALF (Opcode minus $70)aa 80 CALT 0080 81 CALT 0082 . . BE CALT 00FC BF CALT 00FE C0...DF JR +offset (Opcode minus $C0) E0...FF JR -offset (-(Opcode minus $E0)) -----------------------------------------------------------