1use std::{fmt, mem};
5
6#[allow(non_camel_case_types)]
7#[repr(u8)]
8#[derive(Debug, Clone, Copy, PartialEq, Eq)]
9pub enum RawOpcode {
10 NOP = 0x00,
11 LXI_B = 0x01,
12 STAX_B = 0x02,
13 INX_B = 0x03,
14 INR_B = 0x04,
15 DCR_B = 0x05,
16 MVI_B = 0x06,
17 RLC = 0x07,
18 DAD_B = 0x09,
19 LDAX_B = 0x0a,
20 DCX_B = 0x0b,
21 INR_C = 0x0c,
22 DCR_C = 0x0d,
23 MVI_C = 0x0e,
24 RRC = 0x0f,
25 LXI_D = 0x11,
26 STAX_D = 0x12,
27 INX_D = 0x13,
28 INR_D = 0x14,
29 DCR_D = 0x15,
30 MVI_D = 0x16,
31 RAL = 0x17,
32 DAD_D = 0x19,
33 LDAX_D = 0x1a,
34 DCX_D = 0x1b,
35 INR_E = 0x1c,
36 DCR_E = 0x1d,
37 MVI_E = 0x1e,
38 RAR = 0x1f,
39 LXI_H = 0x21,
40 SHLD = 0x22,
41 INX_H = 0x23,
42 INR_H = 0x24,
43 DCR_H = 0x25,
44 MVI_H = 0x26,
45 DAA = 0x27,
46 DAD_H = 0x29,
47 LHLD = 0x2a,
48 DCX_H = 0x2b,
49 INR_L = 0x2c,
50 DCR_L = 0x2d,
51 MVI_L = 0x2e,
52 CMA = 0x2f,
53 LXI_SP = 0x31,
54 STA = 0x32,
55 INX_SP = 0x33,
56 INR_M = 0x34,
57 DCR_M = 0x35,
58 MVI_M = 0x36,
59 STC = 0x37,
60 DAD_SP = 0x39,
61 LDA = 0x3a,
62 DCX_SP = 0x3b,
63 INR_A = 0x3c,
64 DCR_A = 0x3d,
65 MVI_A = 0x3e,
66 CMC = 0x3f,
67 MOV_B_B = 0x40,
68 MOV_B_C = 0x41,
69 MOV_B_D = 0x42,
70 MOV_B_E = 0x43,
71 MOV_B_H = 0x44,
72 MOV_B_L = 0x45,
73 MOV_B_M = 0x46,
74 MOV_B_A = 0x47,
75 MOV_C_B = 0x48,
76 MOV_C_C = 0x49,
77 MOV_C_D = 0x4a,
78 MOV_C_E = 0x4b,
79 MOV_C_H = 0x4c,
80 MOV_C_L = 0x4d,
81 MOV_C_M = 0x4e,
82 MOV_C_A = 0x4f,
83 MOV_D_B = 0x50,
84 MOV_D_C = 0x51,
85 MOV_D_D = 0x52,
86 MOV_D_E = 0x53,
87 MOV_D_H = 0x54,
88 MOV_D_L = 0x55,
89 MOV_D_M = 0x56,
90 MOV_D_A = 0x57,
91 MOV_E_B = 0x58,
92 MOV_E_C = 0x59,
93 MOV_E_D = 0x5a,
94 MOV_E_E = 0x5b,
95 MOV_E_H = 0x5c,
96 MOV_E_L = 0x5d,
97 MOV_E_M = 0x5e,
98 MOV_E_A = 0x5f,
99 MOV_H_B = 0x60,
100 MOV_H_C = 0x61,
101 MOV_H_D = 0x62,
102 MOV_H_E = 0x63,
103 MOV_H_H = 0x64,
104 MOV_H_L = 0x65,
105 MOV_H_M = 0x66,
106 MOV_H_A = 0x67,
107 MOV_L_B = 0x68,
108 MOV_L_C = 0x69,
109 MOV_L_D = 0x6a,
110 MOV_L_E = 0x6b,
111 MOV_L_H = 0x6c,
112 MOV_L_L = 0x6d,
113 MOV_L_M = 0x6e,
114 MOV_L_A = 0x6f,
115 MOV_M_B = 0x70,
116 MOV_M_C = 0x71,
117 MOV_M_D = 0x72,
118 MOV_M_E = 0x73,
119 MOV_M_H = 0x74,
120 MOV_M_L = 0x75,
121 HLT = 0x76,
122 MOV_M_A = 0x77,
123 MOV_A_B = 0x78,
124 MOV_A_C = 0x79,
125 MOV_A_D = 0x7a,
126 MOV_A_E = 0x7b,
127 MOV_A_H = 0x7c,
128 MOV_A_L = 0x7d,
129 MOV_A_M = 0x7e,
130 MOV_A_A = 0x7f,
131 ADD_B = 0x80,
132 ADD_C = 0x81,
133 ADD_D = 0x82,
134 ADD_E = 0x83,
135 ADD_H = 0x84,
136 ADD_L = 0x85,
137 ADD_M = 0x86,
138 ADD_A = 0x87,
139 ADC_B = 0x88,
140 ADC_C = 0x89,
141 ADC_D = 0x8a,
142 ADC_E = 0x8b,
143 ADC_H = 0x8c,
144 ADC_L = 0x8d,
145 ADC_M = 0x8e,
146 ADC_A = 0x8f,
147 SUB_B = 0x90,
148 SUB_C = 0x91,
149 SUB_D = 0x92,
150 SUB_E = 0x93,
151 SUB_H = 0x94,
152 SUB_L = 0x95,
153 SUB_M = 0x96,
154 SUB_A = 0x97,
155 SBB_B = 0x98,
156 SBB_C = 0x99,
157 SBB_D = 0x9a,
158 SBB_E = 0x9b,
159 SBB_H = 0x9c,
160 SBB_L = 0x9d,
161 SBB_M = 0x9e,
162 SBB_A = 0x9f,
163 ANA_B = 0xa0,
164 ANA_C = 0xa1,
165 ANA_D = 0xa2,
166 ANA_E = 0xa3,
167 ANA_H = 0xa4,
168 ANA_L = 0xa5,
169 ANA_M = 0xa6,
170 ANA_A = 0xa7,
171 XRA_B = 0xa8,
172 XRA_C = 0xa9,
173 XRA_D = 0xaa,
174 XRA_E = 0xab,
175 XRA_H = 0xac,
176 XRA_L = 0xad,
177 XRA_M = 0xae,
178 XRA_A = 0xaf,
179 ORA_B = 0xb0,
180 ORA_C = 0xb1,
181 ORA_D = 0xb2,
182 ORA_E = 0xb3,
183 ORA_H = 0xb4,
184 ORA_L = 0xb5,
185 ORA_M = 0xb6,
186 ORA_A = 0xb7,
187 CMP_B = 0xb8,
188 CMP_C = 0xb9,
189 CMP_D = 0xba,
190 CMP_E = 0xbb,
191 CMP_H = 0xbc,
192 CMP_L = 0xbd,
193 CMP_M = 0xbe,
194 CMP_A = 0xbf,
195 RNZ = 0xc0,
196 POP_B = 0xc1,
197 JNZ = 0xc2,
198 JMP = 0xc3,
199 CNZ = 0xc4,
200 PUSH_B = 0xc5,
201 ADI = 0xc6,
202 RST_0 = 0xc7,
203 RZ = 0xc8,
204 RET = 0xc9,
205 JZ = 0xca,
206 CZ = 0xcc,
207 CALL = 0xcd,
208 ACI = 0xce,
209 RST_1 = 0xcf,
210 RNC = 0xd0,
211 POP_D = 0xd1,
212 JNC = 0xd2,
213 OUT = 0xd3,
214 CNC = 0xd4,
215 PUSH_D = 0xd5,
216 SUI = 0xd6,
217 RST_2 = 0xd7,
218 RC = 0xd8,
219 JC = 0xda,
220 IN = 0xdb,
221 CC = 0xdc,
222 SBI = 0xde,
223 RST_3 = 0xdf,
224 RPO = 0xe0,
225 POP_H = 0xe1,
226 JPO = 0xe2,
227 XTHL = 0xe3,
228 CPO = 0xe4,
229 PUSH_H = 0xe5,
230 ANI = 0xe6,
231 RST_4 = 0xe7,
232 RPE = 0xe8,
233 PCHL = 0xe9,
234 JPE = 0xea,
235 XCHG = 0xeb,
236 CPE = 0xec,
237 XRI = 0xee,
238 RST_5 = 0xef,
239 RP = 0xf0,
240 POP_PSW = 0xf1,
241 JP = 0xf2,
242 DI = 0xf3,
243 CP = 0xf4,
244 PUSH_PSW = 0xf5,
245 ORI = 0xf6,
246 RST_6 = 0xf7,
247 RM = 0xf8,
248 SPHL = 0xf9,
249 JM = 0xfa,
250 EI = 0xfb,
251 CM = 0xfc,
252 CPI = 0xfe,
253 RST_7 = 0xff,
254}
255
256impl RawOpcode {
257 pub fn size(&self) -> usize {
258 match *self {
259 RawOpcode::NOP => 1,
260 RawOpcode::LXI_B => 3,
261 RawOpcode::STAX_B => 1,
262 RawOpcode::INX_B => 1,
263 RawOpcode::INR_B => 1,
264 RawOpcode::DCR_B => 1,
265 RawOpcode::MVI_B => 2,
266 RawOpcode::RLC => 1,
267 RawOpcode::DAD_B => 1,
268 RawOpcode::LDAX_B => 1,
269 RawOpcode::DCX_B => 1,
270 RawOpcode::INR_C => 1,
271 RawOpcode::DCR_C => 1,
272 RawOpcode::MVI_C => 2,
273 RawOpcode::RRC => 1,
274 RawOpcode::LXI_D => 3,
275 RawOpcode::STAX_D => 1,
276 RawOpcode::INX_D => 1,
277 RawOpcode::INR_D => 1,
278 RawOpcode::DCR_D => 1,
279 RawOpcode::MVI_D => 2,
280 RawOpcode::RAL => 1,
281 RawOpcode::DAD_D => 1,
282 RawOpcode::LDAX_D => 1,
283 RawOpcode::DCX_D => 1,
284 RawOpcode::INR_E => 1,
285 RawOpcode::DCR_E => 1,
286 RawOpcode::MVI_E => 2,
287 RawOpcode::RAR => 1,
288 RawOpcode::LXI_H => 3,
289 RawOpcode::SHLD => 3,
290 RawOpcode::INX_H => 1,
291 RawOpcode::INR_H => 1,
292 RawOpcode::DCR_H => 1,
293 RawOpcode::MVI_H => 2,
294 RawOpcode::DAA => 1,
295 RawOpcode::DAD_H => 1,
296 RawOpcode::LHLD => 3,
297 RawOpcode::DCX_H => 1,
298 RawOpcode::INR_L => 1,
299 RawOpcode::DCR_L => 1,
300 RawOpcode::MVI_L => 2,
301 RawOpcode::CMA => 1,
302 RawOpcode::LXI_SP => 3,
303 RawOpcode::STA => 3,
304 RawOpcode::INX_SP => 1,
305 RawOpcode::INR_M => 1,
306 RawOpcode::DCR_M => 1,
307 RawOpcode::MVI_M => 2,
308 RawOpcode::STC => 1,
309 RawOpcode::DAD_SP => 1,
310 RawOpcode::LDA => 3,
311 RawOpcode::DCX_SP => 1,
312 RawOpcode::INR_A => 1,
313 RawOpcode::DCR_A => 1,
314 RawOpcode::MVI_A => 2,
315 RawOpcode::CMC => 1,
316 RawOpcode::MOV_B_B => 1,
317 RawOpcode::MOV_B_C => 1,
318 RawOpcode::MOV_B_D => 1,
319 RawOpcode::MOV_B_E => 1,
320 RawOpcode::MOV_B_H => 1,
321 RawOpcode::MOV_B_L => 1,
322 RawOpcode::MOV_B_M => 1,
323 RawOpcode::MOV_B_A => 1,
324 RawOpcode::MOV_C_B => 1,
325 RawOpcode::MOV_C_C => 1,
326 RawOpcode::MOV_C_D => 1,
327 RawOpcode::MOV_C_E => 1,
328 RawOpcode::MOV_C_H => 1,
329 RawOpcode::MOV_C_L => 1,
330 RawOpcode::MOV_C_M => 1,
331 RawOpcode::MOV_C_A => 1,
332 RawOpcode::MOV_D_B => 1,
333 RawOpcode::MOV_D_C => 1,
334 RawOpcode::MOV_D_D => 1,
335 RawOpcode::MOV_D_E => 1,
336 RawOpcode::MOV_D_H => 1,
337 RawOpcode::MOV_D_L => 1,
338 RawOpcode::MOV_D_M => 1,
339 RawOpcode::MOV_D_A => 1,
340 RawOpcode::MOV_E_B => 1,
341 RawOpcode::MOV_E_C => 1,
342 RawOpcode::MOV_E_D => 1,
343 RawOpcode::MOV_E_E => 1,
344 RawOpcode::MOV_E_H => 1,
345 RawOpcode::MOV_E_L => 1,
346 RawOpcode::MOV_E_M => 1,
347 RawOpcode::MOV_E_A => 1,
348 RawOpcode::MOV_H_B => 1,
349 RawOpcode::MOV_H_C => 1,
350 RawOpcode::MOV_H_D => 1,
351 RawOpcode::MOV_H_E => 1,
352 RawOpcode::MOV_H_H => 1,
353 RawOpcode::MOV_H_L => 1,
354 RawOpcode::MOV_H_M => 1,
355 RawOpcode::MOV_H_A => 1,
356 RawOpcode::MOV_L_B => 1,
357 RawOpcode::MOV_L_C => 1,
358 RawOpcode::MOV_L_D => 1,
359 RawOpcode::MOV_L_E => 1,
360 RawOpcode::MOV_L_H => 1,
361 RawOpcode::MOV_L_L => 1,
362 RawOpcode::MOV_L_M => 1,
363 RawOpcode::MOV_L_A => 1,
364 RawOpcode::MOV_M_B => 1,
365 RawOpcode::MOV_M_C => 1,
366 RawOpcode::MOV_M_D => 1,
367 RawOpcode::MOV_M_E => 1,
368 RawOpcode::MOV_M_H => 1,
369 RawOpcode::MOV_M_L => 1,
370 RawOpcode::HLT => 1,
371 RawOpcode::MOV_M_A => 1,
372 RawOpcode::MOV_A_B => 1,
373 RawOpcode::MOV_A_C => 1,
374 RawOpcode::MOV_A_D => 1,
375 RawOpcode::MOV_A_E => 1,
376 RawOpcode::MOV_A_H => 1,
377 RawOpcode::MOV_A_L => 1,
378 RawOpcode::MOV_A_M => 1,
379 RawOpcode::MOV_A_A => 1,
380 RawOpcode::ADD_B => 1,
381 RawOpcode::ADD_C => 1,
382 RawOpcode::ADD_D => 1,
383 RawOpcode::ADD_E => 1,
384 RawOpcode::ADD_H => 1,
385 RawOpcode::ADD_L => 1,
386 RawOpcode::ADD_M => 1,
387 RawOpcode::ADD_A => 1,
388 RawOpcode::ADC_B => 1,
389 RawOpcode::ADC_C => 1,
390 RawOpcode::ADC_D => 1,
391 RawOpcode::ADC_E => 1,
392 RawOpcode::ADC_H => 1,
393 RawOpcode::ADC_L => 1,
394 RawOpcode::ADC_M => 1,
395 RawOpcode::ADC_A => 1,
396 RawOpcode::SUB_B => 1,
397 RawOpcode::SUB_C => 1,
398 RawOpcode::SUB_D => 1,
399 RawOpcode::SUB_E => 1,
400 RawOpcode::SUB_H => 1,
401 RawOpcode::SUB_L => 1,
402 RawOpcode::SUB_M => 1,
403 RawOpcode::SUB_A => 1,
404 RawOpcode::SBB_B => 1,
405 RawOpcode::SBB_C => 1,
406 RawOpcode::SBB_D => 1,
407 RawOpcode::SBB_E => 1,
408 RawOpcode::SBB_H => 1,
409 RawOpcode::SBB_L => 1,
410 RawOpcode::SBB_M => 1,
411 RawOpcode::SBB_A => 1,
412 RawOpcode::ANA_B => 1,
413 RawOpcode::ANA_C => 1,
414 RawOpcode::ANA_D => 1,
415 RawOpcode::ANA_E => 1,
416 RawOpcode::ANA_H => 1,
417 RawOpcode::ANA_L => 1,
418 RawOpcode::ANA_M => 1,
419 RawOpcode::ANA_A => 1,
420 RawOpcode::XRA_B => 1,
421 RawOpcode::XRA_C => 1,
422 RawOpcode::XRA_D => 1,
423 RawOpcode::XRA_E => 1,
424 RawOpcode::XRA_H => 1,
425 RawOpcode::XRA_L => 1,
426 RawOpcode::XRA_M => 1,
427 RawOpcode::XRA_A => 1,
428 RawOpcode::ORA_B => 1,
429 RawOpcode::ORA_C => 1,
430 RawOpcode::ORA_D => 1,
431 RawOpcode::ORA_E => 1,
432 RawOpcode::ORA_H => 1,
433 RawOpcode::ORA_L => 1,
434 RawOpcode::ORA_M => 1,
435 RawOpcode::ORA_A => 1,
436 RawOpcode::CMP_B => 1,
437 RawOpcode::CMP_C => 1,
438 RawOpcode::CMP_D => 1,
439 RawOpcode::CMP_E => 1,
440 RawOpcode::CMP_H => 1,
441 RawOpcode::CMP_L => 1,
442 RawOpcode::CMP_M => 1,
443 RawOpcode::CMP_A => 1,
444 RawOpcode::RNZ => 1,
445 RawOpcode::POP_B => 1,
446 RawOpcode::JNZ => 3,
447 RawOpcode::JMP => 3,
448 RawOpcode::CNZ => 3,
449 RawOpcode::PUSH_B => 1,
450 RawOpcode::ADI => 2,
451 RawOpcode::RST_0 => 1,
452 RawOpcode::RZ => 1,
453 RawOpcode::RET => 1,
454 RawOpcode::JZ => 3,
455 RawOpcode::CZ => 3,
456 RawOpcode::CALL => 3,
457 RawOpcode::ACI => 2,
458 RawOpcode::RST_1 => 1,
459 RawOpcode::RNC => 1,
460 RawOpcode::POP_D => 1,
461 RawOpcode::JNC => 3,
462 RawOpcode::OUT => 2,
463 RawOpcode::CNC => 3,
464 RawOpcode::PUSH_D => 1,
465 RawOpcode::SUI => 2,
466 RawOpcode::RST_2 => 1,
467 RawOpcode::RC => 1,
468 RawOpcode::JC => 3,
469 RawOpcode::IN => 2,
470 RawOpcode::CC => 3,
471 RawOpcode::SBI => 2,
472 RawOpcode::RST_3 => 1,
473 RawOpcode::RPO => 1,
474 RawOpcode::POP_H => 1,
475 RawOpcode::JPO => 3,
476 RawOpcode::XTHL => 1,
477 RawOpcode::CPO => 3,
478 RawOpcode::PUSH_H => 1,
479 RawOpcode::ANI => 2,
480 RawOpcode::RST_4 => 1,
481 RawOpcode::RPE => 1,
482 RawOpcode::PCHL => 1,
483 RawOpcode::JPE => 3,
484 RawOpcode::XCHG => 1,
485 RawOpcode::CPE => 3,
486 RawOpcode::XRI => 2,
487 RawOpcode::RST_5 => 1,
488 RawOpcode::RP => 1,
489 RawOpcode::POP_PSW => 1,
490 RawOpcode::JP => 3,
491 RawOpcode::DI => 1,
492 RawOpcode::CP => 3,
493 RawOpcode::PUSH_PSW => 1,
494 RawOpcode::ORI => 2,
495 RawOpcode::RST_6 => 1,
496 RawOpcode::RM => 1,
497 RawOpcode::SPHL => 1,
498 RawOpcode::JM => 3,
499 RawOpcode::EI => 1,
500 RawOpcode::CM => 3,
501 RawOpcode::CPI => 2,
502 RawOpcode::RST_7 => 1,
503 }
504 }
505}
506
507impl From<u8> for RawOpcode {
508 fn from(t: u8) -> RawOpcode {
509 match t {
510 0x08 | 0x10 | 0x18 | 0x20 | 0x28 | 0x30 | 0x38 => RawOpcode::NOP,
512 0xd9 => RawOpcode::RET,
513 0xdd | 0xed | 0xfd => RawOpcode::CALL,
514 0xcb => RawOpcode::JMP,
515 _ => unsafe { mem::transmute(t) },
516 }
517 }
518}
519
520impl From<&u8> for RawOpcode {
521 fn from(t: &u8) -> RawOpcode {
522 From::from(*t)
523 }
524}
525
526impl Into<u8> for RawOpcode {
527 fn into(self) -> u8 {
528 unsafe { mem::transmute(self) }
529 }
530}
531
532impl fmt::Display for RawOpcode {
533 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
534 write!(f, "{:?}(0x{:02x?})", self, *self as u8)
535 }
536}
537
538#[derive(Debug, Clone, Copy, PartialEq, Eq)]
539pub enum Opcode {
540 Nop,
541 LxiB(u8, u8),
542 StaxB,
543 InxB,
544 InrB,
545 DcrB,
546 MviB(u8),
547 Rlc,
548 DadB,
549 LdaxB,
550 DcxB,
551 InrC,
552 DcrC,
553 MviC(u8),
554 Rrc,
555 LxiD(u8, u8),
556 StaxD,
557 InxD,
558 InrD,
559 DcrD,
560 MviD(u8),
561 Ral,
562 DadD,
563 LdaxD,
564 DcxD,
565 InrE,
566 DcrE,
567 MviE(u8),
568 Rar,
569 LxiH(u8, u8),
570 Shld(u16),
571 InxH,
572 InrH,
573 DcrH,
574 MviH(u8),
575 Daa,
576 DadH,
577 Lhld(u16),
578 DcxH,
579 InrL,
580 DcrL,
581 MviL(u8),
582 Cma,
583 LxiSp(u8, u8),
584 Sta(u16),
585 InxSp,
586 InrM,
587 DcrM,
588 MviM(u8),
589 Stc,
590 DadSp,
591 Lda(u16),
592 DcxSp,
593 InrA,
594 DcrA,
595 MviA(u8),
596 Cmc,
597 MovBB,
598 MovBC,
599 MovBD,
600 MovBE,
601 MovBH,
602 MovBL,
603 MovBM,
604 MovBA,
605 MovCB,
606 MovCC,
607 MovCD,
608 MovCE,
609 MovCH,
610 MovCL,
611 MovCM,
612 MovCA,
613 MovDB,
614 MovDC,
615 MovDD,
616 MovDE,
617 MovDH,
618 MovDL,
619 MovDM,
620 MovDA,
621 MovEB,
622 MovEC,
623 MovED,
624 MovEE,
625 MovEH,
626 MovEL,
627 MovEM,
628 MovEA,
629 MovHB,
630 MovHC,
631 MovHD,
632 MovHE,
633 MovHH,
634 MovHL,
635 MovHM,
636 MovHA,
637 MovLB,
638 MovLC,
639 MovLD,
640 MovLE,
641 MovLH,
642 MovLL,
643 MovLM,
644 MovLA,
645 MovMB,
646 MovMC,
647 MovMD,
648 MovME,
649 MovMH,
650 MovML,
651 Hlt,
652 MovMA,
653 MovAB,
654 MovAC,
655 MovAD,
656 MovAE,
657 MovAH,
658 MovAL,
659 MovAM,
660 MovAA,
661 AddB,
662 AddC,
663 AddD,
664 AddE,
665 AddH,
666 AddL,
667 AddM,
668 AddA,
669 AdcB,
670 AdcC,
671 AdcD,
672 AdcE,
673 AdcH,
674 AdcL,
675 AdcM,
676 AdcA,
677 SubB,
678 SubC,
679 SubD,
680 SubE,
681 SubH,
682 SubL,
683 SubM,
684 SubA,
685 SbbB,
686 SbbC,
687 SbbD,
688 SbbE,
689 SbbH,
690 SbbL,
691 SbbM,
692 SbbA,
693 AnaB,
694 AnaC,
695 AnaD,
696 AnaE,
697 AnaH,
698 AnaL,
699 AnaM,
700 AnaA,
701 XraB,
702 XraC,
703 XraD,
704 XraE,
705 XraH,
706 XraL,
707 XraM,
708 XraA,
709 OraB,
710 OraC,
711 OraD,
712 OraE,
713 OraH,
714 OraL,
715 OraM,
716 OraA,
717 CmpB,
718 CmpC,
719 CmpD,
720 CmpE,
721 CmpH,
722 CmpL,
723 CmpM,
724 CmpA,
725 Rnz,
726 PopB,
727 Jnz(u16),
728 Jmp(u16),
729 Cnz(u16),
730 PushB,
731 Adi(u8),
732 Rst0,
733 Rz,
734 Ret,
735 Jz(u16),
736 Cz(u16),
737 Call(u16),
738 Aci(u8),
739 Rst1,
740 Rnc,
741 PopD,
742 Jnc(u16),
743 Out(u8),
744 Cnc(u16),
745 PushD,
746 Sui(u8),
747 Rst2,
748 Rc,
749 Jc(u16),
750 In(u8),
751 Cc(u16),
752 Sbi(u8),
753 Rst3,
754 Rpo,
755 PopH,
756 Jpo(u16),
757 Xthl,
758 Cpo(u16),
759 PushH,
760 Ani(u8),
761 Rst4,
762 Rpe,
763 Pchl,
764 Jpe(u16),
765 Xchg,
766 Cpe(u16),
767 Xri(u8),
768 Rst5,
769 Rp,
770 PopPsw,
771 Jp(u16),
772 Di,
773 Cp(u16),
774 PushPsw,
775 Ori(u8),
776 Rst6,
777 Rm,
778 Sphl,
779 Jm(u16),
780 Ei,
781 Cm(u16),
782 Cpi(u8),
783 Rst7,
784}
785
786impl Opcode {
787 pub fn size(&self) -> usize {
788 match *self {
789 Opcode::Nop => 1,
790 Opcode::LxiB(_, _) => 3,
791 Opcode::StaxB => 1,
792 Opcode::InxB => 1,
793 Opcode::InrB => 1,
794 Opcode::DcrB => 1,
795 Opcode::MviB(_) => 2,
796 Opcode::Rlc => 1,
797 Opcode::DadB => 1,
798 Opcode::LdaxB => 1,
799 Opcode::DcxB => 1,
800 Opcode::InrC => 1,
801 Opcode::DcrC => 1,
802 Opcode::MviC(_) => 2,
803 Opcode::Rrc => 1,
804 Opcode::LxiD(_, _) => 3,
805 Opcode::StaxD => 1,
806 Opcode::InxD => 1,
807 Opcode::InrD => 1,
808 Opcode::DcrD => 1,
809 Opcode::MviD(_) => 2,
810 Opcode::Ral => 1,
811 Opcode::DadD => 1,
812 Opcode::LdaxD => 1,
813 Opcode::DcxD => 1,
814 Opcode::InrE => 1,
815 Opcode::DcrE => 1,
816 Opcode::MviE(_) => 2,
817 Opcode::Rar => 1,
818 Opcode::LxiH(_, _) => 3,
819 Opcode::Shld(_) => 3,
820 Opcode::InxH => 1,
821 Opcode::InrH => 1,
822 Opcode::DcrH => 1,
823 Opcode::MviH(_) => 2,
824 Opcode::Daa => 1,
825 Opcode::DadH => 1,
826 Opcode::Lhld(_) => 3,
827 Opcode::DcxH => 1,
828 Opcode::InrL => 1,
829 Opcode::DcrL => 1,
830 Opcode::MviL(_) => 2,
831 Opcode::Cma => 1,
832 Opcode::LxiSp(_, _) => 3,
833 Opcode::Sta(_) => 3,
834 Opcode::InxSp => 1,
835 Opcode::InrM => 1,
836 Opcode::DcrM => 1,
837 Opcode::MviM(_) => 2,
838 Opcode::Stc => 1,
839 Opcode::DadSp => 1,
840 Opcode::Lda(_) => 3,
841 Opcode::DcxSp => 1,
842 Opcode::InrA => 1,
843 Opcode::DcrA => 1,
844 Opcode::MviA(_) => 2,
845 Opcode::Cmc => 1,
846 Opcode::MovBB => 1,
847 Opcode::MovBC => 1,
848 Opcode::MovBD => 1,
849 Opcode::MovBE => 1,
850 Opcode::MovBH => 1,
851 Opcode::MovBL => 1,
852 Opcode::MovBM => 1,
853 Opcode::MovBA => 1,
854 Opcode::MovCB => 1,
855 Opcode::MovCC => 1,
856 Opcode::MovCD => 1,
857 Opcode::MovCE => 1,
858 Opcode::MovCH => 1,
859 Opcode::MovCL => 1,
860 Opcode::MovCM => 1,
861 Opcode::MovCA => 1,
862 Opcode::MovDB => 1,
863 Opcode::MovDC => 1,
864 Opcode::MovDD => 1,
865 Opcode::MovDE => 1,
866 Opcode::MovDH => 1,
867 Opcode::MovDL => 1,
868 Opcode::MovDM => 1,
869 Opcode::MovDA => 1,
870 Opcode::MovEB => 1,
871 Opcode::MovEC => 1,
872 Opcode::MovED => 1,
873 Opcode::MovEE => 1,
874 Opcode::MovEH => 1,
875 Opcode::MovEL => 1,
876 Opcode::MovEM => 1,
877 Opcode::MovEA => 1,
878 Opcode::MovHB => 1,
879 Opcode::MovHC => 1,
880 Opcode::MovHD => 1,
881 Opcode::MovHE => 1,
882 Opcode::MovHH => 1,
883 Opcode::MovHL => 1,
884 Opcode::MovHM => 1,
885 Opcode::MovHA => 1,
886 Opcode::MovLB => 1,
887 Opcode::MovLC => 1,
888 Opcode::MovLD => 1,
889 Opcode::MovLE => 1,
890 Opcode::MovLH => 1,
891 Opcode::MovLL => 1,
892 Opcode::MovLM => 1,
893 Opcode::MovLA => 1,
894 Opcode::MovMB => 1,
895 Opcode::MovMC => 1,
896 Opcode::MovMD => 1,
897 Opcode::MovME => 1,
898 Opcode::MovMH => 1,
899 Opcode::MovML => 1,
900 Opcode::Hlt => 1,
901 Opcode::MovMA => 1,
902 Opcode::MovAB => 1,
903 Opcode::MovAC => 1,
904 Opcode::MovAD => 1,
905 Opcode::MovAE => 1,
906 Opcode::MovAH => 1,
907 Opcode::MovAL => 1,
908 Opcode::MovAM => 1,
909 Opcode::MovAA => 1,
910 Opcode::AddB => 1,
911 Opcode::AddC => 1,
912 Opcode::AddD => 1,
913 Opcode::AddE => 1,
914 Opcode::AddH => 1,
915 Opcode::AddL => 1,
916 Opcode::AddM => 1,
917 Opcode::AddA => 1,
918 Opcode::AdcB => 1,
919 Opcode::AdcC => 1,
920 Opcode::AdcD => 1,
921 Opcode::AdcE => 1,
922 Opcode::AdcH => 1,
923 Opcode::AdcL => 1,
924 Opcode::AdcM => 1,
925 Opcode::AdcA => 1,
926 Opcode::SubB => 1,
927 Opcode::SubC => 1,
928 Opcode::SubD => 1,
929 Opcode::SubE => 1,
930 Opcode::SubH => 1,
931 Opcode::SubL => 1,
932 Opcode::SubM => 1,
933 Opcode::SubA => 1,
934 Opcode::SbbB => 1,
935 Opcode::SbbC => 1,
936 Opcode::SbbD => 1,
937 Opcode::SbbE => 1,
938 Opcode::SbbH => 1,
939 Opcode::SbbL => 1,
940 Opcode::SbbM => 1,
941 Opcode::SbbA => 1,
942 Opcode::AnaB => 1,
943 Opcode::AnaC => 1,
944 Opcode::AnaD => 1,
945 Opcode::AnaE => 1,
946 Opcode::AnaH => 1,
947 Opcode::AnaL => 1,
948 Opcode::AnaM => 1,
949 Opcode::AnaA => 1,
950 Opcode::XraB => 1,
951 Opcode::XraC => 1,
952 Opcode::XraD => 1,
953 Opcode::XraE => 1,
954 Opcode::XraH => 1,
955 Opcode::XraL => 1,
956 Opcode::XraM => 1,
957 Opcode::XraA => 1,
958 Opcode::OraB => 1,
959 Opcode::OraC => 1,
960 Opcode::OraD => 1,
961 Opcode::OraE => 1,
962 Opcode::OraH => 1,
963 Opcode::OraL => 1,
964 Opcode::OraM => 1,
965 Opcode::OraA => 1,
966 Opcode::CmpB => 1,
967 Opcode::CmpC => 1,
968 Opcode::CmpD => 1,
969 Opcode::CmpE => 1,
970 Opcode::CmpH => 1,
971 Opcode::CmpL => 1,
972 Opcode::CmpM => 1,
973 Opcode::CmpA => 1,
974 Opcode::Rnz => 1,
975 Opcode::PopB => 1,
976 Opcode::Jnz(_) => 3,
977 Opcode::Jmp(_) => 3,
978 Opcode::Cnz(_) => 3,
979 Opcode::PushB => 1,
980 Opcode::Adi(_) => 2,
981 Opcode::Rst0 => 1,
982 Opcode::Rz => 1,
983 Opcode::Ret => 1,
984 Opcode::Jz(_) => 3,
985 Opcode::Cz(_) => 3,
986 Opcode::Call(_) => 3,
987 Opcode::Aci(_) => 2,
988 Opcode::Rst1 => 1,
989 Opcode::Rnc => 1,
990 Opcode::PopD => 1,
991 Opcode::Jnc(_) => 3,
992 Opcode::Out(_) => 2,
993 Opcode::Cnc(_) => 3,
994 Opcode::PushD => 1,
995 Opcode::Sui(_) => 2,
996 Opcode::Rst2 => 1,
997 Opcode::Rc => 1,
998 Opcode::Jc(_) => 3,
999 Opcode::In(_) => 2,
1000 Opcode::Cc(_) => 3,
1001 Opcode::Sbi(_) => 2,
1002 Opcode::Rst3 => 1,
1003 Opcode::Rpo => 1,
1004 Opcode::PopH => 1,
1005 Opcode::Jpo(_) => 3,
1006 Opcode::Xthl => 1,
1007 Opcode::Cpo(_) => 3,
1008 Opcode::PushH => 1,
1009 Opcode::Ani(_) => 2,
1010 Opcode::Rst4 => 1,
1011 Opcode::Rpe => 1,
1012 Opcode::Pchl => 1,
1013 Opcode::Jpe(_) => 3,
1014 Opcode::Xchg => 1,
1015 Opcode::Cpe(_) => 3,
1016 Opcode::Xri(_) => 2,
1017 Opcode::Rst5 => 1,
1018 Opcode::Rp => 1,
1019 Opcode::PopPsw => 1,
1020 Opcode::Jp(_) => 3,
1021 Opcode::Di => 1,
1022 Opcode::Cp(_) => 3,
1023 Opcode::PushPsw => 1,
1024 Opcode::Ori(_) => 2,
1025 Opcode::Rst6 => 1,
1026 Opcode::Rm => 1,
1027 Opcode::Sphl => 1,
1028 Opcode::Jm(_) => 3,
1029 Opcode::Ei => 1,
1030 Opcode::Cm(_) => 3,
1031 Opcode::Cpi(_) => 2,
1032 Opcode::Rst7 => 1,
1033 }
1034 }
1035}