1const OPCODE_MNEMONICS: [&str; 256] = [ 2 "NOP", 3 "LD BC, nn", 4 "LD (BC), A", 5 "INC BC", 6 "INC B", 7 "DEC B", 8 "LD B, n", 9 "RLCA", 10 "EX AF, AF'", 11 "ADD HL, BC", 12 "LD A, (BC)", 13 "DEC BC", 14 "INC C", 15 "DEC C", 16 "LD C, n", 17 "RRCA", 18 "DJNZ d", 19 "LD DE, nn", 20 "LD (DE), A", 21 "INC DE", 22 "INC D", 23 "DEC D", 24 "LD D, n", 25 "RLA", 26 "JR d", 27 "ADD HL, DE", 28 "LD A, (DE)", 29 "DEC DE", 30 "INC E", 31 "DEC E", 32 "LD E, n", 33 "RRA", 34 "JR NZ, d", 35 "LD HL, nn", 36 "LD (nn), HL", 37 "INC HL", 38 "INC H", 39 "DEC H", 40 "LD H, n", 41 "DAA", 42 "JR Z, d", 43 "ADD HL, HL", 44 "LD HL, (nn)", 45 "DEC HL", 46 "INC L", 47 "DEC L", 48 "LD L, n", 49 "CPL", 50 "JR NC, d", 51 "LD SP, nn", 52 "LD (nn), A", 53 "INC SP", 54 "INC (HL)", 55 "DEC (HL)", 56 "LD (HL), n", 57 "SCF", 58 "JR C, d", 59 "ADD HL, SP", 60 "LD A, (nn)", 61 "DEC SP", 62 "INC A", 63 "DEC A", 64 "LD A, n", 65 "CCF", 66 "LD B, B", 67 "LD B, C", 68 "LD B, D", 69 "LD B, E", 70 "LD B, H", 71 "LD B, L", 72 "LD B, (HL)", 73 "LD B, A", 74 "LD C, B", 75 "LD C, C", 76 "LD C, D", 77 "LD C, E", 78 "LD C, H", 79 "LD C, L", 80 "LD C, (HL)", 81 "LD C, A", 82 "LD D, B", 83 "LD D, C", 84 "LD D, D", 85 "LD D, E", 86 "LD D, H", 87 "LD D, L", 88 "LD D, (HL)", 89 "LD D, A", 90 "LD E, B", 91 "LD E, C", 92 "LD E, D", 93 "LD E, E", 94 "LD E, H", 95 "LD E, L", 96 "LD E, (HL)", 97 "LD E, A", 98 "LD H, B", 99 "LD H, C", 100 "LD H, D", 101 "LD H, E", 102 "LD H, H", 103 "LD H, L", 104 "LD H, (HL)", 105 "LD H, A", 106 "LD L, B", 107 "LD L, C", 108 "LD L, D", 109 "LD L, E", 110 "LD L, H", 111 "LD L, L", 112 "LD L, (HL)", 113 "LD L, A", 114 "LD (HL), B", 115 "LD (HL), C", 116 "LD (HL), D", 117 "LD (HL), E", 118 "LD (HL), H", 119 "LD (HL), L", 120 "HALT", 121 "LD (HL), A", 122 "LD A, B", 123 "LD A, C", 124 "LD A, D", 125 "LD A, E", 126 "LD A, H", 127 "LD A, L", 128 "LD A, (HL)", 129 "LD A, A", 130 "ADD A, B", 131 "ADD A, C", 132 "ADD A, D", 133 "ADD A, E", 134 "ADD A, H", 135 "ADD A, L", 136 "ADD A, (HL)", 137 "ADD A, A", 138 "ADC A, B", 139 "ADC A, C", 140 "ADC A, D", 141 "ADC A, E", 142 "ADC A, H", 143 "ADC A, L", 144 "ADC A, (HL)", 145 "ADC A, A", 146 "SUB B", 147 "SUB C", 148 "SUB D", 149 "SUB E", 150 "SUB H", 151 "SUB L", 152 "SUB (HL)", 153 "SUB A", 154 "SBC A, B", 155 "SBC A, C", 156 "SBC A, D", 157 "SBC A, E", 158 "SBC A, H", 159 "SBC A, L", 160 "SBC A, (HL)", 161 "SBC A, A", 162 "AND B", 163 "AND C", 164 "AND D", 165 "AND E", 166 "AND H", 167 "AND L", 168 "AND (HL)", 169 "AND A", 170 "XOR B", 171 "XOR C", 172 "XOR D", 173 "XOR E", 174 "XOR H", 175 "XOR L", 176 "XOR (HL)", 177 "XOR A", 178 "OR B", 179 "OR C", 180 "OR D", 181 "OR E", 182 "OR H", 183 "OR L", 184 "OR (HL)", 185 "OR A", 186 "CP B", 187 "CP C", 188 "CP D", 189 "CP E", 190 "CP H", 191 "CP L", 192 "CP (HL)", 193 "CP A", 194 "RET NZ", 195 "POP BC", 196 "JP NZ, nn", 197 "JP nn", 198 "CALL NZ, nn", 199 "PUSH BC", 200 "ADD A, n", 201 "RST $00", 202 "RET Z", 203 "RET", 204 "JP Z, nn", 205 "(bit prefix)", 206 "CALL Z, nn", 207 "CALL nn", 208 "ADC A, n", 209 "RST $08", 210 "RET NC", 211 "POP DE", 212 "JP NC, nn", 213 "OUT (n), A", 214 "CALL NC, nn", 215 "PUSH DE", 216 "SUB n", 217 "RST $10", 218 "RET C", 219 "EXX", 220 "JP C, nn", 221 "IN A, (n)", 222 "CALL C, nn", 223 "(IX prefix)", 224 "SBC A, n", 225 "RST $18", 226 "RET PO", 227 "POP HL", 228 "JP PO, nn", 229 "EX (SP), HL", 230 "CALL PO, nn", 231 "PUSH HL", 232 "AND n", 233 "RST $20", 234 "RET PE", 235 "JP (HL)", 236 "JP PE, nn", 237 "EX DE, HL", 238 "CALL PE, nn", 239 "(ED prefix)", 240 "XOR n", 241 "RST $28", 242 "RET P", 243 "POP AF", 244 "JP P, nn", 245 "DI", 246 "CALL P, nn", 247 "PUSH AF", 248 "OR n", 249 "RST $30", 250 "RET M", 251 "LD SP, HL", 252 "JP M, nn", 253 "EI", 254 "CALL M, nn", 255 "(IY prefix)", 256 "CP n", 257 "RST $38", 258]; 259 260pub fn for_opcode(opcode: u8, next: u8) -> &'static str { 261 match opcode { 262 0xED => match next { 263 0x40 => "IN B, (C)", 264 0x41 => "OUT (C), B", 265 0x42 => "SBC HL, BC", 266 0x43 => "LD (nn), BC", 267 0x44 => "NEG", 268 0x45 => "RETN", 269 0x46 => "IM 0", 270 0x47 => "LD I, A", 271 0x48 => "IN C, (C)", 272 0x49 => "OUT (C), C", 273 0x4A => "ADC HL, BC", 274 0x4B => "LD BC, (nn)", 275 0x4D => "RETI", 276 0x4F => "LD R, A", 277 0x50 => "IN D, (C)", 278 0x51 => "OUT (C), D", 279 0x52 => "SBC HL, DE", 280 0x53 => "LD (nn), DE", 281 0x56 => "IM 1", 282 0x57 => "LD A, I", 283 0x58 => "IN E, (C)", 284 0x59 => "OUT (C), E", 285 0x5A => "ADC HL, DE", 286 0x5B => "LD DE, (nn)", 287 0x5E => "IM 2", 288 0x5F => "LD A, R", 289 0x60 => "IN H, (C)", 290 0x61 => "OUT (C), H", 291 0x62 => "SBC HL, HL", 292 0x67 => "RRD", 293 0x68 => "IN L, (C)", 294 0x69 => "OUT (C), L", 295 0x6A => "ADC HL, HL", 296 0x6F => "RLD", 297 0x72 => "SBC HL, SP", 298 0x73 => "LD (nn), SP", 299 0x78 => "IN A, (C)", 300 0x79 => "OUT (C), A", 301 0x7A => "ADC HL, SP", 302 0x7B => "LD SP, (nn)", 303 0xA0 => "LDI", 304 0xA1 => "CPI", 305 0xA2 => "INI", 306 0xA3 => "OUTI", 307 0xA8 => "LDD", 308 0xA9 => "CPD", 309 0xAA => "IND", 310 0xAB => "OUTD", 311 0xB0 => "LDIR", 312 0xB1 => "CPIR", 313 0xB2 => "INIR", 314 0xB3 => "OTIR", 315 0xB8 => "LDDR", 316 0xB9 => "CPDR", 317 0xBA => "INDR", 318 0xBB => "OTDR", 319 _ => "unknown ED-prefixed opcode", 320 }, 321 _ => OPCODE_MNEMONICS[opcode as usize], 322 } 323}