1 /**
2  * Intel 8080 instruction tables.
3  */
4 module d80.i80;
5 
6 /**
7  * Strings and instruction lengths for Intel 8080.
8  */
9 struct i80 {
10     string s;           /// Instruction name
11     ubyte n;            /// Length of instruction in bytes
12 }
13 
14 /**
15  * Table of Intel 8080 instructions.
16  */
17 immutable i80[] insni80 = [
18     { "nop",       1 },
19     { "lxi\tb, ",  3 },
20     { "stax\tb",   1 },
21     { "inx\tb",    1 },
22     { "inr\tb",    1 },
23     { "dcr",       1 },
24     { "mvi\tb, ",  2 },
25     { "rlc",       1 },
26     { "nop",       1 },
27     { "dad",       1 },
28     { "ldax\tb",   1 },
29     { "dcx\tb",    1 },
30     { "inr\tc",    1 },
31     { "dcr\tc",    1 },
32     { "mvi\tc, ",  2 },
33     { "rrc",       1 },
34     { "nop",       1 },
35     { "lxi\td, ",  3 },
36     { "stax\td",   1 },
37     { "inx\td",    1 },
38     { "inr\td",    1 },
39     { "dcr\td",    1 },
40     { "mvi\td, ",  2 },
41     { "ral",       1 },
42     { "nop",       1 },
43     { "dad\td",    1 },
44     { "ldax\td",   1 },
45     { "dcx\td" ,   1 },
46     { "inr\te",    1 },
47     { "dcr\te",    1 },
48     { "mvi\te, ",  2 },
49     { "rar",       1 },
50     { "nop",       1 },
51     { "lxi\th, ",  3 },
52     { "shld\t",    3 },
53     { "inx\th",    1 },
54     { "inr\th",    1 },
55     { "dcr\th",    1 },
56     { "mvi\th, ",  2 },
57     { "daa",       1 },
58     { "nop",       1 },
59     { "dad\th",    1 },
60     { "lhld\t",    3 },
61     { "dcx\th",    1 },
62     { "inr\tl",    1 },
63     { "dcr\tl",    1 },
64     { "mvi\tl, ",  2 },
65     { "cma",       1 },
66     { "nop",       1 },
67     { "lxi\tsp, ", 3 },
68     { "sta\t",     3 },
69     { "inx\tsp",   1 },
70     { "inr\tm",    1 },
71     { "dcr\tm",    1 },
72     { "mvi\tm, ",  2 },
73     { "stc",       1 },
74     { "nop",       1 },
75     { "dad\tsp",   1 },
76     { "lda\t",     3 },
77     { "dcx\tsp",   1 },
78     { "inr\ta",    1 },
79     { "dcr\ta",    1 },
80     { "mvi\ta, ",  2 },
81     { "cmc",       1 },
82     { "mov\tb, b", 1 },
83     { "mov\tb, c", 1 },
84     { "mov\tb, d", 1 },
85     { "mov\tb, e", 1 },
86     { "mov\tb, h", 1 },
87     { "mov\tb, l", 1 },
88     { "mov\tb, m", 1 },
89     { "mov\tb, a", 1 },
90     { "mov\tc, b", 1 },
91     { "mov\tc, c", 1 },
92     { "mov\tc, d", 1 },
93     { "mov\tc, e", 1 },
94     { "mov\tc, h", 1 },
95     { "mov\tc, l", 1 },
96     { "mov\tc, m", 1 },
97     { "mov\tc, a", 1 },
98     { "mov\td, b", 1 },
99     { "mov\td, c", 1 },
100     { "mov\td, d", 1 },
101     { "mov\td, e", 1 },
102     { "mov\td, h", 1 },
103     { "mov\td, l", 1 },
104     { "mov\td, m", 1 },
105     { "mov\td, a", 1 },
106     { "mov\te, b", 1 },
107     { "mov\te, c", 1 },
108     { "mov\te, d", 1 },
109     { "mov\te, e", 1 },
110     { "mov\te, h", 1 },
111     { "mov\te, l", 1 },
112     { "mov\te, m", 1 },
113     { "mov\te, a", 1 },
114     { "mov\th, b", 1 },
115     { "mov\th, c", 1 },
116     { "mov\th, d", 1 },
117     { "mov\th, e", 1 },
118     { "mov\th, h", 1 },
119     { "mov\th, l", 1 },
120     { "mov\th, m", 1 },
121     { "mov\th, a", 1 },
122     { "mov\tl, b", 1 },
123     { "mov\tl, c", 1 },
124     { "mov\tl, d", 1 },
125     { "mov\tl, e", 1 },
126     { "mov\tl, h", 1 },
127     { "mov\tl, l", 1 },
128     { "mov\tl, m", 1 },
129     { "mov\tl, a", 1 },
130     { "mov\tm, b", 1 },
131     { "mov\tm, c", 1 },
132     { "mov\tm, d", 1 },
133     { "mov\tm, e", 1 },
134     { "mov\tm, h", 1 },
135     { "mov\tm, l", 1 },
136     { "hlt",       1 },
137     { "mov\tm, a", 1 },
138     { "mov\ta, b", 1 },
139     { "mov\ta, c", 1 },
140     { "mov\ta, d", 1 },
141     { "mov\ta, e", 1 },
142     { "mov\ta, h", 1 },
143     { "mov\ta, l", 1 },
144     { "mov\ta, m", 1 },
145     { "mov\ta, a", 1 },
146     { "add\tb",    1 },
147     { "add\tc",    1 },
148     { "add\td",    1 },
149     { "add\te",    1 },
150     { "add\th",    1 },
151     { "add\tl",    1 },
152     { "add\tm",    1 },
153     { "add\ta",    1 },
154     { "adc\tb",    1 },
155     { "adc\tc",    1 },
156     { "adc\td",    1 },
157     { "adc\te",    1 },
158     { "adc\th",    1 },
159     { "adc\tl",    1 },
160     { "adc\tm",    1 },
161     { "adc\ta",    1 },
162     { "sub\tb",    1 },
163     { "sub\tc",    1 },
164     { "sub\td",    1 },
165     { "sub\te",    1 },
166     { "sub\th",    1 },
167     { "sub\tl",    1 },
168     { "sub\tm",    1 },
169     { "sub\ta",    1 },
170     { "sbb\tb",    1 },
171     { "sbb\tc",    1 },
172     { "sbb\td",    1 },
173     { "sbb\te",    1 },
174     { "sbb\th",    1 },
175     { "sbb\tl",    1 },
176     { "sbb\tm",    1 },
177     { "sbb\ta",    1 },
178     { "ana\tb",    1 },
179     { "ana\tc",    1 },
180     { "ana\td",    1 },
181     { "ana\te",    1 },
182     { "ana\th",    1 },
183     { "ana\tl",    1 },
184     { "ana\tm",    1 },
185     { "ana\ta",    1 },
186     { "xra\tb",    1 },
187     { "xra\tc",    1 },
188     { "xra\td",    1 },
189     { "xra\te",    1 },
190     { "xra\th",    1 },
191     { "xra\tl",    1 },
192     { "xra\tm",    1 },
193     { "xra\ta",    1 },
194     { "ora\tb",    1 },
195     { "ora\tc",    1 },
196     { "ora\td",    1 },
197     { "ora\te",    1 },
198     { "ora\th",    1 },
199     { "ora\tl",    1 },
200     { "ora\tm",    1 },
201     { "ora\ta",    1 },
202     { "cmp\tb",    1 },
203     { "cmp\tc",    1 },
204     { "cmp\td",    1 },
205     { "cmp\te",    1 },
206     { "cmp\th",    1 },
207     { "cmp\tl",    1 },
208     { "cmp\tm",    1 },
209     { "cmp\ta",    1 },
210     { "rnz",       1 },
211     { "pop\tb",    1 },
212     { "jnz\t",     3 },
213     { "jmp\t",     3 },
214     { "cnz\t",     3 },
215     { "push\tb",   1 },
216     { "adi\t",     2 },
217     { "rst\t0",    1 },
218     { "rz",        1 },
219     { "ret",       1 },
220     { "jz\t",      3 },
221     { "jmp\t",     3 },
222     { "cz\t",      3 },
223     { "call\t",    3 },
224     { "aci\t",     2 },
225     { "rst\t1",    1 },
226     { "rnc",       1 },
227     { "pop\td",    1 },
228     { "jnc\t",     3 },
229     { "out\t",     2 },
230     { "cnc\t",     3 },
231     { "push\td",   1 },
232     { "sui\t",     2 },
233     { "rst\t2",    1 },
234     { "rc",        1 },
235     { "ret",       1 },
236     { "jc\t",      3 },
237     { "in\t",      2 },
238     { "cc\t",      3 },
239     { "call\t",    3 },
240     { "sbi\t",     2 },
241     { "rst\t3",    1 },
242     { "rpo",       1 },
243     { "pop\th",    1 },
244     { "jpo\t",     3 },
245     { "xthl",      1 },
246     { "cpo\t",     3 },
247     { "push\th",   1 },
248     { "ani\t",     2 },
249     { "rst\t4",    1 },
250     { "rpe",       1 },
251     { "pchl",      1 },
252     { "jpe\t",     3 },
253     { "xchg",      1 },
254     { "cpe\t",     3 },
255     { "call\t",    3 },
256     { "xri\t",     2 },
257     { "rst\t5",    1 },
258     { "rp",        1 },
259     { "pop\tpsw",  1 },
260     { "jp\t",      3 },
261     { "di",        1 },
262     { "cp\t",      3 },
263     { "push\tpsw", 1 },
264     { "ori\t",     2 },
265     { "rst\t6",    1 },
266     { "rm",        1 },
267     { "sphl",      1 },
268     { "jm\t",      3 },
269     { "ei",        1 },
270     { "cm\t",      3 },
271     { "call\t",    3 },
272     { "cpi\t",     2 },
273     { "rst\t7",    1 }
274 ];