Z-80 Info Page
Page Index
Undocumented Z-80 Opcodes
Developed from the article by Daniel Lunsford in TAS, V1. N6. pp 53-55
In these opcodes, HX and LX represent the high- and low-order bytes of the IX register. HY and LY are analogous for the IY register. The timing for these new IX and IY instructions is 4 T-states longer than the equivalent H and L instructions.
Also, SLS means Shift Left and Set. This shifts the register left just as an SLA would, and then the LSB is set. The MSB goes into the Carry flag, and sign and parity are adjusted as expected.
| New Opcode | Hex | Assembler Realization |
|---|---|---|
| SLS A | CB 37 | DEFW 37CBH |
| SLS B | CB 30 | DEFW 30CBH |
| SLS C | CB 31 | DEFW 31CBH |
| SLS D | CB 32 | DEFW 32CBH |
| SLS E | CB 33 | DEFW 33CBH |
| SLS H | CB 34 | DEFW 34CBH |
| SLS L | CB 35 | DEFW 35CBH |
| SLS (HL) | CB 36 | DEFW 36CBH |
| SLS (IX+d) | DD CB dd 36 | RLC (IX+d) ORG $-1 DEFB 36H |
| SLS (IY+d) | FD CB dd 36 | RLC (IY+d) ORG $-1 DEFB 36H |
| ADC A,HX | DD 8C | DEFW 8CDDH |
| ADC A,LX | DD 8D | DEFW 8DDDH |
| ADC A,HY | FD 8C | DEFW 8CFDH |
| ADC A,LY | FD 8D | DEFW 8DFDH |
| ADD A,HX | DD 84 | DEFW 84DDH |
| ADD A,LX | DD 85 | DEFW 85DDH |
| ADD A,HY | FD 84 | DEFW 84FDH |
| ADD A,LY | FD 85 | DEFW 85FDH |
| AND HX | DD A4 | DEFW 0A4DDH |
| AND LX | DD A5 | DEFW 0A5DDH |
| AND HY | FD A4 | DEFW 0A4FDH |
| AND LY | FD A5 | DEFW 0A5FDH |
| CP HX | DD BC | DEFW 0BCDDH |
| CP LX | DD BD | DEFW 0BDDDH |
| CP HY | FD BC | DEFW 0BCFDH |
| CP LY | FD BD | DEFW 0BDFDH |
| DEC HX | DD 25 | DEFW 25DDH |
| DEC LX | DD 2D | DEFW 2DDDH |
| DEC HY | FD 25 | DEFW 25FDH |
| DEC LY | FD 2D | DEFW 2DFDH |
| INC HX | DD 24 | DEFW 24DDH |
| INC LX | DD 2C | DEFW 2CDDH |
| INC HY | FD 24 | DEFW 24FDH |
| INC LY | FD 2C | DEFW 2CFDH |
| OR HX | DD B4 | DEFW 0B4DDH |
| OR LX | DD B5 | DEFW 0B5DDH |
| OR HY | FD B4 | DEFW 0B4FDH |
| OR LY | FD B5 | DEFW 0B5FDH |
| SBC A,HX | DD 9C | DEFW 9CDDH |
| SBC A,LX | DD 9D | DEFW 9DDDH |
| SBC A,HY | FD 9C | DEFW 9CFDH |
| SBC A,LY | FD 9D | DEFW 9DFDH |
| SUB HX | DD 94 | DEFW 94DDH |
| SUB LX | DD 95 | DEFW 95DDH |
| SUB HY | FD 94 | DEFW 94FDH |
| SUB LY | FD 95 | DEFW 95FDH |
| XOR HX | DD AC | DEFW 0ACDDH |
| XOR LX | DD AD | DEFW 0ADDDH |
| XOR HY | FD AC | DEFW 0ACFDH |
| XOR LY | FD AD | DEFW 0ADFDH |
| LD HX,A | DD 67 | DEFW 67DDH |
| LD LX,A | DD 6F | DEFW 6FDDH |
| LD HY,A | FD 67 | DEFW 67FDH |
| LD LY,A | FD 6F | DEFW 6FFDH |
| LD HX,B | DD 60 | DEFW 60DDH |
| LD LX,B | DD 68 | DEFW 68DDH |
| LD HY,B | FD 60 | DEFW 60FDH |
| LD LY,B | FD 68 | DEFW 68FDH |
| LD HX,C | DD 61 | DEFW 61DDH |
| LD LX,C | DD 69 | DEFW 69DDH |
| LD HY,C | FD 61 | DEFW 61FDH |
| LD LY,C | FD 69 | DEFW 69FDH |
| LD HX,D | DD 62 | DEFW 62DDH |
| LD LX,D | DD 6A | DEFW 6ADDH |
| LD HY,D | FD 62 | DEFW 62FDH |
| LD LY,D | FD 6A | DEFW 6AFDH |
| LD HX,E | DD 63 | DEFW 63DDH |
| LD LX,E | DD 6B | DEFW 6BDDH |
| LD HY,E | FD 63 | DEFW 63FDH |
| LD LY,E | FD 6B | DEFW 6BFDH |
| LD HX,n | DD 26 n | DEFB 0DDH,26H,n or DEFB 221,38,n |
| LD LX,n | DD 2E n | DEFB 0DDH,2EH,n or DEFB 221,46,n |
| LD HY,n | FD 26 n | DEFB 0FDH,26H,n or DEFB 253,38,n |
| LD LY,n | FD 2E n | DEFB 0FDH,2EH,n or DEFB 253,46,n |
| LD HX,LX | DD 65 | DEFW 65DDH |
| LD LX,HX | DD 6C | DEFW 6CDDH |
| LD HY,LY | FD 65 | DEFW 65FDH |
| LD LY,HY | FD 6C | DEFW 6CFDH |
| LD A,HX | DD 7C | DEFW 7CDDH |
| LD A,LX | DD 7D | DEFW 7DDDH |
| LD A,HY | FD 7C | DEFW 7CFDH |
| LD A,LY | FD 7D | DEFW 7DFDH |
| LD B,HX | DD 44 | DEFW 44DDH |
| LD B,LX | DD 45 | DEFW 45DDH |
| LD B,HY | FD 44 | DEFW 44FDH |
| LD B,LY | FD 45 | DEFW 45FDH |
| LD C,HX | DD 4C | DEFW 4CDDH |
| LD C,LX | DD 4D | DEFW 4DDDH |
| LD C,HY | FD 4C | DEFW 4CFDH |
| LD C,LY | FD 4D | DEFW 4DFDH |
| LD D,HX | DD 54 | DEFW 54DDH |
| LD D,LX | DD 55 | DEFW 55DDH |
| LD D,HY | FD 54 | DEFW 54FDH |
| LD D,LY | FD 55 | DEFW 55FDH |
| LD E,HX | DD 5C | DEFW 5CDDH |
| LD E,LX | DD 5D | DEFW 5DDDH |
| LD E,HY | FD 5C | DEFW 5CFDH |
| LD E,LY | FD 5D | DEFW 5DFDH |
Z-80 Instruction Set
Table I
Z-80 Instructions from 00 through 3F
HEX OCT OP AD HEX OCT OP AD
00 000 NOP 01 001 LD BC,nn
* 08 010 EX AF,AF' 09 011 ADD HL,BC
* 10 020 DJNZ n 11 021 LD DE,nn
* 18 030 JR n 19 031 ADD HL,DE
20 040 JR NZ,n 21 041 LD HL,nn
* 28 050 JR Z,n 29 051 ADD HL,HL
30 060 JR NC,n 31 061 LD SP,nn
* 38 070 JR C,n 39 071 ADD HL,SP
02 002 LD (BC),A 03 003 INC BC
0A 012 LD A,(BC) 0B 013 DEC BC
12 022 LD (DE),A 13 023 INC DE
1A 032 LD A,(DE) 1B 033 DEC DE
22 042 LD (nn),HL 23 043 INC HL
2A 052 LD HL,(nn) 2B 053 DEC HL
32 062 LD (nn),A 33 063 INC SP
3A 072 LD A,(nn) 3B 073 DEC SP
04 004 INC B 05 005 DEC B
0C 014 INC C 0D 015 DEC C
14 024 INC D 15 025 DEC D
1C 034 INC E 1D 035 DEC E
24 0D4 INC H 25 045 DEC H
2C 054 INC L 2D 055 DEC L
34 064 INC (HL) 35 065 DEC (HL)
3C 074 INC A 3D 075 DEC A
06 006 LD B,n 07 007 RLCA
0E 016 LD C,n 0F 017 RRCA
16 026 LD D,n 17 027 RLA
1E 036 LD E,n 1F 037 RRA
26 046 LD H,n 27 047 DAA
2E 056 LD L,n 2F 057 CPL
36 066 LD (HL),n 37 067 SCF
3E 076 LD A,n 3F 077 CCF
Table II
Z-80 Instructions from 40 through 7F
8-Bit Interregister Transfers
General form:
OCT OP AD
1(r1)(r2) LD REG(r1),REG(r2)
Source is REG(r2), destination is REG(r1), where r1 and r2 are
8-bit registers (see Table VI).
HEX OCT OP AD HEX OCT OP AD
40 100 LD B,B 41 101 LD B,C
48 110 LD C,B 49 111 LD C,C
50 120 LD D,B 51 121 LD D,C
58 130 LD E,B 59 131 LD E,C
60 140 LD H,B 61 141 LD H,C
68 150 LD L,B 69 151 LD L,C
70 160 LD (HL),B 71 161 LD (HL),C
78 170 LD A,B 79 171 ADD A,C
42 102 LD B,D 43 103 LD B,E
4A 112 LD C,D 4B 113 LD C,E
52 122 LD D,D 53 123 LD D,E
5A 132 LD E,D 5B 133 LD E,E
62 142 LD H,D 63 143 LD H,E
6A 152 LD L,D 6B 153 LD L,E
72 162 LD (HL),D 73 163 LD (HL),E
7A 172 LD A,D 7B 173 LD A,E
44 104 LD B,H 45 105 LD B,L
4C 114 LD C,H 4D 115 LD C,L
54 124 LD D,H 55 125 LD D,L
5C 134 LD E,H 5D 135 LD E,L
64 144 LD H,H 65 145 LD H,L
6C 154 LD L,H 6D 155 LD L,L
74 164 LD (HL),H 75 165 LD (HL),L
7C 174 LD A,H 7D 175 LD A,L
46 106 LD B,(HL) 47 107 LD B,A
4E 116 LD C,(HL) 4F 117 LD C,A
56 126 LD D,(HL) 57 127 LD D,A
5E 136 LD E,(HL) 5F 137 LD E,A
66 146 LD H,(HL) 67 147 LD H,A
6E 156 LD L,(HL) 6F 157 LD L,A
76 166 HALT 77 167 LD (HL),A
7E 176 LD A,(HL) 7F 177 LD A,A
Table III
Z-80 Instructions from 80 through BF
8-Bit Arithmetic and Logic
General form:
OCT OP AD
2(op3)(r) OP(op3) [A,]REG(r)
The [A,] field is used with ADD, ADC and SBC to avoid ambiguity
with other instructions. For the operation codes OP(op3) and the
8-bit register codes see Table VI.
HEX OCT OP AD HEX OCT OP AD
80 200 ADD A,B 81 201 ADD A,C
88 210 ADC A,B 89 211 ADC A,C
90 220 SUB B 91 221 SUB C
98 230 SBC A,B 99 231 SBC A,C
A0 240 AND B A1 241 AND C
A8 250 XOR B A9 251 XOR C
B0 260 OR B B1 261 OR C
B8 270 CP B B9 271 CP C
82 202 ADD A,D 83 203 ADD A,E
8A 212 ADC A,D 8B 213 ADC A,E
92 222 SUB D 93 223 SUB E
9A 232 SBC A,D 9B 233 SBC A,E
A2 242 AND D A3 243 AND E
AA 252 XOR D AB 253 XOR E
B2 262 OR D B3 263 OR E
BA 272 CP D BB 273 CP E
84 204 ADD A,H 85 205 ADD A,L
8C 214 ADC A,H 8D 215 ADC A,L
94 224 SUB H 95 225 SUB L
9C 234 SBC A,H 9D 235 SBC A,L
A4 244 AND H A5 245 AND L
AC 254 XOR H AD 255 XOR L
B4 264 OR H B5 265 OR L
BC 274 CP H BD 275 CP L
86 206 ADD A,(HL) 87 207 ADD A,A
8E 216 ADC A,(HL) 8F 217 ADC A,A
96 226 SUB (HL) 97 227 SUB A
9E 236 SBC A,(HL) 9F 237 SBC A,A
A6 246 AND (HL) A7 247 AND A
AE 256 XOR (HL) AF 257 XOR A
B6 266 OR (HL) B7 267 OR A
BE 276 CP (HL) BF 277 CP A
Table IV
Z-80 Instructions from C0 through FF
HEX OCT OP AD HEX OCT OP AD
C0 300 RET NZ C1 301 POP BC
C8 310 RET Z C9 311 RET
D0 320 RET NC D1 321 POP DE
D8 330 RET C * D9 331 EXX
E0 340 RET PO E1 341 POP HL
E8 350 RET PE E9 351 JP (HL)
F0 360 RET P F1 361 POP AF
F8 370 RET M F9 371 LD SP,HL
C2 302 JP NZ,nn C3 303 JP nn
CA 312 JP Z,nn * CB 313 (See notes)
D2 322 JP NC,nn D3 323 OUT n,A
DA 332 JP C,nn DB 333 IN A,n
E2 342 JP PO,nn E3 343 EX (SP),HL
EA 352 JP PE,nn EB 353 EX DE,HL
F2 362 JP P,nn F3 363 DI
FA 372 JP M,nn FB 373 EI
C4 304 CALL NZ,nn C5 305 PUSH BC
CC 314 CALL Z,nn CD 315 CALL nn
D4 324 CALL NC,nn D5 325 PUSH DE
DC 334 CALL C,nn * DD 335 (See notes)
E4 344 CALL PO,nn E5 345 PUSH HL
EC 354 CALL PE,nn * ED 355 (See notes)
F4 364 CALL P,nn F5 365 PUSH AF
FC 374 CALL M,nn * FD 375 (See notes)
C6 306 ADD A,n C7 307 RST 00H
CE 316 ADC A,n CF 317 RST 08H
D6 326 SUB n D7 327 RST 10H
DE 336 SBC A,n DF 337 RST 18H
E6 346 AND n E7 347 RST 20H
EE 356 XOR n EF 357 RST 28H
F6 366 OR n F7 367 RST 30H
FE 376 CP n FF 377 RST 38H
Table V
Extended Z-80 Instructions Prefixed by ED
Listed by Second Byte
HEX OCT OP AD HEX OCT OP AD
40 100 IN B,(C) 41 101 OUT (C),B
48 110 IN C,(C) 49 111 OUT (C),C
50 120 IN D,(C) 51 121 OUT (C),D
58 130 IN E,(C) 59 131 OUT (C),E
60 140 IN H,(C) 61 141 OUT (C),H
68 150 IN L,(C) 69 151 OUT (C),L
70 160 (NONE) 71 161 (NONE)
78 170 IN A,(C) 79 171 OUT (C),A
42 102 SBC HL,BC 43 103 LD (nn),BC
4A 112 ADC HL,BC 4B 113 LD BC,(nn)
52 122 SBC HL,DE 53 123 LD (nn),DE
5A 132 ADC HL,DE 5B 133 LD DE,(nn)
62 142 SBC HL,HL 63 143 (NONE, see 22H)
6A 152 ADC HL,HL 6B 153 (NONE, see 2AH)
72 162 SBC HL,SP 73 163 LD (nn),SP
7A 172 ADC HL,SP 7B 173 LD SP,(nn)
44 104 NEG 45 105 RETN
4C 114 (NONE) 4D 115 RETI
46 106 IM 0 47 107 LD I,A
4E 116 (NONE) 4F 117 LD R,A
56 126 IM 1 57 127 LD A,I
5E 136 IM 2 5F 137 LD A,R
66 146 (NONE) 67 147 RRD
6E 156 (NONE) 6F 157 RLD
A0 240 LDI A1 241 CPI
A8 250 LDD A9 251 CPD
B0 260 LDIR B1 261 CPIR
B8 270 LDDR B9 271 CPDR
A2 242 INI A3 243 OUTI
AA 252 IND AB 253 OUTD
B2 262 INIR B3 263 OTIR
BA 272 INDR BB 273 OTDR
Table VI
Extended Z-80 Instructions Prefixed by CB
Listed by Second Byte
OCT OP AD p OP(p)
0(p)(r) OP(p) REG(r) 0 RLC
1(n)(r) BIT n,REG(r) 1 RRC
2(n)(r) RES n,REG(r) 2 RL
3(n)(r) SET n,REG(r) 3 RR
4 SLA
5 SRA
6 SLO (See notes)
7 SRL
Other octal fields common in Z80 instructions
8-Bit Registers:
r 0 1 2 3 4 5 6 7
REG(r) B C D E H L (HL) A
16 Bit Registers:
R 0 1 2 3
REG(R) BC DE HL SP
Operations (see Table I):
op1 0 1 2 3 4 5 6 7
OP(op1) JR LD/ADD LD INC/DEC INC DEC LD rotate
OP(1) and OP(3) are 16-bit instructions, OP(6) are the immediate loads.
OP(2) is 4 8-bit indexed memory, 2 16-bit and 2 8-bit memeory loads.
OP(7) includes 4 rotates of A, DAA, CPL, SCF and CCF.
Operations (see Table III):
op3 0 1 2 3 4 5 6 7
OP(op3) ADD ADC SUB SBC AND XOR OR CP
Operations (see Table IV):
op4 0 1 2 3 4 5 6 7
OP(op4) RET CN(c) --- JP CN(c),nn --- CALL CN(c),nn PUSH op3 RST
OP(5) includes the unconditional CALL plus the prefixes DD, FD, and ED
OP(6) is the immediate 8-bit arithmetic and logical operations ADD A,n etc.
Conditions for JR, JP, CALL, RET
c 0 1 2 3 4 5 6 7
CN(c) NZ Z NC C PO PE P M
JR implements only the first four
Notes:
- Instructions in the Z80 but not in the 8080 instruction set are marked with an asterisk preceeding the hex instruction in Tables I through IV. None of the instructions in Tables V and VI are in the 8080 instruction set. None of the instructions involving the auxiliary index registers IX and IY are in the 8080 instruction set.
- The byte CB indicates the first byte of the extended Z80 instructions given in Table V.
- The bytes DD and FD are used to prefix instructions using the auxiliary index registers IX and IY. In single-byte instructions, using memory location (HL), the memory location pointed to m, where m is (IX+d) or (IY+d), may be substituted for (HL) by prefixing the instruction by DD or FD, respectively, and spcifying (HL) as the source or destination in the instruction format. The instruction is followed by d when this is done and the resulting instruction is 3 bytes long.
- The byte ED indicates the first byte of the extended Z80 instructions given in Table VI.
- Prefixing single-byte 8-bit instructions involving registers H and L by DD (for IX) or FD (for IY) results in use of XH, XL, YH or YL instead. This usage is undocumented and works only on Zilog Z80's and second-sources which use Zilog masks. XH, XL, YH and YL refer to the high-order bytes of IX and IY, respectively. ALDS supports these instructions.
- The SLO operation in Table V is undocumented and is not well defined.
- All the instructions in Table V can be extended to undocumented Zilog Z80 instructions: These instructions, which use (IX+d) and (IY+d) as the source and destination as well as load the result in r, result when the (IX+d) or (IY+d) format is used and registers other than (HL) are specified. The resulting instrucions are 4 bytes long. ALDS supports these instructions using the format [OP]LD r,m where m is (IX+d) or (IY+d). The timing is the same as [OP] m.