]> git.lizzy.rs Git - plan9front.git/blob - sys/src/games/gb/disasm.c
games/nes: cleanup and resize handling
[plan9front.git] / sys / src / games / gb / disasm.c
1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include <draw.h>
5 #include "dat.h"
6 #include "fns.h"
7
8 static char *opcodes[256] = {
9         [0x00] "NOP",
10         [0x01] "LD BC,%.4x",
11         [0x02] "LD (BC),A",
12         [0x03] "INC BC",
13         [0x04] "INC B",
14         [0x05] "DEC B",
15         [0x06] "LD B,%.2x",
16         [0x07] "RLCA ",
17         [0x08] "LD (%.4x),SP",
18         [0x09] "ADD HL,BC",
19         [0x0A] "LD A,(BC)",
20         [0x0B] "DEC BC",
21         [0x0C] "INC C",
22         [0x0D] "DEC C",
23         [0x0E] "LD C,%.2x",
24         [0x0F] "RRCA ",
25         [0x10] "STOP",
26         [0x11] "LD DE,%.4x",
27         [0x12] "LD (DE),A",
28         [0x13] "INC DE",
29         [0x14] "INC D",
30         [0x15] "DEC D",
31         [0x16] "LD D,%.2x",
32         [0x17] "RLA ",
33         [0x18] "JR %.2x",
34         [0x19] "ADD HL,DE",
35         [0x1A] "LD A,(DE)",
36         [0x1B] "DEC DE",
37         [0x1C] "INC E",
38         [0x1D] "DEC E",
39         [0x1E] "LD E,%.2x",
40         [0x1F] "RRA ",
41         [0x20] "JR NZ,%.2x",
42         [0x21] "LD HL,%.4x",
43         [0x22] "LD (HLI),A",
44         [0x23] "INC HL",
45         [0x24] "INC H",
46         [0x25] "DEC H",
47         [0x26] "LD H,%.2x",
48         [0x27] "DAA ",
49         [0x28] "JR Z,%.2x",
50         [0x29] "ADD HL,HL",
51         [0x2A] "LD A,(HLI)",
52         [0x2B] "DEC HL",
53         [0x2C] "INC L",
54         [0x2D] "DEC L",
55         [0x2E] "LD L,%.2x",
56         [0x2F] "CPL ",
57         [0x30] "JR NC,%.2x",
58         [0x31] "LD SP,%.4x",
59         [0x32] "LD (HLD),A",
60         [0x33] "INC SP",
61         [0x34] "INC (HL)",
62         [0x35] "DEC (HL)",
63         [0x36] "LD (HL),%.2x",
64         [0x37] "SCF ",
65         [0x38] "JR C,%.2x",
66         [0x39] "ADD HL,SP",
67         [0x3A] "LD A,(HLD)",
68         [0x3B] "DEC SP",
69         [0x3C] "INC A",
70         [0x3D] "DEC A",
71         [0x3E] "LD A,%.2x",
72         [0x3F] "CCF ",
73         [0x40] "LD B,B",
74         [0x41] "LD B,C",
75         [0x42] "LD B,D",
76         [0x43] "LD B,E",
77         [0x44] "LD B,H",
78         [0x45] "LD B,L",
79         [0x46] "LD B,(HL)",
80         [0x47] "LD B,A",
81         [0x48] "LD C,B",
82         [0x49] "LD C,C",
83         [0x4A] "LD C,D",
84         [0x4B] "LD C,E",
85         [0x4C] "LD C,H",
86         [0x4D] "LD C,L",
87         [0x4E] "LD C,(HL)",
88         [0x4F] "LD C,A",
89         [0x50] "LD D,B",
90         [0x51] "LD D,C",
91         [0x52] "LD D,D",
92         [0x53] "LD D,E",
93         [0x54] "LD D,H",
94         [0x55] "LD D,L",
95         [0x56] "LD D,(HL)",
96         [0x57] "LD D,A",
97         [0x58] "LD E,B",
98         [0x59] "LD E,C",
99         [0x5A] "LD E,D",
100         [0x5B] "LD E,E",
101         [0x5C] "LD E,H",
102         [0x5D] "LD E,L",
103         [0x5E] "LD E,(HL)",
104         [0x5F] "LD E,A",
105         [0x60] "LD H,B",
106         [0x61] "LD H,C",
107         [0x62] "LD H,D",
108         [0x63] "LD H,E",
109         [0x64] "LD H,H",
110         [0x65] "LD H,L",
111         [0x66] "LD H,(HL)",
112         [0x67] "LD H,A",
113         [0x68] "LD L,B",
114         [0x69] "LD L,C",
115         [0x6A] "LD L,D",
116         [0x6B] "LD L,E",
117         [0x6C] "LD L,H",
118         [0x6D] "LD L,L",
119         [0x6E] "LD L,(HL)",
120         [0x6F] "LD L,A",
121         [0x70] "LD (HL),B",
122         [0x71] "LD (HL),C",
123         [0x72] "LD (HL),D",
124         [0x73] "LD (HL),E",
125         [0x74] "LD (HL),H",
126         [0x75] "LD (HL),L",
127         [0x76] "HALT ",
128         [0x77] "LD (HL),A",
129         [0x78] "LD A,B",
130         [0x79] "LD A,C",
131         [0x7A] "LD A,D",
132         [0x7B] "LD A,E",
133         [0x7C] "LD A,H",
134         [0x7D] "LD A,L",
135         [0x7E] "LD A,(HL)",
136         [0x7F] "LD A,A",
137         [0x80] "ADD A,B",
138         [0x81] "ADD A,C",
139         [0x82] "ADD A,D",
140         [0x83] "ADD A,E",
141         [0x84] "ADD A,H",
142         [0x85] "ADD A,L",
143         [0x86] "ADD A,(HL)",
144         [0x87] "ADD A,A",
145         [0x88] "ADC A,B",
146         [0x89] "ADC A,C",
147         [0x8A] "ADC A,D",
148         [0x8B] "ADC A,E",
149         [0x8C] "ADC A,H",
150         [0x8D] "ADC A,L",
151         [0x8E] "ADC A,(HL)",
152         [0x8F] "ADC A,A",
153         [0x90] "SUB B",
154         [0x91] "SUB C",
155         [0x92] "SUB D",
156         [0x93] "SUB E",
157         [0x94] "SUB H",
158         [0x95] "SUB L",
159         [0x96] "SUB (HL)",
160         [0x97] "SUB A",
161         [0x98] "SBC B",
162         [0x99] "SBC C",
163         [0x9A] "SBC D",
164         [0x9B] "SBC E",
165         [0x9C] "SBC H",
166         [0x9D] "SBC L",
167         [0x9E] "SBC (HL)",
168         [0x9F] "SBC A",
169         [0xA0] "AND B",
170         [0xA1] "AND C",
171         [0xA2] "AND D",
172         [0xA3] "AND E",
173         [0xA4] "AND H",
174         [0xA5] "AND L",
175         [0xA6] "AND (HL)",
176         [0xA7] "AND A",
177         [0xA8] "XOR B",
178         [0xA9] "XOR C",
179         [0xAA] "XOR D",
180         [0xAB] "XOR E",
181         [0xAC] "XOR H",
182         [0xAD] "XOR L",
183         [0xAE] "XOR (HL)",
184         [0xAF] "XOR A",
185         [0xB0] "OR B",
186         [0xB1] "OR C",
187         [0xB2] "OR D",
188         [0xB3] "OR E",
189         [0xB4] "OR H",
190         [0xB5] "OR L",
191         [0xB6] "OR (HL)",
192         [0xB7] "OR A",
193         [0xB8] "CP B",
194         [0xB9] "CP C",
195         [0xBA] "CP D",
196         [0xBB] "CP E",
197         [0xBC] "CP H",
198         [0xBD] "CP L",
199         [0xBE] "CP (HL)",
200         [0xBF] "CP A",
201         [0xC0] "RET NZ",
202         [0xC1] "POP BC",
203         [0xC2] "JP NZ,%.4x",
204         [0xC3] "JP %.4x",
205         [0xC4] "CALL NZ,%.4x",
206         [0xC5] "PUSH BC",
207         [0xC6] "ADD A,%.2x",
208         [0xC7] "RST 00H",
209         [0xC8] "RET Z",
210         [0xC9] "RET ",
211         [0xCA] "JP Z,%.4x",
212         [0xCB] "#CB ",
213         [0xCC] "CALL Z,%.4x",
214         [0xCD] "CALL %.4x",
215         [0xCE] "ADC A,%.2x",
216         [0xCF] "RST 08H",
217         [0xD0] "RET NC",
218         [0xD1] "POP DE",
219         [0xD2] "JP NC,%.4x",
220         [0xD3] "---",
221         [0xD4] "CALL NC,%.4x",
222         [0xD5] "PUSH DE",
223         [0xD6] "SUB %.2x",
224         [0xD7] "RST 10H",
225         [0xD8] "RET C",
226         [0xD9] "RETI",
227         [0xDA] "JP C,%.4x",
228         [0xDB] "---",
229         [0xDC] "CALL C,%.4x",
230         [0xDD] "---",
231         [0xDE] "SBC A,%.2x",
232         [0xDF] "RST 18H",
233         [0xE0] "LD (ff%.2x),A",
234         [0xE1] "POP HL",
235         [0xE2] "LD (C),A",
236         [0xE3] "---",
237         [0xE4] "---",
238         [0xE5] "PUSH HL",
239         [0xE6] "AND %.2x",
240         [0xE7] "RST 20H",
241         [0xE8] "ADD SP,%.2x",
242         [0xE9] "JP (HL)",
243         [0xEA] "LD (%.4x),A",
244         [0xEB] "---",
245         [0xEC] "---",
246         [0xED] "#ED ",
247         [0xEE] "XOR %.2x",
248         [0xEF] "RST 28H",
249         [0xF0] "LD A,(ff%.2x)",
250         [0xF1] "POP AF",
251         [0xF2] "LD A, (C)",
252         [0xF3] "DI ",
253         [0xF4] "---",
254         [0xF5] "PUSH AF",
255         [0xF6] "OR %.2x",
256         [0xF7] "RST 30H",
257         [0xF8] "LDHL SP,%.2x",
258         [0xF9] "LD SP,HL",
259         [0xFA] "LD A,(%.4x)",
260         [0xFB] "EI ",
261         [0xFC] "---",
262         [0xFD] "---",
263         [0xFE] "CP %.2x",
264         [0xFF] "RST 38H",
265 };
266
267 static int operands[256] = {
268         [0x00] 0,
269         [0x01] 2,
270         [0x02] 0,
271         [0x03] 0,
272         [0x04] 0,
273         [0x05] 0,
274         [0x06] 1,
275         [0x07] 0,
276         [0x08] 0,
277         [0x09] 0,
278         [0x0A] 0,
279         [0x0B] 0,
280         [0x0C] 0,
281         [0x0D] 0,
282         [0x0E] 1,
283         [0x0F] 0,
284         [0x10] 0,
285         [0x11] 2,
286         [0x12] 0,
287         [0x13] 0,
288         [0x14] 0,
289         [0x15] 0,
290         [0x16] 1,
291         [0x17] 0,
292         [0x18] 1,
293         [0x19] 0,
294         [0x1A] 0,
295         [0x1B] 0,
296         [0x1C] 0,
297         [0x1D] 0,
298         [0x1E] 1,
299         [0x1F] 0,
300         [0x20] 1,
301         [0x21] 2,
302         [0x22] 0,
303         [0x23] 0,
304         [0x24] 0,
305         [0x25] 0,
306         [0x26] 1,
307         [0x27] 0,
308         [0x28] 1,
309         [0x29] 0,
310         [0x2A] 0,
311         [0x2B] 0,
312         [0x2C] 0,
313         [0x2D] 0,
314         [0x2E] 1,
315         [0x2F] 0,
316         [0x30] 1,
317         [0x31] 2,
318         [0x32] 0,
319         [0x33] 0,
320         [0x34] 0,
321         [0x35] 0,
322         [0x36] 1,
323         [0x37] 0,
324         [0x38] 1,
325         [0x39] 0,
326         [0x3A] 2,
327         [0x3B] 0,
328         [0x3C] 0,
329         [0x3D] 0,
330         [0x3E] 1,
331         [0x3F] 0,
332         [0x40] 0,
333         [0x41] 0,
334         [0x42] 0,
335         [0x43] 0,
336         [0x44] 0,
337         [0x45] 0,
338         [0x46] 0,
339         [0x47] 0,
340         [0x48] 0,
341         [0x49] 0,
342         [0x4A] 0,
343         [0x4B] 0,
344         [0x4C] 0,
345         [0x4D] 0,
346         [0x4E] 0,
347         [0x4F] 0,
348         [0x50] 0,
349         [0x51] 0,
350         [0x52] 0,
351         [0x53] 0,
352         [0x54] 0,
353         [0x55] 0,
354         [0x56] 0,
355         [0x57] 0,
356         [0x58] 0,
357         [0x59] 0,
358         [0x5A] 0,
359         [0x5B] 0,
360         [0x5C] 0,
361         [0x5D] 0,
362         [0x5E] 0,
363         [0x5F] 0,
364         [0x60] 0,
365         [0x61] 0,
366         [0x62] 0,
367         [0x63] 0,
368         [0x64] 0,
369         [0x65] 0,
370         [0x66] 0,
371         [0x67] 0,
372         [0x68] 0,
373         [0x69] 0,
374         [0x6A] 0,
375         [0x6B] 0,
376         [0x6C] 0,
377         [0x6D] 0,
378         [0x6E] 0,
379         [0x6F] 0,
380         [0x70] 0,
381         [0x71] 0,
382         [0x72] 0,
383         [0x73] 0,
384         [0x74] 0,
385         [0x75] 0,
386         [0x76] 0,
387         [0x77] 0,
388         [0x78] 0,
389         [0x79] 0,
390         [0x7A] 0,
391         [0x7B] 0,
392         [0x7C] 0,
393         [0x7D] 0,
394         [0x7E] 0,
395         [0x7F] 0,
396         [0x80] 0,
397         [0x81] 0,
398         [0x82] 0,
399         [0x83] 0,
400         [0x84] 0,
401         [0x85] 0,
402         [0x86] 0,
403         [0x87] 0,
404         [0x88] 0,
405         [0x89] 0,
406         [0x8A] 0,
407         [0x8B] 0,
408         [0x8C] 0,
409         [0x8D] 0,
410         [0x8E] 0,
411         [0x8F] 0,
412         [0x90] 0,
413         [0x91] 0,
414         [0x92] 0,
415         [0x93] 0,
416         [0x94] 0,
417         [0x95] 0,
418         [0x96] 0,
419         [0x97] 0,
420         [0x98] 0,
421         [0x99] 0,
422         [0x9A] 0,
423         [0x9B] 0,
424         [0x9C] 0,
425         [0x9D] 0,
426         [0x9E] 0,
427         [0x9F] 0,
428         [0xA0] 0,
429         [0xA1] 0,
430         [0xA2] 0,
431         [0xA3] 0,
432         [0xA4] 0,
433         [0xA5] 0,
434         [0xA6] 0,
435         [0xA7] 0,
436         [0xA8] 0,
437         [0xA9] 0,
438         [0xAA] 0,
439         [0xAB] 0,
440         [0xAC] 0,
441         [0xAD] 0,
442         [0xAE] 0,
443         [0xAF] 0,
444         [0xB0] 0,
445         [0xB1] 0,
446         [0xB2] 0,
447         [0xB3] 0,
448         [0xB4] 0,
449         [0xB5] 0,
450         [0xB6] 0,
451         [0xB7] 0,
452         [0xB8] 0,
453         [0xB9] 0,
454         [0xBA] 0,
455         [0xBB] 0,
456         [0xBC] 0,
457         [0xBD] 0,
458         [0xBE] 0,
459         [0xBF] 0,
460         [0xC0] 0,
461         [0xC1] 0,
462         [0xC2] 2,
463         [0xC3] 2,
464         [0xC4] 2,
465         [0xC5] 0,
466         [0xC6] 1,
467         [0xC7] 0,
468         [0xC8] 0,
469         [0xC9] 0,
470         [0xCA] 2,
471         [0xCB] 0,
472         [0xCC] 2,
473         [0xCD] 2,
474         [0xCE] 1,
475         [0xCF] 0,
476         [0xD0] 0,
477         [0xD1] 0,
478         [0xD2] 2,
479         [0xD3] 1,
480         [0xD4] 2,
481         [0xD5] 0,
482         [0xD6] 1,
483         [0xD7] 0,
484         [0xD8] 0,
485         [0xD9] 0,
486         [0xDA] 2,
487         [0xDB] 1,
488         [0xDC] 2,
489         [0xDD] 0,
490         [0xDE] 1,
491         [0xDF] 0,
492         [0xE0] 1,
493         [0xE1] 0,
494         [0xE2] 0,
495         [0xE3] 0,
496         [0xE4] 2,
497         [0xE5] 0,
498         [0xE6] 1,
499         [0xE7] 0,
500         [0xE8] 1,
501         [0xE9] 0,
502         [0xEA] 2,
503         [0xEB] 0,
504         [0xEC] 2,
505         [0xED] 0,
506         [0xEE] 1,
507         [0xEF] 0,
508         [0xF0] 1,
509         [0xF1] 0,
510         [0xF2] 0,
511         [0xF3] 0,
512         [0xF4] 2,
513         [0xF5] 0,
514         [0xF6] 1,
515         [0xF7] 0,
516         [0xF8] 1,
517         [0xF9] 0,
518         [0xFA] 2,
519         [0xFB] 0,
520         [0xFC] 2,
521         [0xFD] 0,
522         [0xFE] 1,
523         [0xFF] 0,
524 };
525
526 static char *cbopcodes[256] = {
527         [0x00] "RLC B",
528         [0x01] "RLC C",
529         [0x02] "RLC D",
530         [0x03] "RLC E",
531         [0x04] "RLC H",
532         [0x05] "RLC L",
533         [0x06] "RLC (HL)",
534         [0x07] "RLC A",
535         [0x08] "RRC B",
536         [0x09] "RRC C",
537         [0x0A] "RRC D",
538         [0x0B] "RRC E",
539         [0x0C] "RRC H",
540         [0x0D] "RRC L",
541         [0x0E] "RRC (HL)",
542         [0x0F] "RRC A",
543         [0x10] "RL B",
544         [0x11] "RL C",
545         [0x12] "RL D",
546         [0x13] "RL E",
547         [0x14] "RL H",
548         [0x15] "RL L",
549         [0x16] "RL (HL)",
550         [0x17] "RL A",
551         [0x18] "RR B",
552         [0x19] "RR C",
553         [0x1A] "RR D",
554         [0x1B] "RR E",
555         [0x1C] "RR H",
556         [0x1D] "RR L",
557         [0x1E] "RR (HL)",
558         [0x1F] "RR A",
559         [0x20] "SLA B",
560         [0x21] "SLA C",
561         [0x22] "SLA D",
562         [0x23] "SLA E",
563         [0x24] "SLA H",
564         [0x25] "SLA L",
565         [0x26] "SLA (HL)",
566         [0x27] "SLA A",
567         [0x28] "SRA B",
568         [0x29] "SRA C",
569         [0x2A] "SRA D",
570         [0x2B] "SRA E",
571         [0x2C] "SRA H",
572         [0x2D] "SRA L",
573         [0x2E] "SRA (HL)",
574         [0x2F] "SRA A",
575         [0x30] "SWAP B",
576         [0x31] "SWAP C",
577         [0x32] "SWAP D",
578         [0x33] "SWAP E",
579         [0x34] "SWAP H",
580         [0x35] "SWAP L",
581         [0x36] "SWAP (HL)",
582         [0x37] "SWAP A",
583         [0x38] "SRL B",
584         [0x39] "SRL C",
585         [0x3A] "SRL D",
586         [0x3B] "SRL E",
587         [0x3C] "SRL H",
588         [0x3D] "SRL L",
589         [0x3E] "SRL (HL)",
590         [0x3F] "SRL A",
591         [0x40] "BIT 0,B",
592         [0x41] "BIT 0,C",
593         [0x42] "BIT 0,D",
594         [0x43] "BIT 0,E",
595         [0x44] "BIT 0,H",
596         [0x45] "BIT 0,L",
597         [0x46] "BIT 0,(HL)",
598         [0x47] "BIT 0,A",
599         [0x48] "BIT 1,B",
600         [0x49] "BIT 1,C",
601         [0x4A] "BIT 1,D",
602         [0x4B] "BIT 1,E",
603         [0x4C] "BIT 1,H",
604         [0x4D] "BIT 1,L",
605         [0x4E] "BIT 1,(HL)",
606         [0x4F] "BIT 1,A",
607         [0x50] "BIT 2,B",
608         [0x51] "BIT 2,C",
609         [0x52] "BIT 2,D",
610         [0x53] "BIT 2,E",
611         [0x54] "BIT 2,H",
612         [0x55] "BIT 2,L",
613         [0x56] "BIT 2,(HL)",
614         [0x57] "BIT 2,A",
615         [0x58] "BIT 3,B",
616         [0x59] "BIT 3,C",
617         [0x5A] "BIT 3,D",
618         [0x5B] "BIT 3,E",
619         [0x5C] "BIT 3,H",
620         [0x5D] "BIT 3,L",
621         [0x5E] "BIT 3,(HL)",
622         [0x5F] "BIT 3,A",
623         [0x60] "BIT 4,B",
624         [0x61] "BIT 4,C",
625         [0x62] "BIT 4,D",
626         [0x63] "BIT 4,E",
627         [0x64] "BIT 4,H",
628         [0x65] "BIT 4,L",
629         [0x66] "BIT 4,(HL)",
630         [0x67] "BIT 4,A",
631         [0x68] "BIT 5,B",
632         [0x69] "BIT 5,C",
633         [0x6A] "BIT 5,D",
634         [0x6B] "BIT 5,E",
635         [0x6C] "BIT 5,H",
636         [0x6D] "BIT 5,L",
637         [0x6E] "BIT 5,(HL)",
638         [0x6F] "BIT 5,A",
639         [0x70] "BIT 6,B",
640         [0x71] "BIT 6,C",
641         [0x72] "BIT 6,D",
642         [0x73] "BIT 6,E",
643         [0x74] "BIT 6,H",
644         [0x75] "BIT 6,L",
645         [0x76] "BIT 6,(HL)",
646         [0x77] "BIT 6,A",
647         [0x78] "BIT 7,B",
648         [0x79] "BIT 7,C",
649         [0x7A] "BIT 7,D",
650         [0x7B] "BIT 7,E",
651         [0x7C] "BIT 7,H",
652         [0x7D] "BIT 7,L",
653         [0x7E] "BIT 7,(HL)",
654         [0x7F] "BIT 7,A",
655         [0x80] "RES 0,B",
656         [0x81] "RES 0,C",
657         [0x82] "RES 0,D",
658         [0x83] "RES 0,E",
659         [0x84] "RES 0,H",
660         [0x85] "RES 0,L",
661         [0x86] "RES 0,(HL)",
662         [0x87] "RES 0,A",
663         [0x88] "RES 1,B",
664         [0x89] "RES 1,C",
665         [0x8A] "RES 1,D",
666         [0x8B] "RES 1,E",
667         [0x8C] "RES 1,H",
668         [0x8D] "RES 1,L",
669         [0x8E] "RES 1,(HL)",
670         [0x8F] "RES 1,A",
671         [0x90] "RES 2,B",
672         [0x91] "RES 2,C",
673         [0x92] "RES 2,D",
674         [0x93] "RES 2,E",
675         [0x94] "RES 2,H",
676         [0x95] "RES 2,L",
677         [0x96] "RES 2,(HL)",
678         [0x97] "RES 2,A",
679         [0x98] "RES 3,B",
680         [0x99] "RES 3,C",
681         [0x9A] "RES 3,D",
682         [0x9B] "RES 3,E",
683         [0x9C] "RES 3,H",
684         [0x9D] "RES 3,L",
685         [0x9E] "RES 3,(HL)",
686         [0x9F] "RES 3,A",
687         [0xA0] "RES 4,B",
688         [0xA1] "RES 4,C",
689         [0xA2] "RES 4,D",
690         [0xA3] "RES 4,E",
691         [0xA4] "RES 4,H",
692         [0xA5] "RES 4,L",
693         [0xA6] "RES 4,(HL)",
694         [0xA7] "RES 4,A",
695         [0xA8] "RES 5,B",
696         [0xA9] "RES 5,C",
697         [0xAA] "RES 5,D",
698         [0xAB] "RES 5,E",
699         [0xAC] "RES 5,H",
700         [0xAD] "RES 5,L",
701         [0xAE] "RES 5,(HL)",
702         [0xAF] "RES 5,A",
703         [0xB0] "RES 6,B",
704         [0xB1] "RES 6,C",
705         [0xB2] "RES 6,D",
706         [0xB3] "RES 6,E",
707         [0xB4] "RES 6,H",
708         [0xB5] "RES 6,L",
709         [0xB6] "RES 6,(HL)",
710         [0xB7] "RES 6,A",
711         [0xB8] "RES 7,B",
712         [0xB9] "RES 7,C",
713         [0xBA] "RES 7,D",
714         [0xBB] "RES 7,E",
715         [0xBC] "RES 7,H",
716         [0xBD] "RES 7,L",
717         [0xBE] "RES 7,(HL)",
718         [0xBF] "RES 7,A",
719         [0xC0] "SET 0,B",
720         [0xC1] "SET 0,C",
721         [0xC2] "SET 0,D",
722         [0xC3] "SET 0,E",
723         [0xC4] "SET 0,H",
724         [0xC5] "SET 0,L",
725         [0xC6] "SET 0,(HL)",
726         [0xC7] "SET 0,A",
727         [0xC8] "SET 1,B",
728         [0xC9] "SET 1,C",
729         [0xCA] "SET 1,D",
730         [0xCB] "SET 1,E",
731         [0xCC] "SET 1,H",
732         [0xCD] "SET 1,L",
733         [0xCE] "SET 1,(HL)",
734         [0xCF] "SET 1,A",
735         [0xD0] "SET 2,B",
736         [0xD1] "SET 2,C",
737         [0xD2] "SET 2,D",
738         [0xD3] "SET 2,E",
739         [0xD4] "SET 2,H",
740         [0xD5] "SET 2,L",
741         [0xD6] "SET 2,(HL)",
742         [0xD7] "SET 2,A",
743         [0xD8] "SET 3,B",
744         [0xD9] "SET 3,C",
745         [0xDA] "SET 3,D",
746         [0xDB] "SET 3,E",
747         [0xDC] "SET 3,H",
748         [0xDD] "SET 3,L",
749         [0xDE] "SET 3,(HL)",
750         [0xDF] "SET 3,A",
751         [0xE0] "SET 4,B",
752         [0xE1] "SET 4,C",
753         [0xE2] "SET 4,D",
754         [0xE3] "SET 4,E",
755         [0xE4] "SET 4,H",
756         [0xE5] "SET 4,L",
757         [0xE6] "SET 4,(HL)",
758         [0xE7] "SET 4,A",
759         [0xE8] "SET 5,B",
760         [0xE9] "SET 5,C",
761         [0xEA] "SET 5,D",
762         [0xEB] "SET 5,E",
763         [0xEC] "SET 5,H",
764         [0xED] "SET 5,L",
765         [0xEE] "SET 5,(HL)",
766         [0xEF] "SET 5,A",
767         [0xF0] "SET 6,B",
768         [0xF1] "SET 6,C",
769         [0xF2] "SET 6,D",
770         [0xF3] "SET 6,E",
771         [0xF4] "SET 6,H",
772         [0xF5] "SET 6,L",
773         [0xF6] "SET 6,(HL)",
774         [0xF7] "SET 6,A",
775         [0xF8] "SET 7,B",
776         [0xF9] "SET 7,C",
777         [0xFA] "SET 7,D",
778         [0xFB] "SET 7,E",
779         [0xFC] "SET 7,H",
780         [0xFD] "SET 7,L",
781         [0xFE] "SET 7,(HL)",
782         [0xFF] "SET 7,A",
783 };
784
785 void
786 disasm(u16int addr)
787 {
788         u8int op;
789         int x;
790
791         op = memread(addr);
792         if(op == 0xCB){
793                 op = memread(addr + 1);
794                 print("%s\n", cbopcodes[op]);
795                 return;
796         }
797         switch(operands[op]){
798         case 0:
799                 print(opcodes[op]);
800                 break;
801         case 1:
802                 print(opcodes[op], (int)(memread(addr + 1)));
803                 break;
804         case 2:
805                 x = (uint)memread(addr + 2);
806                 x <<= 8;
807                 x |= (uint)memread(addr + 1);
808                 print(opcodes[op], x);
809         }
810         print("\n");
811 }