intel_8080_kit/
op.rs

1//! `src/op.rs` is automatically generated by `./utils/gen.py` from `utils/opcodes.txt`.
2//! don't modify this file directly, instead run `python3 ./utils/gen.py`.
3
4use 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            // Undocumented ops
511            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}