Page Index

- Model I ROM Version Comparison Page
- Model III ROM Checksums
- Model 4 ROM Checksums
- Vectors – RST and Disk BASIC
- ROM Routine Calls – Integer Math
- ROM Routine Calls – I/O & Misc.
- ROM Entry Points to Level II Routines
- ROM Addresses
- Z-80 Instruction Set
- Undocumented Z-80 Opcodes
- Disassembled / Commented ROMs

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

ORG $-1

DEFB 36H

SLS (IY+d)

FD CB dd 36

RLC (IY+d)

ORG $-1

DEFB 36H

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

or DEFB 221,38,n

LD LX,n

DD 2E n

DEFB 0DDH,2EH,n

or DEFB 221,46,n

or DEFB 221,46,n

LD HY,n

FD 26 n

DEFB 0FDH,26H,n

or DEFB 253,38,n

or DEFB 253,38,n

LD LY,n

FD 2E n

DEFB 0FDH,2EH,n

or DEFB 253,46,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.