Implement 386 instruction table, improve 8086/186/286 instruction table
[multi_emu.git] / cpu_6809.c
1 #include <stdbool.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "cpu_6809.h"
5
6 // tables
7 int cpu_6809_ea_src[0x10][2] = {
8   {CPU_6809_EA_D, CPU_6809_EA_D + 1},
9   {CPU_6809_EA_X, CPU_6809_EA_X + 1},
10   {CPU_6809_EA_Y, CPU_6809_EA_Y + 1},
11   {CPU_6809_EA_U, CPU_6809_EA_U + 1},
12   {CPU_6809_EA_S, CPU_6809_EA_S + 1},
13   {CPU_6809_EA_PC, CPU_6809_EA_PC + 1},
14   {CPU_6809_EA_M1, CPU_6809_EA_M1},
15   {CPU_6809_EA_M1, CPU_6809_EA_M1},
16   {CPU_6809_EA_A, CPU_6809_EA_M1},
17   {CPU_6809_EA_B, CPU_6809_EA_M1},
18   {CPU_6809_EA_CC, CPU_6809_EA_CC},
19   {CPU_6809_EA_DP, CPU_6809_EA_DP},
20   {CPU_6809_EA_M1, CPU_6809_EA_M1},
21   {CPU_6809_EA_M1, CPU_6809_EA_M1},
22   {CPU_6809_EA_M1, CPU_6809_EA_M1},
23   {CPU_6809_EA_M1, CPU_6809_EA_M1},
24 }; 
25
26 int cpu_6809_ea_dest[0x10][2] = {
27   {CPU_6809_EA_D, CPU_6809_EA_D + 1},
28   {CPU_6809_EA_X, CPU_6809_EA_X + 1},
29   {CPU_6809_EA_Y, CPU_6809_EA_Y + 1},
30   {CPU_6809_EA_U, CPU_6809_EA_U + 1},
31   {CPU_6809_EA_S, CPU_6809_EA_S + 1},
32   {CPU_6809_EA_PC, CPU_6809_EA_PC + 1},
33   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
34   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
35   {CPU_6809_EA_A, CPU_6809_EA_SINK},
36   {CPU_6809_EA_B, CPU_6809_EA_SINK},
37   {CPU_6809_EA_CC, CPU_6809_EA_SINK},
38   {CPU_6809_EA_DP, CPU_6809_EA_SINK},
39   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
40   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
41   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
42   {CPU_6809_EA_SINK, CPU_6809_EA_SINK},
43 }; 
44
45 // initialization
46 void cpu_6809_init(
47   struct cpu_6809 *self,
48   int (*read_byte)(void *context, int addr),
49   void *read_byte_context,
50   void (*write_byte)(void *context, int addr, int data),
51   void *write_byte_context
52 ) {
53   memset(self, 0, sizeof(struct cpu_6809));
54   self->regs.byte.m1 = 0xff;
55   self->read_byte = read_byte;
56   self->read_byte_context = read_byte_context;
57   self->write_byte = write_byte;
58   self->write_byte_context = write_byte_context;
59 }
60
61 void cpu_6809_reset(struct cpu_6809 *self) {
62   self->regs.word.pc = cpu_6809_read_word(self, CPU_6809_RESET_VECTOR);
63   self->regs.byte.iflags = 0;
64   self->regs.bit.ff = true;
65   self->regs.bit._if = true;
66 }
67
68 // instruction decode
69 int cpu_6809_addressing_mode(struct cpu_6809 *self) {
70   int ea;
71   switch (cpu_6809_fetch_byte(self)) {
72   case 0x00:
73     ea = (0 + self->regs.word.x) & 0xffff;
74     break;
75   case 0x01:
76     ea = (1 + self->regs.word.x) & 0xffff;
77     break;
78   case 0x02:
79     ea = (2 + self->regs.word.x) & 0xffff;
80     break;
81   case 0x03:
82     ea = (3 + self->regs.word.x) & 0xffff;
83     break;
84   case 0x04:
85     ea = (4 + self->regs.word.x) & 0xffff;
86     break;
87   case 0x05:
88     ea = (5 + self->regs.word.x) & 0xffff;
89     break;
90   case 0x06:
91     ea = (6 + self->regs.word.x) & 0xffff;
92     break;
93   case 0x07:
94     ea = (7 + self->regs.word.x) & 0xffff;
95     break;
96   case 0x08:
97     ea = (8 + self->regs.word.x) & 0xffff;
98     break;
99   case 0x09:
100     ea = (9 + self->regs.word.x) & 0xffff;
101     break;
102   case 0x0a:
103     ea = (10 + self->regs.word.x) & 0xffff;
104     break;
105   case 0x0b:
106     ea = (11 + self->regs.word.x) & 0xffff;
107     break;
108   case 0x0c:
109     ea = (12 + self->regs.word.x) & 0xffff;
110     break;
111   case 0x0d:
112     ea = (13 + self->regs.word.x) & 0xffff;
113     break;
114   case 0x0e:
115     ea = (14 + self->regs.word.x) & 0xffff;
116     break;
117   case 0x0f:
118     ea = (15 + self->regs.word.x) & 0xffff;
119     break;
120   case 0x10:
121     ea = (-16 + self->regs.word.x) & 0xffff;
122     break;
123   case 0x11:
124     ea = (-15 + self->regs.word.x) & 0xffff;
125     break;
126   case 0x12:
127     ea = (-14 + self->regs.word.x) & 0xffff;
128     break;
129   case 0x13:
130     ea = (-13 + self->regs.word.x) & 0xffff;
131     break;
132   case 0x14:
133     ea = (-12 + self->regs.word.x) & 0xffff;
134     break;
135   case 0x15:
136     ea = (-11 + self->regs.word.x) & 0xffff;
137     break;
138   case 0x16:
139     ea = (-10 + self->regs.word.x) & 0xffff;
140     break;
141   case 0x17:
142     ea = (-9 + self->regs.word.x) & 0xffff;
143     break;
144   case 0x18:
145     ea = (-8 + self->regs.word.x) & 0xffff;
146     break;
147   case 0x19:
148     ea = (-7 + self->regs.word.x) & 0xffff;
149     break;
150   case 0x1a:
151     ea = (-6 + self->regs.word.x) & 0xffff;
152     break;
153   case 0x1b:
154     ea = (-5 + self->regs.word.x) & 0xffff;
155     break;
156   case 0x1c:
157     ea = (-4 + self->regs.word.x) & 0xffff;
158     break;
159   case 0x1d:
160     ea = (-3 + self->regs.word.x) & 0xffff;
161     break;
162   case 0x1e:
163     ea = (-2 + self->regs.word.x) & 0xffff;
164     break;
165   case 0x1f:
166     ea = (-1 + self->regs.word.x) & 0xffff;
167     break;
168   case 0x20:
169     ea = (0 + self->regs.word.y) & 0xffff;
170     break;
171   case 0x21:
172     ea = (1 + self->regs.word.y) & 0xffff;
173     break;
174   case 0x22:
175     ea = (2 + self->regs.word.y) & 0xffff;
176     break;
177   case 0x23:
178     ea = (3 + self->regs.word.y) & 0xffff;
179     break;
180   case 0x24:
181     ea = (4 + self->regs.word.y) & 0xffff;
182     break;
183   case 0x25:
184     ea = (5 + self->regs.word.y) & 0xffff;
185     break;
186   case 0x26:
187     ea = (6 + self->regs.word.y) & 0xffff;
188     break;
189   case 0x27:
190     ea = (7 + self->regs.word.y) & 0xffff;
191     break;
192   case 0x28:
193     ea = (8 + self->regs.word.y) & 0xffff;
194     break;
195   case 0x29:
196     ea = (9 + self->regs.word.y) & 0xffff;
197     break;
198   case 0x2a:
199     ea = (10 + self->regs.word.y) & 0xffff;
200     break;
201   case 0x2b:
202     ea = (11 + self->regs.word.y) & 0xffff;
203     break;
204   case 0x2c:
205     ea = (12 + self->regs.word.y) & 0xffff;
206     break;
207   case 0x2d:
208     ea = (13 + self->regs.word.y) & 0xffff;
209     break;
210   case 0x2e:
211     ea = (14 + self->regs.word.y) & 0xffff;
212     break;
213   case 0x2f:
214     ea = (15 + self->regs.word.y) & 0xffff;
215     break;
216   case 0x30:
217     ea = (-16 + self->regs.word.y) & 0xffff;
218     break;
219   case 0x31:
220     ea = (-15 + self->regs.word.y) & 0xffff;
221     break;
222   case 0x32:
223     ea = (-14 + self->regs.word.y) & 0xffff;
224     break;
225   case 0x33:
226     ea = (-13 + self->regs.word.y) & 0xffff;
227     break;
228   case 0x34:
229     ea = (-12 + self->regs.word.y) & 0xffff;
230     break;
231   case 0x35:
232     ea = (-11 + self->regs.word.y) & 0xffff;
233     break;
234   case 0x36:
235     ea = (-10 + self->regs.word.y) & 0xffff;
236     break;
237   case 0x37:
238     ea = (-9 + self->regs.word.y) & 0xffff;
239     break;
240   case 0x38:
241     ea = (-8 + self->regs.word.y) & 0xffff;
242     break;
243   case 0x39:
244     ea = (-7 + self->regs.word.y) & 0xffff;
245     break;
246   case 0x3a:
247     ea = (-6 + self->regs.word.y) & 0xffff;
248     break;
249   case 0x3b:
250     ea = (-5 + self->regs.word.y) & 0xffff;
251     break;
252   case 0x3c:
253     ea = (-4 + self->regs.word.y) & 0xffff;
254     break;
255   case 0x3d:
256     ea = (-3 + self->regs.word.y) & 0xffff;
257     break;
258   case 0x3e:
259     ea = (-2 + self->regs.word.y) & 0xffff;
260     break;
261   case 0x3f:
262     ea = (-1 + self->regs.word.y) & 0xffff;
263     break;
264   case 0x40:
265     ea = (0 + self->regs.word.u) & 0xffff;
266     break;
267   case 0x41:
268     ea = (1 + self->regs.word.u) & 0xffff;
269     break;
270   case 0x42:
271     ea = (2 + self->regs.word.u) & 0xffff;
272     break;
273   case 0x43:
274     ea = (3 + self->regs.word.u) & 0xffff;
275     break;
276   case 0x44:
277     ea = (4 + self->regs.word.u) & 0xffff;
278     break;
279   case 0x45:
280     ea = (5 + self->regs.word.u) & 0xffff;
281     break;
282   case 0x46:
283     ea = (6 + self->regs.word.u) & 0xffff;
284     break;
285   case 0x47:
286     ea = (7 + self->regs.word.u) & 0xffff;
287     break;
288   case 0x48:
289     ea = (8 + self->regs.word.u) & 0xffff;
290     break;
291   case 0x49:
292     ea = (9 + self->regs.word.u) & 0xffff;
293     break;
294   case 0x4a:
295     ea = (10 + self->regs.word.u) & 0xffff;
296     break;
297   case 0x4b:
298     ea = (11 + self->regs.word.u) & 0xffff;
299     break;
300   case 0x4c:
301     ea = (12 + self->regs.word.u) & 0xffff;
302     break;
303   case 0x4d:
304     ea = (13 + self->regs.word.u) & 0xffff;
305     break;
306   case 0x4e:
307     ea = (14 + self->regs.word.u) & 0xffff;
308     break;
309   case 0x4f:
310     ea = (15 + self->regs.word.u) & 0xffff;
311     break;
312   case 0x50:
313     ea = (-16 + self->regs.word.u) & 0xffff;
314     break;
315   case 0x51:
316     ea = (-15 + self->regs.word.u) & 0xffff;
317     break;
318   case 0x52:
319     ea = (-14 + self->regs.word.u) & 0xffff;
320     break;
321   case 0x53:
322     ea = (-13 + self->regs.word.u) & 0xffff;
323     break;
324   case 0x54:
325     ea = (-12 + self->regs.word.u) & 0xffff;
326     break;
327   case 0x55:
328     ea = (-11 + self->regs.word.u) & 0xffff;
329     break;
330   case 0x56:
331     ea = (-10 + self->regs.word.u) & 0xffff;
332     break;
333   case 0x57:
334     ea = (-9 + self->regs.word.u) & 0xffff;
335     break;
336   case 0x58:
337     ea = (-8 + self->regs.word.u) & 0xffff;
338     break;
339   case 0x59:
340     ea = (-7 + self->regs.word.u) & 0xffff;
341     break;
342   case 0x5a:
343     ea = (-6 + self->regs.word.u) & 0xffff;
344     break;
345   case 0x5b:
346     ea = (-5 + self->regs.word.u) & 0xffff;
347     break;
348   case 0x5c:
349     ea = (-4 + self->regs.word.u) & 0xffff;
350     break;
351   case 0x5d:
352     ea = (-3 + self->regs.word.u) & 0xffff;
353     break;
354   case 0x5e:
355     ea = (-2 + self->regs.word.u) & 0xffff;
356     break;
357   case 0x5f:
358     ea = (-1 + self->regs.word.u) & 0xffff;
359     break;
360   case 0x60:
361     ea = (0 + self->regs.word.s) & 0xffff;
362     break;
363   case 0x61:
364     ea = (1 + self->regs.word.s) & 0xffff;
365     break;
366   case 0x62:
367     ea = (2 + self->regs.word.s) & 0xffff;
368     break;
369   case 0x63:
370     ea = (3 + self->regs.word.s) & 0xffff;
371     break;
372   case 0x64:
373     ea = (4 + self->regs.word.s) & 0xffff;
374     break;
375   case 0x65:
376     ea = (5 + self->regs.word.s) & 0xffff;
377     break;
378   case 0x66:
379     ea = (6 + self->regs.word.s) & 0xffff;
380     break;
381   case 0x67:
382     ea = (7 + self->regs.word.s) & 0xffff;
383     break;
384   case 0x68:
385     ea = (8 + self->regs.word.s) & 0xffff;
386     break;
387   case 0x69:
388     ea = (9 + self->regs.word.s) & 0xffff;
389     break;
390   case 0x6a:
391     ea = (10 + self->regs.word.s) & 0xffff;
392     break;
393   case 0x6b:
394     ea = (11 + self->regs.word.s) & 0xffff;
395     break;
396   case 0x6c:
397     ea = (12 + self->regs.word.s) & 0xffff;
398     break;
399   case 0x6d:
400     ea = (13 + self->regs.word.s) & 0xffff;
401     break;
402   case 0x6e:
403     ea = (14 + self->regs.word.s) & 0xffff;
404     break;
405   case 0x6f:
406     ea = (15 + self->regs.word.s) & 0xffff;
407     break;
408   case 0x70:
409     ea = (-16 + self->regs.word.s) & 0xffff;
410     break;
411   case 0x71:
412     ea = (-15 + self->regs.word.s) & 0xffff;
413     break;
414   case 0x72:
415     ea = (-14 + self->regs.word.s) & 0xffff;
416     break;
417   case 0x73:
418     ea = (-13 + self->regs.word.s) & 0xffff;
419     break;
420   case 0x74:
421     ea = (-12 + self->regs.word.s) & 0xffff;
422     break;
423   case 0x75:
424     ea = (-11 + self->regs.word.s) & 0xffff;
425     break;
426   case 0x76:
427     ea = (-10 + self->regs.word.s) & 0xffff;
428     break;
429   case 0x77:
430     ea = (-9 + self->regs.word.s) & 0xffff;
431     break;
432   case 0x78:
433     ea = (-8 + self->regs.word.s) & 0xffff;
434     break;
435   case 0x79:
436     ea = (-7 + self->regs.word.s) & 0xffff;
437     break;
438   case 0x7a:
439     ea = (-6 + self->regs.word.s) & 0xffff;
440     break;
441   case 0x7b:
442     ea = (-5 + self->regs.word.s) & 0xffff;
443     break;
444   case 0x7c:
445     ea = (-4 + self->regs.word.s) & 0xffff;
446     break;
447   case 0x7d:
448     ea = (-3 + self->regs.word.s) & 0xffff;
449     break;
450   case 0x7e:
451     ea = (-2 + self->regs.word.s) & 0xffff;
452     break;
453   case 0x7f:
454     ea = (-1 + self->regs.word.s) & 0xffff;
455     break;
456   case 0x80:
457     ea = self->regs.word.x++;
458     break;
459   case 0x81:
460     ea = self->regs.word.x;
461     self->regs.word.x += 2;
462     break;
463   case 0x82:
464     ea = --self->regs.word.x;
465     break;
466   case 0x83:
467     self->regs.word.x -= 2;
468     ea = self->regs.word.x;
469     break;
470   case 0x84:
471     ea = self->regs.word.x;
472     break;
473   case 0x85:
474     ea = ((int8_t)self->regs.byte.b + self->regs.word.x) & 0xffff;
475     break;
476   case 0x86:
477     ea = ((int8_t)self->regs.byte.a + self->regs.word.x) & 0xffff;
478     break;
479   case 0x87:
480     cpu_6809_illegal_opcode(self);
481   case 0x88:
482     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.x) & 0xffff;
483     break;
484   case 0x89:
485     ea = (cpu_6809_fetch_word(self) + self->regs.word.x) & 0xffff;
486     break;
487   case 0x8a:
488     cpu_6809_illegal_opcode(self);
489   case 0x8b:
490     ea = (self->regs.word.d + self->regs.word.x) & 0xffff;
491     break;
492   case 0x8c:
493     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
494     break;
495   case 0x8d:
496     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
497     break;
498   case 0x8e:
499     cpu_6809_illegal_opcode(self);
500   case 0x8f:
501     cpu_6809_illegal_opcode(self);
502   case 0x90:
503     cpu_6809_illegal_opcode(self);
504   case 0x91:
505     ea = self->regs.word.x;
506     self->regs.word.x += 2;
507     goto indirect;
508   case 0x92:
509     cpu_6809_illegal_opcode(self);
510   case 0x93:
511     self->regs.word.x -= 2;
512     ea = self->regs.word.x;
513     goto indirect;
514   case 0x94:
515     ea = self->regs.word.x;
516     goto indirect;
517   case 0x95:
518     ea = ((int8_t)self->regs.byte.b + self->regs.word.x) & 0xffff;
519     goto indirect;
520   case 0x96:
521     ea = ((int8_t)self->regs.byte.a + self->regs.word.x) & 0xffff;
522     goto indirect;
523   case 0x97:
524     cpu_6809_illegal_opcode(self);
525   case 0x98:
526     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.x) & 0xffff;
527     goto indirect;
528   case 0x99:
529     ea = (cpu_6809_fetch_word(self) + self->regs.word.x) & 0xffff;
530     goto indirect;
531   case 0x9a:
532     cpu_6809_illegal_opcode(self);
533   case 0x9b:
534     ea = (self->regs.word.d + self->regs.word.x) & 0xffff;
535     goto indirect;
536   case 0x9c:
537     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
538     goto indirect;
539   case 0x9d:
540     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
541     goto indirect;
542   case 0x9e:
543     cpu_6809_illegal_opcode(self);
544   case 0x9f:
545     ea = cpu_6809_fetch_word(self);
546     goto indirect;
547   case 0xa0:
548     ea = self->regs.word.y++;
549     break;
550   case 0xa1:
551     ea = self->regs.word.y;
552     self->regs.word.y += 2;
553     break;
554   case 0xa2:
555     ea = --self->regs.word.y;
556     break;
557   case 0xa3:
558     self->regs.word.y -= 2;
559     ea = self->regs.word.y;
560     break;
561   case 0xa4:
562     ea = self->regs.word.y;
563     break;
564   case 0xa5:
565     ea = ((int8_t)self->regs.byte.b + self->regs.word.y) & 0xffff;
566     break;
567   case 0xa6:
568     ea = ((int8_t)self->regs.byte.a + self->regs.word.y) & 0xffff;
569     break;
570   case 0xa7:
571     cpu_6809_illegal_opcode(self);
572   case 0xa8:
573     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.y) & 0xffff;
574     break;
575   case 0xa9:
576     ea = (cpu_6809_fetch_word(self) + self->regs.word.y) & 0xffff;
577     break;
578   case 0xaa:
579     cpu_6809_illegal_opcode(self);
580   case 0xab:
581     ea = (self->regs.word.d + self->regs.word.y) & 0xffff;
582     break;
583   case 0xac:
584     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
585     break;
586   case 0xad:
587     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
588     break;
589   case 0xae:
590     cpu_6809_illegal_opcode(self);
591   case 0xaf:
592     cpu_6809_illegal_opcode(self);
593   case 0xb0:
594     cpu_6809_illegal_opcode(self);
595   case 0xb1:
596     ea = self->regs.word.y;
597     self->regs.word.y += 2;
598     goto indirect;
599   case 0xb2:
600     cpu_6809_illegal_opcode(self);
601   case 0xb3:
602     self->regs.word.y -= 2;
603     ea = self->regs.word.y;
604     goto indirect;
605   case 0xb4:
606     ea = self->regs.word.y;
607     goto indirect;
608   case 0xb5:
609     ea = ((int8_t)self->regs.byte.b + self->regs.word.y) & 0xffff;
610     goto indirect;
611   case 0xb6:
612     ea = ((int8_t)self->regs.byte.a + self->regs.word.y) & 0xffff;
613     goto indirect;
614   case 0xb7:
615     cpu_6809_illegal_opcode(self);
616   case 0xb8:
617     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.y) & 0xffff;
618     goto indirect;
619   case 0xb9:
620     ea = (cpu_6809_fetch_word(self) + self->regs.word.y) & 0xffff;
621     goto indirect;
622   case 0xba:
623     cpu_6809_illegal_opcode(self);
624   case 0xbb:
625     ea = (self->regs.word.d + self->regs.word.y) & 0xffff;
626     goto indirect;
627   case 0xbc:
628     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
629     goto indirect;
630   case 0xbd:
631     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
632     goto indirect;
633   case 0xbe:
634     cpu_6809_illegal_opcode(self);
635   case 0xbf:
636     cpu_6809_illegal_opcode(self);
637   case 0xc0:
638     ea = self->regs.word.u++;
639     break;
640   case 0xc1:
641     ea = self->regs.word.u;
642     self->regs.word.u += 2;
643     break;
644   case 0xc2:
645     ea = --self->regs.word.u;
646     break;
647   case 0xc3:
648     self->regs.word.u -= 2;
649     ea = self->regs.word.u;
650     break;
651   case 0xc4:
652     ea = self->regs.word.u;
653     break;
654   case 0xc5:
655     ea = ((int8_t)self->regs.byte.b + self->regs.word.u) & 0xffff;
656     break;
657   case 0xc6:
658     ea = ((int8_t)self->regs.byte.a + self->regs.word.u) & 0xffff;
659     break;
660   case 0xc7:
661     cpu_6809_illegal_opcode(self);
662   case 0xc8:
663     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.u) & 0xffff;
664     break;
665   case 0xc9:
666     ea = (cpu_6809_fetch_word(self) + self->regs.word.u) & 0xffff;
667     break;
668   case 0xca:
669     cpu_6809_illegal_opcode(self);
670   case 0xcb:
671     ea = (self->regs.word.d + self->regs.word.u) & 0xffff;
672     break;
673   case 0xcc:
674     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
675     break;
676   case 0xcd:
677     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
678     break;
679   case 0xce:
680     cpu_6809_illegal_opcode(self);
681   case 0xcf:
682     cpu_6809_illegal_opcode(self);
683   case 0xd0:
684     cpu_6809_illegal_opcode(self);
685   case 0xd1:
686     ea = self->regs.word.u;
687     self->regs.word.u += 2;
688     goto indirect;
689   case 0xd2:
690     cpu_6809_illegal_opcode(self);
691   case 0xd3:
692     self->regs.word.u -= 2;
693     ea = self->regs.word.u;
694     goto indirect;
695   case 0xd4:
696     ea = self->regs.word.u;
697     goto indirect;
698   case 0xd5:
699     ea = ((int8_t)self->regs.byte.b + self->regs.word.u) & 0xffff;
700     goto indirect;
701   case 0xd6:
702     ea = ((int8_t)self->regs.byte.a + self->regs.word.u) & 0xffff;
703     goto indirect;
704   case 0xd7:
705     cpu_6809_illegal_opcode(self);
706   case 0xd8:
707     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.u) & 0xffff;
708     goto indirect;
709   case 0xd9:
710     ea = (cpu_6809_fetch_word(self) + self->regs.word.u) & 0xffff;
711     goto indirect;
712   case 0xda:
713     cpu_6809_illegal_opcode(self);
714   case 0xdb:
715     ea = (self->regs.word.d + self->regs.word.u) & 0xffff;
716     goto indirect;
717   case 0xdc:
718     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
719     goto indirect;
720   case 0xdd:
721     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
722     goto indirect;
723   case 0xde:
724     cpu_6809_illegal_opcode(self);
725   case 0xdf:
726     cpu_6809_illegal_opcode(self);
727   case 0xe0:
728     ea = self->regs.word.s++;
729     break;
730   case 0xe1:
731     ea = self->regs.word.s;
732     self->regs.word.s += 2;
733     break;
734   case 0xe2:
735     ea = --self->regs.word.s;
736     break;
737   case 0xe3:
738     self->regs.word.s -= 2;
739     ea = self->regs.word.s;
740     break;
741   case 0xe4:
742     ea = self->regs.word.s;
743     break;
744   case 0xe5:
745     ea = ((int8_t)self->regs.byte.b + self->regs.word.s) & 0xffff;
746     break;
747   case 0xe6:
748     ea = ((int8_t)self->regs.byte.a + self->regs.word.s) & 0xffff;
749     break;
750   case 0xe7:
751     cpu_6809_illegal_opcode(self);
752   case 0xe8:
753     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.s) & 0xffff;
754     break;
755   case 0xe9:
756     ea = (cpu_6809_fetch_word(self) + self->regs.word.s) & 0xffff;
757     break;
758   case 0xea:
759     cpu_6809_illegal_opcode(self);
760   case 0xeb:
761     ea = (self->regs.word.d + self->regs.word.s) & 0xffff;
762     break;
763   case 0xec:
764     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
765     break;
766   case 0xed:
767     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
768     break;
769   case 0xee:
770     cpu_6809_illegal_opcode(self);
771   case 0xef:
772     cpu_6809_illegal_opcode(self);
773   case 0xf0:
774     cpu_6809_illegal_opcode(self);
775   case 0xf1:
776     ea = self->regs.word.s;
777     self->regs.word.s += 2;
778     goto indirect;
779   case 0xf2:
780     cpu_6809_illegal_opcode(self);
781   case 0xf3:
782     self->regs.word.s -= 2;
783     ea = self->regs.word.s;
784     goto indirect;
785   case 0xf4:
786     ea = self->regs.word.s;
787     goto indirect;
788   case 0xf5:
789     ea = ((int8_t)self->regs.byte.b + self->regs.word.s) & 0xffff;
790     goto indirect;
791   case 0xf6:
792     ea = ((int8_t)self->regs.byte.a + self->regs.word.s) & 0xffff;
793     goto indirect;
794   case 0xf7:
795     cpu_6809_illegal_opcode(self);
796   case 0xf8:
797     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.s) & 0xffff;
798     goto indirect;
799   case 0xf9:
800     ea = (cpu_6809_fetch_word(self) + self->regs.word.s) & 0xffff;
801     goto indirect;
802   case 0xfa:
803     cpu_6809_illegal_opcode(self);
804   case 0xfb:
805     ea = (self->regs.word.d + self->regs.word.s) & 0xffff;
806     goto indirect;
807   case 0xfc:
808     ea = ((int8_t)cpu_6809_fetch_byte(self) + self->regs.word.pc) & 0xffff;
809     goto indirect;
810   case 0xfd:
811     ea = (cpu_6809_fetch_word(self) + self->regs.word.pc) & 0xffff;
812   indirect:
813     ea = cpu_6809_read_word(self, ea);
814     break;
815   case 0xfe:
816     cpu_6809_illegal_opcode(self);
817   case 0xff:
818     cpu_6809_illegal_opcode(self);
819   }
820   return ea;
821 }
822
823 void cpu_6809_execute(struct cpu_6809 *self) {
824   if (self->regs.bit.nmi_pending) {
825     self->regs.bit.nmi_pending = false;
826     if (!self->regs.bit.wai_flag)
827       cpu_6809_cwai(self, 0);
828     self->regs.bit.wai_flag = false;
829     self->regs.word.pc = cpu_6809_read_word(self, CPU_6809_NMI_VECTOR);
830     self->regs.bit._if = true;
831     return;
832   }
833
834   if (self->regs.bit.irq_pending && !self->regs.bit._if) {
835     self->regs.bit.irq_pending = false;
836     if (!self->regs.bit.wai_flag)
837       cpu_6809_cwai(self, 0);
838     self->regs.bit.wai_flag = false;
839     self->regs.word.pc = cpu_6809_read_word(self, CPU_6809_IRQ_VECTOR);
840     self->regs.bit._if = true;
841     return;
842   }
843
844   if (self->regs.bit.wai_flag) {
845     ++self->cycles;
846     return;
847   }
848
849   switch (cpu_6809_fetch_byte(self)) {
850   case 0x00:
851     cpu_6809_neg(self, cpu_6809_ea_direct(self));
852     break;
853   case 0x01:
854     cpu_6809_illegal_opcode(self);
855     break;
856   case 0x02:
857     cpu_6809_illegal_opcode(self);
858     break;
859   case 0x03:
860     cpu_6809_com(self, cpu_6809_ea_direct(self));
861     break;
862   case 0x04:
863     cpu_6809_lsr(self, cpu_6809_ea_direct(self));
864     break;
865   case 0x05:
866     cpu_6809_illegal_opcode(self);
867     break;
868   case 0x06:
869     cpu_6809_ror(self, cpu_6809_ea_direct(self));
870     break;
871   case 0x07:
872     cpu_6809_asr(self, cpu_6809_ea_direct(self));
873     break;
874   case 0x08:
875     cpu_6809_asl(self, cpu_6809_ea_direct(self));
876     break;
877   case 0x09:
878     cpu_6809_rol(self, cpu_6809_ea_direct(self));
879     break;
880   case 0x0a:
881     cpu_6809_dec_byte(self, cpu_6809_ea_direct(self));
882     break;
883   case 0x0b:
884     cpu_6809_illegal_opcode(self);
885     break;
886   case 0x0c:
887     cpu_6809_inc_byte(self, cpu_6809_ea_direct(self));
888     break;
889   case 0x0d:
890     cpu_6809_tst(self, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
891     break;
892   case 0x0e:
893     cpu_6809_jmp(self, cpu_6809_ea_direct(self));
894     break;
895   case 0x0f:
896     cpu_6809_clr(self, cpu_6809_ea_direct(self));
897     break;
898   case 0x10:
899     cpu_6809_execute_10(self);
900     break;
901   case 0x11:
902     cpu_6809_execute_11(self);
903     break;
904   case 0x12:
905     cpu_6809_nop(self);
906     break;
907   case 0x13:
908     cpu_6809_sync(self);
909     break;
910   case 0x14:
911     cpu_6809_illegal_opcode(self);
912     break;
913   case 0x15:
914     cpu_6809_illegal_opcode(self);
915     break;
916   case 0x16:
917     cpu_6809_lbra(self, true, cpu_6809_ea_long_relative(self));
918     break;
919   case 0x17:
920     cpu_6809_lbsr(self, cpu_6809_ea_long_relative(self));
921     break;
922   case 0x18:
923     cpu_6809_illegal_opcode(self);
924     break;
925   case 0x19:
926     cpu_6809_daa(self);
927     break;
928   case 0x1a:
929     cpu_6809_orcc(self, cpu_6809_fetch_byte(self));
930     break;
931   case 0x1b:
932     cpu_6809_illegal_opcode(self);
933     break;
934   case 0x1c:
935     cpu_6809_andcc(self, cpu_6809_fetch_byte(self));
936     break;
937   case 0x1d:
938     cpu_6809_sex(self);
939     break;
940   case 0x1e:
941     cpu_6809_exg(self, cpu_6809_fetch_byte(self));
942     break;
943   case 0x1f:
944     cpu_6809_tfr(self, cpu_6809_fetch_byte(self));
945     break;
946   case 0x20:
947     cpu_6809_bra(self, true, cpu_6809_ea_relative(self));
948     break;
949   case 0x21:
950     cpu_6809_bra(self, false, cpu_6809_ea_relative(self));
951     break;
952   case 0x22:
953     cpu_6809_bra(self, !self->regs.bit.cf && !self->regs.bit.zf, cpu_6809_ea_relative(self));
954     break;
955   case 0x23:
956     cpu_6809_bra(self, self->regs.bit.cf || self->regs.bit.zf, cpu_6809_ea_relative(self));
957     break;
958   case 0x24:
959     cpu_6809_bra(self, !self->regs.bit.cf, cpu_6809_ea_relative(self));
960     break;
961   case 0x25:
962     cpu_6809_bra(self, self->regs.bit.cf, cpu_6809_ea_relative(self));
963     break;
964   case 0x26:
965     cpu_6809_bra(self, !self->regs.bit.zf, cpu_6809_ea_relative(self));
966     break;
967   case 0x27:
968     cpu_6809_bra(self, self->regs.bit.zf, cpu_6809_ea_relative(self));
969     break;
970   case 0x28:
971     cpu_6809_bra(self, !self->regs.bit.vf, cpu_6809_ea_relative(self));
972     break;
973   case 0x29:
974     cpu_6809_bra(self, self->regs.bit.vf, cpu_6809_ea_relative(self));
975     break;
976   case 0x2a:
977     cpu_6809_bra(self, !self->regs.bit.nf, cpu_6809_ea_relative(self));
978     break;
979   case 0x2b:
980     cpu_6809_bra(self, self->regs.bit.nf, cpu_6809_ea_relative(self));
981     break;
982   case 0x2c:
983     cpu_6809_bra(self, !self->regs.bit.nf && !self->regs.bit.vf, cpu_6809_ea_relative(self));
984     break;
985   case 0x2d:
986     cpu_6809_bra(self, self->regs.bit.nf || self->regs.bit.vf, cpu_6809_ea_relative(self));
987     break;
988   case 0x2e:
989     cpu_6809_bra(self, !self->regs.bit.nf && !self->regs.bit.vf && !self->regs.bit.zf, cpu_6809_ea_relative(self));
990     break;
991   case 0x2f:
992     cpu_6809_bra(self, self->regs.bit.nf || self->regs.bit.vf || self->regs.bit.zf, cpu_6809_ea_relative(self));
993     break;
994   case 0x30:
995     cpu_6809_lea_zf(self, CPU_6809_EA_X, cpu_6809_addressing_mode(self));
996     break;
997   case 0x31:
998     cpu_6809_lea_zf(self, CPU_6809_EA_Y, cpu_6809_addressing_mode(self));
999     break;
1000   case 0x32:
1001     cpu_6809_lea(self, CPU_6809_EA_S, cpu_6809_addressing_mode(self));
1002     break;
1003   case 0x33:
1004     cpu_6809_lea(self, CPU_6809_EA_U, cpu_6809_addressing_mode(self));
1005     break;
1006   case 0x34:
1007     cpu_6809_psh(self, CPU_6809_EA_S, cpu_6809_fetch_byte(self));
1008     break;
1009   case 0x35:
1010     cpu_6809_pul(self, CPU_6809_EA_S, cpu_6809_fetch_byte(self));
1011     break;
1012   case 0x36:
1013     cpu_6809_psh(self, CPU_6809_EA_U, cpu_6809_fetch_byte(self));
1014     break;
1015   case 0x37:
1016     cpu_6809_pul(self, CPU_6809_EA_U, cpu_6809_fetch_byte(self));
1017     break;
1018   case 0x38:
1019     cpu_6809_illegal_opcode(self);
1020     break;
1021   case 0x39:
1022     cpu_6809_rts(self);
1023     break;
1024   case 0x3a:
1025     cpu_6809_abx(self);
1026     break;
1027   case 0x3b:
1028     cpu_6809_rti(self);
1029     break;
1030   case 0x3c:
1031     cpu_6809_cwai(self, cpu_6809_fetch_byte(self));
1032     break;
1033   case 0x3d:
1034     cpu_6809_mul(self);
1035     break;
1036   case 0x3e:
1037     cpu_6809_reset(self);
1038     break;
1039   case 0x3f:
1040     cpu_6809_swi(self);
1041     break;
1042   case 0x40:
1043     cpu_6809_neg(self, CPU_6809_EA_A);
1044     break;
1045   case 0x41:
1046     cpu_6809_illegal_opcode(self);
1047     break;
1048   case 0x42:
1049     cpu_6809_illegal_opcode(self);
1050     break;
1051   case 0x43:
1052     cpu_6809_com(self, CPU_6809_EA_A);
1053     break;
1054   case 0x44:
1055     cpu_6809_lsr(self, CPU_6809_EA_A);
1056     break;
1057   case 0x45:
1058     cpu_6809_illegal_opcode(self);
1059     break;
1060   case 0x46:
1061     cpu_6809_ror(self, CPU_6809_EA_A);
1062     break;
1063   case 0x47:
1064     cpu_6809_asr(self, CPU_6809_EA_A);
1065     break;
1066   case 0x48:
1067     cpu_6809_asl(self, CPU_6809_EA_A);
1068     break;
1069   case 0x49:
1070     cpu_6809_rol(self, CPU_6809_EA_A);
1071     break;
1072   case 0x4a:
1073     cpu_6809_dec_byte(self, CPU_6809_EA_A);
1074     break;
1075   case 0x4b:
1076     cpu_6809_illegal_opcode(self);
1077     break;
1078   case 0x4c:
1079     cpu_6809_inc_byte(self, CPU_6809_EA_A);
1080     break;
1081   case 0x4d:
1082     cpu_6809_tst(self, self->regs.byte.a);
1083     break;
1084   case 0x4e:
1085     cpu_6809_illegal_opcode(self);
1086     break;
1087   case 0x4f:
1088     cpu_6809_clr(self, CPU_6809_EA_A);
1089     break;
1090   case 0x50:
1091     cpu_6809_neg(self, CPU_6809_EA_B);
1092     break;
1093   case 0x51:
1094     cpu_6809_illegal_opcode(self);
1095     break;
1096   case 0x52:
1097     cpu_6809_illegal_opcode(self);
1098     break;
1099   case 0x53:
1100     cpu_6809_com(self, CPU_6809_EA_B);
1101     break;
1102   case 0x54:
1103     cpu_6809_lsr(self, CPU_6809_EA_B);
1104     break;
1105   case 0x55:
1106     cpu_6809_illegal_opcode(self);
1107     break;
1108   case 0x56:
1109     cpu_6809_ror(self, CPU_6809_EA_B);
1110     break;
1111   case 0x57:
1112     cpu_6809_asr(self, CPU_6809_EA_B);
1113     break;
1114   case 0x58:
1115     cpu_6809_asl(self, CPU_6809_EA_B);
1116     break;
1117   case 0x59:
1118     cpu_6809_rol(self, CPU_6809_EA_B);
1119     break;
1120   case 0x5a:
1121     cpu_6809_dec_byte(self, CPU_6809_EA_B);
1122     break;
1123   case 0x5b:
1124     cpu_6809_illegal_opcode(self);
1125     break;
1126   case 0x5c:
1127     cpu_6809_inc_byte(self, CPU_6809_EA_B);
1128     break;
1129   case 0x5d:
1130     cpu_6809_tst(self, self->regs.byte.b);
1131     break;
1132   case 0x5e:
1133     cpu_6809_illegal_opcode(self);
1134     break;
1135   case 0x5f:
1136     cpu_6809_clr(self, CPU_6809_EA_B);
1137     break;
1138   case 0x60:
1139     cpu_6809_neg(self, cpu_6809_addressing_mode(self));
1140     break;
1141   case 0x61:
1142     cpu_6809_illegal_opcode(self);
1143     break;
1144   case 0x62:
1145     cpu_6809_illegal_opcode(self);
1146     break;
1147   case 0x63:
1148     cpu_6809_com(self, cpu_6809_addressing_mode(self));
1149     break;
1150   case 0x64:
1151     cpu_6809_lsr(self, cpu_6809_addressing_mode(self));
1152     break;
1153   case 0x65:
1154     cpu_6809_illegal_opcode(self);
1155     break;
1156   case 0x66:
1157     cpu_6809_ror(self, cpu_6809_addressing_mode(self));
1158     break;
1159   case 0x67:
1160     cpu_6809_asr(self, cpu_6809_addressing_mode(self));
1161     break;
1162   case 0x68:
1163     cpu_6809_asl(self, cpu_6809_addressing_mode(self));
1164     break;
1165   case 0x69:
1166     cpu_6809_rol(self, cpu_6809_addressing_mode(self));
1167     break;
1168   case 0x6a:
1169     cpu_6809_dec_byte(self, cpu_6809_addressing_mode(self));
1170     break;
1171   case 0x6b:
1172     cpu_6809_illegal_opcode(self);
1173     break;
1174   case 0x6c:
1175     cpu_6809_inc_byte(self, cpu_6809_addressing_mode(self));
1176     break;
1177   case 0x6d:
1178     cpu_6809_tst(self, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1179     break;
1180   case 0x6e:
1181     cpu_6809_jmp(self, cpu_6809_addressing_mode(self));
1182     break;
1183   case 0x6f:
1184     cpu_6809_clr(self, cpu_6809_addressing_mode(self));
1185     break;
1186   case 0x70:
1187     cpu_6809_neg(self, cpu_6809_ea_extended(self));
1188     break;
1189   case 0x71:
1190     cpu_6809_illegal_opcode(self);
1191     break;
1192   case 0x72:
1193     cpu_6809_illegal_opcode(self);
1194     break;
1195   case 0x73:
1196     cpu_6809_com(self, cpu_6809_ea_extended(self));
1197     break;
1198   case 0x74:
1199     cpu_6809_lsr(self, cpu_6809_ea_extended(self));
1200     break;
1201   case 0x75:
1202     cpu_6809_illegal_opcode(self);
1203     break;
1204   case 0x76:
1205     cpu_6809_ror(self, cpu_6809_ea_extended(self));
1206     break;
1207   case 0x77:
1208     cpu_6809_asr(self, cpu_6809_ea_extended(self));
1209     break;
1210   case 0x78:
1211     cpu_6809_asl(self, cpu_6809_ea_extended(self));
1212     break;
1213   case 0x79:
1214     cpu_6809_rol(self, cpu_6809_ea_extended(self));
1215     break;
1216   case 0x7a:
1217     cpu_6809_dec_byte(self, cpu_6809_ea_extended(self));
1218     break;
1219   case 0x7b:
1220     cpu_6809_illegal_opcode(self);
1221     break;
1222   case 0x7c:
1223     cpu_6809_inc_byte(self, cpu_6809_ea_extended(self));
1224     break;
1225   case 0x7d:
1226     cpu_6809_tst(self, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1227     break;
1228   case 0x7e:
1229     cpu_6809_jmp(self, cpu_6809_ea_extended(self));
1230     break;
1231   case 0x7f:
1232     cpu_6809_clr(self, cpu_6809_ea_extended(self));
1233     break;
1234   case 0x80:
1235     cpu_6809_sub_byte(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1236     break;
1237   case 0x81:
1238     cpu_6809_cmp_byte(self, self->regs.byte.a, cpu_6809_fetch_byte(self));
1239     break;
1240   case 0x82:
1241     cpu_6809_sbc(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1242     break;
1243   case 0x83:
1244     cpu_6809_sub_word(self, CPU_6809_EA_D, cpu_6809_fetch_word(self));
1245     break;
1246   case 0x84:
1247     cpu_6809_and(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1248     break;
1249   case 0x85:
1250     cpu_6809_bit(self, self->regs.byte.a, cpu_6809_fetch_byte(self));
1251     break;
1252   case 0x86:
1253     cpu_6809_ld_byte(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1254     break;
1255   case 0x87:
1256     cpu_6809_illegal_opcode(self);
1257     break;
1258   case 0x88:
1259     cpu_6809_eor(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1260     break;
1261   case 0x89:
1262     cpu_6809_adc(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1263     break;
1264   case 0x8a:
1265     cpu_6809_or(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1266     break;
1267   case 0x8b:
1268     cpu_6809_add_byte(self, CPU_6809_EA_A, cpu_6809_fetch_byte(self));
1269     break;
1270   case 0x8c:
1271     cpu_6809_cmp_word(self, self->regs.word.x, cpu_6809_fetch_word(self));
1272     break;
1273   case 0x8d:
1274     cpu_6809_bsr(self, cpu_6809_ea_relative(self));
1275     break;
1276   case 0x8e:
1277     cpu_6809_ld_word(self, CPU_6809_EA_X, cpu_6809_fetch_word(self));
1278     break;
1279   case 0x8f:
1280     cpu_6809_illegal_opcode(self);
1281     break;
1282   case 0x90:
1283     cpu_6809_sub_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1284     break;
1285   case 0x91:
1286     cpu_6809_cmp_byte(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1287     break;
1288   case 0x92:
1289     cpu_6809_sbc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1290     break;
1291   case 0x93:
1292     cpu_6809_sub_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1293     break;
1294   case 0x94:
1295     cpu_6809_and(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1296     break;
1297   case 0x95:
1298     cpu_6809_bit(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1299     break;
1300   case 0x96:
1301     cpu_6809_ld_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1302     break;
1303   case 0x97:
1304     cpu_6809_st_byte(self, self->regs.byte.a, cpu_6809_ea_direct(self));
1305     break;
1306   case 0x98:
1307     cpu_6809_eor(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1308     break;
1309   case 0x99:
1310     cpu_6809_adc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1311     break;
1312   case 0x9a:
1313     cpu_6809_or(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1314     break;
1315   case 0x9b:
1316     cpu_6809_add_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1317     break;
1318   case 0x9c:
1319     cpu_6809_cmp_word(self, self->regs.word.x, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1320     break;
1321   case 0x9d:
1322     cpu_6809_jsr(self, cpu_6809_ea_direct(self));
1323     break;
1324   case 0x9e:
1325     cpu_6809_ld_word(self, CPU_6809_EA_X, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1326     break;
1327   case 0x9f:
1328     cpu_6809_st_word(self, self->regs.word.x, cpu_6809_ea_direct(self));
1329     break;
1330   case 0xa0:
1331     cpu_6809_sub_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1332     break;
1333   case 0xa1:
1334     cpu_6809_cmp_byte(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1335     break;
1336   case 0xa2:
1337     cpu_6809_sbc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1338     break;
1339   case 0xa3:
1340     cpu_6809_sub_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1341     break;
1342   case 0xa4:
1343     cpu_6809_and(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1344     break;
1345   case 0xa5:
1346     cpu_6809_bit(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1347     break;
1348   case 0xa6:
1349     cpu_6809_ld_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1350     break;
1351   case 0xa7:
1352     cpu_6809_st_byte(self, self->regs.byte.a, cpu_6809_addressing_mode(self));
1353     break;
1354   case 0xa8:
1355     cpu_6809_eor(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1356     break;
1357   case 0xa9:
1358     cpu_6809_adc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1359     break;
1360   case 0xaa:
1361     cpu_6809_or(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1362     break;
1363   case 0xab:
1364     cpu_6809_add_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1365     break;
1366   case 0xac:
1367     cpu_6809_cmp_word(self, self->regs.word.x, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1368     break;
1369   case 0xad:
1370     cpu_6809_jsr(self, cpu_6809_addressing_mode(self));
1371     break;
1372   case 0xae:
1373     cpu_6809_ld_word(self, CPU_6809_EA_X, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1374     break;
1375   case 0xaf:
1376     cpu_6809_st_word(self, self->regs.word.x, cpu_6809_addressing_mode(self));
1377     break;
1378   case 0xb0:
1379     cpu_6809_sub_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1380     break;
1381   case 0xb1:
1382     cpu_6809_cmp_byte(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1383     break;
1384   case 0xb2:
1385     cpu_6809_sbc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1386     break;
1387   case 0xb3:
1388     cpu_6809_sub_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1389     break;
1390   case 0xb4:
1391     cpu_6809_and(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1392     break;
1393   case 0xb5:
1394     cpu_6809_bit(self, self->regs.byte.a, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1395     break;
1396   case 0xb6:
1397     cpu_6809_ld_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1398     break;
1399   case 0xb7:
1400     cpu_6809_st_byte(self, self->regs.byte.a, cpu_6809_ea_extended(self));
1401     break;
1402   case 0xb8:
1403     cpu_6809_eor(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1404     break;
1405   case 0xb9:
1406     cpu_6809_adc(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1407     break;
1408   case 0xba:
1409     cpu_6809_or(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1410     break;
1411   case 0xbb:
1412     cpu_6809_add_byte(self, CPU_6809_EA_A, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1413     break;
1414   case 0xbc:
1415     cpu_6809_cmp_word(self, self->regs.word.x, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1416     break;
1417   case 0xbd:
1418     cpu_6809_jsr(self, cpu_6809_ea_extended(self));
1419     break;
1420   case 0xbe:
1421     cpu_6809_ld_word(self, CPU_6809_EA_X, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1422     break;
1423   case 0xbf:
1424     cpu_6809_st_word(self, self->regs.word.x, cpu_6809_ea_extended(self));
1425     break;
1426   case 0xc0:
1427     cpu_6809_sub_byte(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1428     break;
1429   case 0xc1:
1430     cpu_6809_cmp_byte(self, self->regs.byte.b, cpu_6809_fetch_byte(self));
1431     break;
1432   case 0xc2:
1433     cpu_6809_sbc(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1434     break;
1435   case 0xc3:
1436     cpu_6809_add_word(self, CPU_6809_EA_D, cpu_6809_fetch_word(self));
1437     break;
1438   case 0xc4:
1439     cpu_6809_and(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1440     break;
1441   case 0xc5:
1442     cpu_6809_bit(self, self->regs.byte.b, cpu_6809_fetch_byte(self));
1443     break;
1444   case 0xc6:
1445     cpu_6809_ld_byte(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1446     break;
1447   case 0xc7:
1448     cpu_6809_illegal_opcode(self);
1449     break;
1450   case 0xc8:
1451     cpu_6809_eor(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1452     break;
1453   case 0xc9:
1454     cpu_6809_adc(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1455     break;
1456   case 0xca:
1457     cpu_6809_or(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1458     break;
1459   case 0xcb:
1460     cpu_6809_add_byte(self, CPU_6809_EA_B, cpu_6809_fetch_byte(self));
1461     break;
1462   case 0xcc:
1463     cpu_6809_ld_word(self, CPU_6809_EA_D, cpu_6809_fetch_word(self));
1464     break;
1465   case 0xcd:
1466     cpu_6809_illegal_opcode(self);
1467     break;
1468   case 0xce:
1469     cpu_6809_ld_word(self, CPU_6809_EA_U, cpu_6809_fetch_word(self));
1470     break;
1471   case 0xcf:
1472     cpu_6809_illegal_opcode(self);
1473     break;
1474   case 0xd0:
1475     cpu_6809_sub_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1476     break;
1477   case 0xd1:
1478     cpu_6809_cmp_byte(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1479     break;
1480   case 0xd2:
1481     cpu_6809_sbc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1482     break;
1483   case 0xd3:
1484     cpu_6809_add_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1485     break;
1486   case 0xd4:
1487     cpu_6809_and(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1488     break;
1489   case 0xd5:
1490     cpu_6809_bit(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1491     break;
1492   case 0xd6:
1493     cpu_6809_ld_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1494     break;
1495   case 0xd7:
1496     cpu_6809_st_byte(self, self->regs.byte.b, cpu_6809_ea_direct(self));
1497     break;
1498   case 0xd8:
1499     cpu_6809_eor(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1500     break;
1501   case 0xd9:
1502     cpu_6809_adc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1503     break;
1504   case 0xda:
1505     cpu_6809_or(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1506     break;
1507   case 0xdb:
1508     cpu_6809_add_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_direct(self)));
1509     break;
1510   case 0xdc:
1511     cpu_6809_ld_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1512     break;
1513   case 0xdd:
1514     cpu_6809_st_word(self, self->regs.word.d, cpu_6809_ea_direct(self));
1515     break;
1516   case 0xde:
1517     cpu_6809_ld_word(self, CPU_6809_EA_U, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
1518     break;
1519   case 0xdf:
1520     cpu_6809_st_word(self, self->regs.word.u, cpu_6809_ea_direct(self));
1521     break;
1522   case 0xe0:
1523     cpu_6809_sub_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1524     break;
1525   case 0xe1:
1526     cpu_6809_cmp_byte(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1527     break;
1528   case 0xe2:
1529     cpu_6809_sbc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1530     break;
1531   case 0xe3:
1532     cpu_6809_add_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1533     break;
1534   case 0xe4:
1535     cpu_6809_and(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1536     break;
1537   case 0xe5:
1538     cpu_6809_bit(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1539     break;
1540   case 0xe6:
1541     cpu_6809_ld_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1542     break;
1543   case 0xe7:
1544     cpu_6809_st_byte(self, self->regs.byte.b, cpu_6809_addressing_mode(self));
1545     break;
1546   case 0xe8:
1547     cpu_6809_eor(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1548     break;
1549   case 0xe9:
1550     cpu_6809_adc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1551     break;
1552   case 0xea:
1553     cpu_6809_or(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1554     break;
1555   case 0xeb:
1556     cpu_6809_add_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_addressing_mode(self)));
1557     break;
1558   case 0xec:
1559     cpu_6809_ld_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1560     break;
1561   case 0xed:
1562     cpu_6809_st_word(self, self->regs.word.d, cpu_6809_addressing_mode(self));
1563     break;
1564   case 0xee:
1565     cpu_6809_ld_word(self, CPU_6809_EA_U, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
1566     break;
1567   case 0xef:
1568     cpu_6809_st_word(self, self->regs.word.u, cpu_6809_addressing_mode(self));
1569     break;
1570   case 0xf0:
1571     cpu_6809_sub_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1572     break;
1573   case 0xf1:
1574     cpu_6809_cmp_byte(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1575     break;
1576   case 0xf2:
1577     cpu_6809_sbc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1578     break;
1579   case 0xf3:
1580     cpu_6809_add_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1581     break;
1582   case 0xf4:
1583     cpu_6809_and(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1584     break;
1585   case 0xf5:
1586     cpu_6809_bit(self, self->regs.byte.b, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1587     break;
1588   case 0xf6:
1589     cpu_6809_ld_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1590     break;
1591   case 0xf7:
1592     cpu_6809_st_byte(self, self->regs.byte.b, cpu_6809_ea_extended(self));
1593     break;
1594   case 0xf8:
1595     cpu_6809_eor(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1596     break;
1597   case 0xf9:
1598     cpu_6809_adc(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1599     break;
1600   case 0xfa:
1601     cpu_6809_or(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1602     break;
1603   case 0xfb:
1604     cpu_6809_add_byte(self, CPU_6809_EA_B, cpu_6809_read_byte(self, cpu_6809_ea_extended(self)));
1605     break;
1606   case 0xfc:
1607     cpu_6809_ld_word(self, CPU_6809_EA_D, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1608     break;
1609   case 0xfd:
1610     cpu_6809_st_word(self, self->regs.word.d, cpu_6809_ea_extended(self));
1611     break;
1612   case 0xfe:
1613     cpu_6809_ld_word(self, CPU_6809_EA_U, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
1614     break;
1615   case 0xff:
1616     cpu_6809_st_word(self, self->regs.word.u, cpu_6809_ea_extended(self));
1617     break;
1618   }
1619 }
1620
1621 void cpu_6809_execute_10(struct cpu_6809 *self) {
1622   switch (cpu_6809_fetch_byte(self)) {
1623   case 0x00:
1624     cpu_6809_illegal_opcode(self);
1625     break;
1626   case 0x01:
1627     cpu_6809_illegal_opcode(self);
1628     break;
1629   case 0x02:
1630     cpu_6809_illegal_opcode(self);
1631     break;
1632   case 0x03:
1633     cpu_6809_illegal_opcode(self);
1634     break;
1635   case 0x04:
1636     cpu_6809_illegal_opcode(self);
1637     break;
1638   case 0x05:
1639     cpu_6809_illegal_opcode(self);
1640     break;
1641   case 0x06:
1642     cpu_6809_illegal_opcode(self);
1643     break;
1644   case 0x07:
1645     cpu_6809_illegal_opcode(self);
1646     break;
1647   case 0x08:
1648     cpu_6809_illegal_opcode(self);
1649     break;
1650   case 0x09:
1651     cpu_6809_illegal_opcode(self);
1652     break;
1653   case 0x0a:
1654     cpu_6809_illegal_opcode(self);
1655     break;
1656   case 0x0b:
1657     cpu_6809_illegal_opcode(self);
1658     break;
1659   case 0x0c:
1660     cpu_6809_illegal_opcode(self);
1661     break;
1662   case 0x0d:
1663     cpu_6809_illegal_opcode(self);
1664     break;
1665   case 0x0e:
1666     cpu_6809_illegal_opcode(self);
1667     break;
1668   case 0x0f:
1669     cpu_6809_illegal_opcode(self);
1670     break;
1671   case 0x10:
1672     cpu_6809_illegal_opcode(self);
1673     break;
1674   case 0x11:
1675     cpu_6809_illegal_opcode(self);
1676     break;
1677   case 0x12:
1678     cpu_6809_illegal_opcode(self);
1679     break;
1680   case 0x13:
1681     cpu_6809_illegal_opcode(self);
1682     break;
1683   case 0x14:
1684     cpu_6809_illegal_opcode(self);
1685     break;
1686   case 0x15:
1687     cpu_6809_illegal_opcode(self);
1688     break;
1689   case 0x16:
1690     cpu_6809_illegal_opcode(self);
1691     break;
1692   case 0x17:
1693     cpu_6809_illegal_opcode(self);
1694     break;
1695   case 0x18:
1696     cpu_6809_illegal_opcode(self);
1697     break;
1698   case 0x19:
1699     cpu_6809_illegal_opcode(self);
1700     break;
1701   case 0x1a:
1702     cpu_6809_illegal_opcode(self);
1703     break;
1704   case 0x1b:
1705     cpu_6809_illegal_opcode(self);
1706     break;
1707   case 0x1c:
1708     cpu_6809_illegal_opcode(self);
1709     break;
1710   case 0x1d:
1711     cpu_6809_illegal_opcode(self);
1712     break;
1713   case 0x1e:
1714     cpu_6809_illegal_opcode(self);
1715     break;
1716   case 0x1f:
1717     cpu_6809_illegal_opcode(self);
1718     break;
1719   case 0x20:
1720     cpu_6809_illegal_opcode(self);
1721     break;
1722   case 0x21:
1723     cpu_6809_lbra(self, false, cpu_6809_ea_long_relative(self));
1724     break;
1725   case 0x22:
1726     cpu_6809_lbra(self, !self->regs.bit.cf && !self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1727     break;
1728   case 0x23:
1729     cpu_6809_lbra(self, self->regs.bit.cf || self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1730     break;
1731   case 0x24:
1732     cpu_6809_lbra(self, !self->regs.bit.cf, cpu_6809_ea_long_relative(self));
1733     break;
1734   case 0x25:
1735     cpu_6809_lbra(self, self->regs.bit.cf, cpu_6809_ea_long_relative(self));
1736     break;
1737   case 0x26:
1738     cpu_6809_lbra(self, !self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1739     break;
1740   case 0x27:
1741     cpu_6809_lbra(self, self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1742     break;
1743   case 0x28:
1744     cpu_6809_lbra(self, !self->regs.bit.vf, cpu_6809_ea_long_relative(self));
1745     break;
1746   case 0x29:
1747     cpu_6809_lbra(self, self->regs.bit.vf, cpu_6809_ea_long_relative(self));
1748     break;
1749   case 0x2a:
1750     cpu_6809_lbra(self, !self->regs.bit.nf, cpu_6809_ea_long_relative(self));
1751     break;
1752   case 0x2b:
1753     cpu_6809_lbra(self, self->regs.bit.nf, cpu_6809_ea_long_relative(self));
1754     break;
1755   case 0x2c:
1756     cpu_6809_lbra(self, !self->regs.bit.nf && !self->regs.bit.vf, cpu_6809_ea_long_relative(self));
1757     break;
1758   case 0x2d:
1759     cpu_6809_lbra(self, self->regs.bit.nf || self->regs.bit.vf, cpu_6809_ea_long_relative(self));
1760     break;
1761   case 0x2e:
1762     cpu_6809_lbra(self, !self->regs.bit.nf && !self->regs.bit.vf && !self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1763     break;
1764   case 0x2f:
1765     cpu_6809_lbra(self, self->regs.bit.nf || self->regs.bit.vf || self->regs.bit.zf, cpu_6809_ea_long_relative(self));
1766     break;
1767   case 0x30:
1768     cpu_6809_illegal_opcode(self);
1769     break;
1770   case 0x31:
1771     cpu_6809_illegal_opcode(self);
1772     break;
1773   case 0x32:
1774     cpu_6809_illegal_opcode(self);
1775     break;
1776   case 0x33:
1777     cpu_6809_illegal_opcode(self);
1778     break;
1779   case 0x34:
1780     cpu_6809_illegal_opcode(self);
1781     break;
1782   case 0x35:
1783     cpu_6809_illegal_opcode(self);
1784     break;
1785   case 0x36:
1786     cpu_6809_illegal_opcode(self);
1787     break;
1788   case 0x37:
1789     cpu_6809_illegal_opcode(self);
1790     break;
1791   case 0x38:
1792     cpu_6809_illegal_opcode(self);
1793     break;
1794   case 0x39:
1795     cpu_6809_illegal_opcode(self);
1796     break;
1797   case 0x3a:
1798     cpu_6809_illegal_opcode(self);
1799     break;
1800   case 0x3b:
1801     cpu_6809_illegal_opcode(self);
1802     break;
1803   case 0x3c:
1804     cpu_6809_illegal_opcode(self);
1805     break;
1806   case 0x3d:
1807     cpu_6809_illegal_opcode(self);
1808     break;
1809   case 0x3e:
1810     cpu_6809_illegal_opcode(self);
1811     break;
1812   case 0x3f:
1813     cpu_6809_swi_n(self, 2);
1814     break;
1815   case 0x40:
1816     cpu_6809_illegal_opcode(self);
1817     break;
1818   case 0x41:
1819     cpu_6809_illegal_opcode(self);
1820     break;
1821   case 0x42:
1822     cpu_6809_illegal_opcode(self);
1823     break;
1824   case 0x43:
1825     cpu_6809_illegal_opcode(self);
1826     break;
1827   case 0x44:
1828     cpu_6809_illegal_opcode(self);
1829     break;
1830   case 0x45:
1831     cpu_6809_illegal_opcode(self);
1832     break;
1833   case 0x46:
1834     cpu_6809_illegal_opcode(self);
1835     break;
1836   case 0x47:
1837     cpu_6809_illegal_opcode(self);
1838     break;
1839   case 0x48:
1840     cpu_6809_illegal_opcode(self);
1841     break;
1842   case 0x49:
1843     cpu_6809_illegal_opcode(self);
1844     break;
1845   case 0x4a:
1846     cpu_6809_illegal_opcode(self);
1847     break;
1848   case 0x4b:
1849     cpu_6809_illegal_opcode(self);
1850     break;
1851   case 0x4c:
1852     cpu_6809_illegal_opcode(self);
1853     break;
1854   case 0x4d:
1855     cpu_6809_illegal_opcode(self);
1856     break;
1857   case 0x4e:
1858     cpu_6809_illegal_opcode(self);
1859     break;
1860   case 0x4f:
1861     cpu_6809_illegal_opcode(self);
1862     break;
1863   case 0x50:
1864     cpu_6809_illegal_opcode(self);
1865     break;
1866   case 0x51:
1867     cpu_6809_illegal_opcode(self);
1868     break;
1869   case 0x52:
1870     cpu_6809_illegal_opcode(self);
1871     break;
1872   case 0x53:
1873     cpu_6809_illegal_opcode(self);
1874     break;
1875   case 0x54:
1876     cpu_6809_illegal_opcode(self);
1877     break;
1878   case 0x55:
1879     cpu_6809_illegal_opcode(self);
1880     break;
1881   case 0x56:
1882     cpu_6809_illegal_opcode(self);
1883     break;
1884   case 0x57:
1885     cpu_6809_illegal_opcode(self);
1886     break;
1887   case 0x58:
1888     cpu_6809_illegal_opcode(self);
1889     break;
1890   case 0x59:
1891     cpu_6809_illegal_opcode(self);
1892     break;
1893   case 0x5a:
1894     cpu_6809_illegal_opcode(self);
1895     break;
1896   case 0x5b:
1897     cpu_6809_illegal_opcode(self);
1898     break;
1899   case 0x5c:
1900     cpu_6809_illegal_opcode(self);
1901     break;
1902   case 0x5d:
1903     cpu_6809_illegal_opcode(self);
1904     break;
1905   case 0x5e:
1906     cpu_6809_illegal_opcode(self);
1907     break;
1908   case 0x5f:
1909     cpu_6809_illegal_opcode(self);
1910     break;
1911   case 0x60:
1912     cpu_6809_illegal_opcode(self);
1913     break;
1914   case 0x61:
1915     cpu_6809_illegal_opcode(self);
1916     break;
1917   case 0x62:
1918     cpu_6809_illegal_opcode(self);
1919     break;
1920   case 0x63:
1921     cpu_6809_illegal_opcode(self);
1922     break;
1923   case 0x64:
1924     cpu_6809_illegal_opcode(self);
1925     break;
1926   case 0x65:
1927     cpu_6809_illegal_opcode(self);
1928     break;
1929   case 0x66:
1930     cpu_6809_illegal_opcode(self);
1931     break;
1932   case 0x67:
1933     cpu_6809_illegal_opcode(self);
1934     break;
1935   case 0x68:
1936     cpu_6809_illegal_opcode(self);
1937     break;
1938   case 0x69:
1939     cpu_6809_illegal_opcode(self);
1940     break;
1941   case 0x6a:
1942     cpu_6809_illegal_opcode(self);
1943     break;
1944   case 0x6b:
1945     cpu_6809_illegal_opcode(self);
1946     break;
1947   case 0x6c:
1948     cpu_6809_illegal_opcode(self);
1949     break;
1950   case 0x6d:
1951     cpu_6809_illegal_opcode(self);
1952     break;
1953   case 0x6e:
1954     cpu_6809_illegal_opcode(self);
1955     break;
1956   case 0x6f:
1957     cpu_6809_illegal_opcode(self);
1958     break;
1959   case 0x70:
1960     cpu_6809_illegal_opcode(self);
1961     break;
1962   case 0x71:
1963     cpu_6809_illegal_opcode(self);
1964     break;
1965   case 0x72:
1966     cpu_6809_illegal_opcode(self);
1967     break;
1968   case 0x73:
1969     cpu_6809_illegal_opcode(self);
1970     break;
1971   case 0x74:
1972     cpu_6809_illegal_opcode(self);
1973     break;
1974   case 0x75:
1975     cpu_6809_illegal_opcode(self);
1976     break;
1977   case 0x76:
1978     cpu_6809_illegal_opcode(self);
1979     break;
1980   case 0x77:
1981     cpu_6809_illegal_opcode(self);
1982     break;
1983   case 0x78:
1984     cpu_6809_illegal_opcode(self);
1985     break;
1986   case 0x79:
1987     cpu_6809_illegal_opcode(self);
1988     break;
1989   case 0x7a:
1990     cpu_6809_illegal_opcode(self);
1991     break;
1992   case 0x7b:
1993     cpu_6809_illegal_opcode(self);
1994     break;
1995   case 0x7c:
1996     cpu_6809_illegal_opcode(self);
1997     break;
1998   case 0x7d:
1999     cpu_6809_illegal_opcode(self);
2000     break;
2001   case 0x7e:
2002     cpu_6809_illegal_opcode(self);
2003     break;
2004   case 0x7f:
2005     cpu_6809_illegal_opcode(self);
2006     break;
2007   case 0x80:
2008     cpu_6809_illegal_opcode(self);
2009     break;
2010   case 0x81:
2011     cpu_6809_illegal_opcode(self);
2012     break;
2013   case 0x82:
2014     cpu_6809_illegal_opcode(self);
2015     break;
2016   case 0x83:
2017     cpu_6809_cmp_word(self, self->regs.word.d, cpu_6809_fetch_word(self));
2018     break;
2019   case 0x84:
2020     cpu_6809_illegal_opcode(self);
2021     break;
2022   case 0x85:
2023     cpu_6809_illegal_opcode(self);
2024     break;
2025   case 0x86:
2026     cpu_6809_illegal_opcode(self);
2027     break;
2028   case 0x87:
2029     cpu_6809_illegal_opcode(self);
2030     break;
2031   case 0x88:
2032     cpu_6809_illegal_opcode(self);
2033     break;
2034   case 0x89:
2035     cpu_6809_illegal_opcode(self);
2036     break;
2037   case 0x8a:
2038     cpu_6809_illegal_opcode(self);
2039     break;
2040   case 0x8b:
2041     cpu_6809_illegal_opcode(self);
2042     break;
2043   case 0x8c:
2044     cpu_6809_cmp_word(self, self->regs.word.y, cpu_6809_fetch_word(self));
2045     break;
2046   case 0x8d:
2047     cpu_6809_illegal_opcode(self);
2048     break;
2049   case 0x8e:
2050     cpu_6809_ld_word(self, CPU_6809_EA_Y, cpu_6809_fetch_word(self));
2051     break;
2052   case 0x8f:
2053     cpu_6809_illegal_opcode(self);
2054     break;
2055   case 0x90:
2056     cpu_6809_illegal_opcode(self);
2057     break;
2058   case 0x91:
2059     cpu_6809_illegal_opcode(self);
2060     break;
2061   case 0x92:
2062     cpu_6809_illegal_opcode(self);
2063     break;
2064   case 0x93:
2065     cpu_6809_cmp_word(self, self->regs.word.d, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2066     break;
2067   case 0x94:
2068     cpu_6809_illegal_opcode(self);
2069     break;
2070   case 0x95:
2071     cpu_6809_illegal_opcode(self);
2072     break;
2073   case 0x96:
2074     cpu_6809_illegal_opcode(self);
2075     break;
2076   case 0x97:
2077     cpu_6809_illegal_opcode(self);
2078     break;
2079   case 0x98:
2080     cpu_6809_illegal_opcode(self);
2081     break;
2082   case 0x99:
2083     cpu_6809_illegal_opcode(self);
2084     break;
2085   case 0x9a:
2086     cpu_6809_illegal_opcode(self);
2087     break;
2088   case 0x9b:
2089     cpu_6809_illegal_opcode(self);
2090     break;
2091   case 0x9c:
2092     cpu_6809_cmp_word(self, self->regs.word.y, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2093     break;
2094   case 0x9d:
2095     cpu_6809_illegal_opcode(self);
2096     break;
2097   case 0x9e:
2098     cpu_6809_ld_word(self, CPU_6809_EA_Y, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2099     break;
2100   case 0x9f:
2101     cpu_6809_st_word(self, self->regs.word.y, cpu_6809_ea_direct(self));
2102     break;
2103   case 0xa0:
2104     cpu_6809_illegal_opcode(self);
2105     break;
2106   case 0xa1:
2107     cpu_6809_illegal_opcode(self);
2108     break;
2109   case 0xa2:
2110     cpu_6809_illegal_opcode(self);
2111     break;
2112   case 0xa3:
2113     cpu_6809_cmp_word(self, self->regs.word.d, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2114     break;
2115   case 0xa4:
2116     cpu_6809_illegal_opcode(self);
2117     break;
2118   case 0xa5:
2119     cpu_6809_illegal_opcode(self);
2120     break;
2121   case 0xa6:
2122     cpu_6809_illegal_opcode(self);
2123     break;
2124   case 0xa7:
2125     cpu_6809_illegal_opcode(self);
2126     break;
2127   case 0xa8:
2128     cpu_6809_illegal_opcode(self);
2129     break;
2130   case 0xa9:
2131     cpu_6809_illegal_opcode(self);
2132     break;
2133   case 0xaa:
2134     cpu_6809_illegal_opcode(self);
2135     break;
2136   case 0xab:
2137     cpu_6809_illegal_opcode(self);
2138     break;
2139   case 0xac:
2140     cpu_6809_cmp_word(self, self->regs.word.y, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2141     break;
2142   case 0xad:
2143     cpu_6809_illegal_opcode(self);
2144     break;
2145   case 0xae:
2146     cpu_6809_ld_word(self, CPU_6809_EA_Y, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2147     break;
2148   case 0xaf:
2149     cpu_6809_st_word(self, self->regs.word.y, cpu_6809_addressing_mode(self));
2150     break;
2151   case 0xb0:
2152     cpu_6809_illegal_opcode(self);
2153     break;
2154   case 0xb1:
2155     cpu_6809_illegal_opcode(self);
2156     break;
2157   case 0xb2:
2158     cpu_6809_illegal_opcode(self);
2159     break;
2160   case 0xb3:
2161     cpu_6809_cmp_word(self, self->regs.word.d, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2162     break;
2163   case 0xb4:
2164     cpu_6809_illegal_opcode(self);
2165     break;
2166   case 0xb5:
2167     cpu_6809_illegal_opcode(self);
2168     break;
2169   case 0xb6:
2170     cpu_6809_illegal_opcode(self);
2171     break;
2172   case 0xb7:
2173     cpu_6809_illegal_opcode(self);
2174     break;
2175   case 0xb8:
2176     cpu_6809_illegal_opcode(self);
2177     break;
2178   case 0xb9:
2179     cpu_6809_illegal_opcode(self);
2180     break;
2181   case 0xba:
2182     cpu_6809_illegal_opcode(self);
2183     break;
2184   case 0xbb:
2185     cpu_6809_illegal_opcode(self);
2186     break;
2187   case 0xbc:
2188     cpu_6809_cmp_word(self, self->regs.word.y, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2189     break;
2190   case 0xbd:
2191     cpu_6809_illegal_opcode(self);
2192     break;
2193   case 0xbe:
2194     cpu_6809_ld_word(self, CPU_6809_EA_Y, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2195     break;
2196   case 0xbf:
2197     cpu_6809_st_word(self, self->regs.word.y, cpu_6809_ea_extended(self));
2198     break;
2199   case 0xc0:
2200     cpu_6809_illegal_opcode(self);
2201     break;
2202   case 0xc1:
2203     cpu_6809_illegal_opcode(self);
2204     break;
2205   case 0xc2:
2206     cpu_6809_illegal_opcode(self);
2207     break;
2208   case 0xc3:
2209     cpu_6809_illegal_opcode(self);
2210     break;
2211   case 0xc4:
2212     cpu_6809_illegal_opcode(self);
2213     break;
2214   case 0xc5:
2215     cpu_6809_illegal_opcode(self);
2216     break;
2217   case 0xc6:
2218     cpu_6809_illegal_opcode(self);
2219     break;
2220   case 0xc7:
2221     cpu_6809_illegal_opcode(self);
2222     break;
2223   case 0xc8:
2224     cpu_6809_illegal_opcode(self);
2225     break;
2226   case 0xc9:
2227     cpu_6809_illegal_opcode(self);
2228     break;
2229   case 0xca:
2230     cpu_6809_illegal_opcode(self);
2231     break;
2232   case 0xcb:
2233     cpu_6809_illegal_opcode(self);
2234     break;
2235   case 0xcc:
2236     cpu_6809_illegal_opcode(self);
2237     break;
2238   case 0xcd:
2239     cpu_6809_illegal_opcode(self);
2240     break;
2241   case 0xce:
2242     cpu_6809_ld_word(self, CPU_6809_EA_S, cpu_6809_fetch_word(self));
2243     break;
2244   case 0xcf:
2245     cpu_6809_illegal_opcode(self);
2246     break;
2247   case 0xd0:
2248     cpu_6809_illegal_opcode(self);
2249     break;
2250   case 0xd1:
2251     cpu_6809_illegal_opcode(self);
2252     break;
2253   case 0xd2:
2254     cpu_6809_illegal_opcode(self);
2255     break;
2256   case 0xd3:
2257     cpu_6809_illegal_opcode(self);
2258     break;
2259   case 0xd4:
2260     cpu_6809_illegal_opcode(self);
2261     break;
2262   case 0xd5:
2263     cpu_6809_illegal_opcode(self);
2264     break;
2265   case 0xd6:
2266     cpu_6809_illegal_opcode(self);
2267     break;
2268   case 0xd7:
2269     cpu_6809_illegal_opcode(self);
2270     break;
2271   case 0xd8:
2272     cpu_6809_illegal_opcode(self);
2273     break;
2274   case 0xd9:
2275     cpu_6809_illegal_opcode(self);
2276     break;
2277   case 0xda:
2278     cpu_6809_illegal_opcode(self);
2279     break;
2280   case 0xdb:
2281     cpu_6809_illegal_opcode(self);
2282     break;
2283   case 0xdc:
2284     cpu_6809_illegal_opcode(self);
2285     break;
2286   case 0xdd:
2287     cpu_6809_illegal_opcode(self);
2288     break;
2289   case 0xde:
2290     cpu_6809_ld_word(self, CPU_6809_EA_S, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2291     break;
2292   case 0xdf:
2293     cpu_6809_st_word(self, self->regs.word.s, cpu_6809_ea_direct(self));
2294     break;
2295   case 0xe0:
2296     cpu_6809_illegal_opcode(self);
2297     break;
2298   case 0xe1:
2299     cpu_6809_illegal_opcode(self);
2300     break;
2301   case 0xe2:
2302     cpu_6809_illegal_opcode(self);
2303     break;
2304   case 0xe3:
2305     cpu_6809_illegal_opcode(self);
2306     break;
2307   case 0xe4:
2308     cpu_6809_illegal_opcode(self);
2309     break;
2310   case 0xe5:
2311     cpu_6809_illegal_opcode(self);
2312     break;
2313   case 0xe6:
2314     cpu_6809_illegal_opcode(self);
2315     break;
2316   case 0xe7:
2317     cpu_6809_illegal_opcode(self);
2318     break;
2319   case 0xe8:
2320     cpu_6809_illegal_opcode(self);
2321     break;
2322   case 0xe9:
2323     cpu_6809_illegal_opcode(self);
2324     break;
2325   case 0xea:
2326     cpu_6809_illegal_opcode(self);
2327     break;
2328   case 0xeb:
2329     cpu_6809_illegal_opcode(self);
2330     break;
2331   case 0xec:
2332     cpu_6809_illegal_opcode(self);
2333     break;
2334   case 0xed:
2335     cpu_6809_illegal_opcode(self);
2336     break;
2337   case 0xee:
2338     cpu_6809_ld_word(self, CPU_6809_EA_S, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2339     break;
2340   case 0xef:
2341     cpu_6809_st_word(self, self->regs.word.s, cpu_6809_addressing_mode(self));
2342     break;
2343   case 0xf0:
2344     cpu_6809_illegal_opcode(self);
2345     break;
2346   case 0xf1:
2347     cpu_6809_illegal_opcode(self);
2348     break;
2349   case 0xf2:
2350     cpu_6809_illegal_opcode(self);
2351     break;
2352   case 0xf3:
2353     cpu_6809_illegal_opcode(self);
2354     break;
2355   case 0xf4:
2356     cpu_6809_illegal_opcode(self);
2357     break;
2358   case 0xf5:
2359     cpu_6809_illegal_opcode(self);
2360     break;
2361   case 0xf6:
2362     cpu_6809_illegal_opcode(self);
2363     break;
2364   case 0xf7:
2365     cpu_6809_illegal_opcode(self);
2366     break;
2367   case 0xf8:
2368     cpu_6809_illegal_opcode(self);
2369     break;
2370   case 0xf9:
2371     cpu_6809_illegal_opcode(self);
2372     break;
2373   case 0xfa:
2374     cpu_6809_illegal_opcode(self);
2375     break;
2376   case 0xfb:
2377     cpu_6809_illegal_opcode(self);
2378     break;
2379   case 0xfc:
2380     cpu_6809_illegal_opcode(self);
2381     break;
2382   case 0xfd:
2383     cpu_6809_illegal_opcode(self);
2384     break;
2385   case 0xfe:
2386     cpu_6809_ld_word(self, CPU_6809_EA_S, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2387     break;
2388   case 0xff:
2389     cpu_6809_st_word(self, self->regs.word.s, cpu_6809_ea_extended(self));
2390     break;
2391   }
2392 }
2393
2394 void cpu_6809_execute_11(struct cpu_6809 *self) {
2395   switch (cpu_6809_fetch_byte(self)) {
2396   case 0x00:
2397     cpu_6809_illegal_opcode(self);
2398     break;
2399   case 0x01:
2400     cpu_6809_illegal_opcode(self);
2401     break;
2402   case 0x02:
2403     cpu_6809_illegal_opcode(self);
2404     break;
2405   case 0x03:
2406     cpu_6809_illegal_opcode(self);
2407     break;
2408   case 0x04:
2409     cpu_6809_illegal_opcode(self);
2410     break;
2411   case 0x05:
2412     cpu_6809_illegal_opcode(self);
2413     break;
2414   case 0x06:
2415     cpu_6809_illegal_opcode(self);
2416     break;
2417   case 0x07:
2418     cpu_6809_illegal_opcode(self);
2419     break;
2420   case 0x08:
2421     cpu_6809_illegal_opcode(self);
2422     break;
2423   case 0x09:
2424     cpu_6809_illegal_opcode(self);
2425     break;
2426   case 0x0a:
2427     cpu_6809_illegal_opcode(self);
2428     break;
2429   case 0x0b:
2430     cpu_6809_illegal_opcode(self);
2431     break;
2432   case 0x0c:
2433     cpu_6809_illegal_opcode(self);
2434     break;
2435   case 0x0d:
2436     cpu_6809_illegal_opcode(self);
2437     break;
2438   case 0x0e:
2439     cpu_6809_illegal_opcode(self);
2440     break;
2441   case 0x0f:
2442     cpu_6809_illegal_opcode(self);
2443     break;
2444   case 0x10:
2445     cpu_6809_illegal_opcode(self);
2446     break;
2447   case 0x11:
2448     cpu_6809_illegal_opcode(self);
2449     break;
2450   case 0x12:
2451     cpu_6809_illegal_opcode(self);
2452     break;
2453   case 0x13:
2454     cpu_6809_illegal_opcode(self);
2455     break;
2456   case 0x14:
2457     cpu_6809_illegal_opcode(self);
2458     break;
2459   case 0x15:
2460     cpu_6809_illegal_opcode(self);
2461     break;
2462   case 0x16:
2463     cpu_6809_illegal_opcode(self);
2464     break;
2465   case 0x17:
2466     cpu_6809_illegal_opcode(self);
2467     break;
2468   case 0x18:
2469     cpu_6809_illegal_opcode(self);
2470     break;
2471   case 0x19:
2472     cpu_6809_illegal_opcode(self);
2473     break;
2474   case 0x1a:
2475     cpu_6809_illegal_opcode(self);
2476     break;
2477   case 0x1b:
2478     cpu_6809_illegal_opcode(self);
2479     break;
2480   case 0x1c:
2481     cpu_6809_illegal_opcode(self);
2482     break;
2483   case 0x1d:
2484     cpu_6809_illegal_opcode(self);
2485     break;
2486   case 0x1e:
2487     cpu_6809_illegal_opcode(self);
2488     break;
2489   case 0x1f:
2490     cpu_6809_illegal_opcode(self);
2491     break;
2492   case 0x20:
2493     cpu_6809_illegal_opcode(self);
2494     break;
2495   case 0x21:
2496     cpu_6809_illegal_opcode(self);
2497     break;
2498   case 0x22:
2499     cpu_6809_illegal_opcode(self);
2500     break;
2501   case 0x23:
2502     cpu_6809_illegal_opcode(self);
2503     break;
2504   case 0x24:
2505     cpu_6809_illegal_opcode(self);
2506     break;
2507   case 0x25:
2508     cpu_6809_illegal_opcode(self);
2509     break;
2510   case 0x26:
2511     cpu_6809_illegal_opcode(self);
2512     break;
2513   case 0x27:
2514     cpu_6809_illegal_opcode(self);
2515     break;
2516   case 0x28:
2517     cpu_6809_illegal_opcode(self);
2518     break;
2519   case 0x29:
2520     cpu_6809_illegal_opcode(self);
2521     break;
2522   case 0x2a:
2523     cpu_6809_illegal_opcode(self);
2524     break;
2525   case 0x2b:
2526     cpu_6809_illegal_opcode(self);
2527     break;
2528   case 0x2c:
2529     cpu_6809_illegal_opcode(self);
2530     break;
2531   case 0x2d:
2532     cpu_6809_illegal_opcode(self);
2533     break;
2534   case 0x2e:
2535     cpu_6809_illegal_opcode(self);
2536     break;
2537   case 0x2f:
2538     cpu_6809_illegal_opcode(self);
2539     break;
2540   case 0x30:
2541     cpu_6809_illegal_opcode(self);
2542     break;
2543   case 0x31:
2544     cpu_6809_illegal_opcode(self);
2545     break;
2546   case 0x32:
2547     cpu_6809_illegal_opcode(self);
2548     break;
2549   case 0x33:
2550     cpu_6809_illegal_opcode(self);
2551     break;
2552   case 0x34:
2553     cpu_6809_illegal_opcode(self);
2554     break;
2555   case 0x35:
2556     cpu_6809_illegal_opcode(self);
2557     break;
2558   case 0x36:
2559     cpu_6809_illegal_opcode(self);
2560     break;
2561   case 0x37:
2562     cpu_6809_illegal_opcode(self);
2563     break;
2564   case 0x38:
2565     cpu_6809_illegal_opcode(self);
2566     break;
2567   case 0x39:
2568     cpu_6809_illegal_opcode(self);
2569     break;
2570   case 0x3a:
2571     cpu_6809_illegal_opcode(self);
2572     break;
2573   case 0x3b:
2574     cpu_6809_illegal_opcode(self);
2575     break;
2576   case 0x3c:
2577     cpu_6809_illegal_opcode(self);
2578     break;
2579   case 0x3d:
2580     cpu_6809_illegal_opcode(self);
2581     break;
2582   case 0x3e:
2583     cpu_6809_illegal_opcode(self);
2584     break;
2585   case 0x3f:
2586     cpu_6809_swi_n(self, 3);
2587     break;
2588   case 0x40:
2589     cpu_6809_illegal_opcode(self);
2590     break;
2591   case 0x41:
2592     cpu_6809_illegal_opcode(self);
2593     break;
2594   case 0x42:
2595     cpu_6809_illegal_opcode(self);
2596     break;
2597   case 0x43:
2598     cpu_6809_illegal_opcode(self);
2599     break;
2600   case 0x44:
2601     cpu_6809_illegal_opcode(self);
2602     break;
2603   case 0x45:
2604     cpu_6809_illegal_opcode(self);
2605     break;
2606   case 0x46:
2607     cpu_6809_illegal_opcode(self);
2608     break;
2609   case 0x47:
2610     cpu_6809_illegal_opcode(self);
2611     break;
2612   case 0x48:
2613     cpu_6809_illegal_opcode(self);
2614     break;
2615   case 0x49:
2616     cpu_6809_illegal_opcode(self);
2617     break;
2618   case 0x4a:
2619     cpu_6809_illegal_opcode(self);
2620     break;
2621   case 0x4b:
2622     cpu_6809_illegal_opcode(self);
2623     break;
2624   case 0x4c:
2625     cpu_6809_illegal_opcode(self);
2626     break;
2627   case 0x4d:
2628     cpu_6809_illegal_opcode(self);
2629     break;
2630   case 0x4e:
2631     cpu_6809_illegal_opcode(self);
2632     break;
2633   case 0x4f:
2634     cpu_6809_illegal_opcode(self);
2635     break;
2636   case 0x50:
2637     cpu_6809_illegal_opcode(self);
2638     break;
2639   case 0x51:
2640     cpu_6809_illegal_opcode(self);
2641     break;
2642   case 0x52:
2643     cpu_6809_illegal_opcode(self);
2644     break;
2645   case 0x53:
2646     cpu_6809_illegal_opcode(self);
2647     break;
2648   case 0x54:
2649     cpu_6809_illegal_opcode(self);
2650     break;
2651   case 0x55:
2652     cpu_6809_illegal_opcode(self);
2653     break;
2654   case 0x56:
2655     cpu_6809_illegal_opcode(self);
2656     break;
2657   case 0x57:
2658     cpu_6809_illegal_opcode(self);
2659     break;
2660   case 0x58:
2661     cpu_6809_illegal_opcode(self);
2662     break;
2663   case 0x59:
2664     cpu_6809_illegal_opcode(self);
2665     break;
2666   case 0x5a:
2667     cpu_6809_illegal_opcode(self);
2668     break;
2669   case 0x5b:
2670     cpu_6809_illegal_opcode(self);
2671     break;
2672   case 0x5c:
2673     cpu_6809_illegal_opcode(self);
2674     break;
2675   case 0x5d:
2676     cpu_6809_illegal_opcode(self);
2677     break;
2678   case 0x5e:
2679     cpu_6809_illegal_opcode(self);
2680     break;
2681   case 0x5f:
2682     cpu_6809_illegal_opcode(self);
2683     break;
2684   case 0x60:
2685     cpu_6809_illegal_opcode(self);
2686     break;
2687   case 0x61:
2688     cpu_6809_illegal_opcode(self);
2689     break;
2690   case 0x62:
2691     cpu_6809_illegal_opcode(self);
2692     break;
2693   case 0x63:
2694     cpu_6809_illegal_opcode(self);
2695     break;
2696   case 0x64:
2697     cpu_6809_illegal_opcode(self);
2698     break;
2699   case 0x65:
2700     cpu_6809_illegal_opcode(self);
2701     break;
2702   case 0x66:
2703     cpu_6809_illegal_opcode(self);
2704     break;
2705   case 0x67:
2706     cpu_6809_illegal_opcode(self);
2707     break;
2708   case 0x68:
2709     cpu_6809_illegal_opcode(self);
2710     break;
2711   case 0x69:
2712     cpu_6809_illegal_opcode(self);
2713     break;
2714   case 0x6a:
2715     cpu_6809_illegal_opcode(self);
2716     break;
2717   case 0x6b:
2718     cpu_6809_illegal_opcode(self);
2719     break;
2720   case 0x6c:
2721     cpu_6809_illegal_opcode(self);
2722     break;
2723   case 0x6d:
2724     cpu_6809_illegal_opcode(self);
2725     break;
2726   case 0x6e:
2727     cpu_6809_illegal_opcode(self);
2728     break;
2729   case 0x6f:
2730     cpu_6809_illegal_opcode(self);
2731     break;
2732   case 0x70:
2733     cpu_6809_illegal_opcode(self);
2734     break;
2735   case 0x71:
2736     cpu_6809_illegal_opcode(self);
2737     break;
2738   case 0x72:
2739     cpu_6809_illegal_opcode(self);
2740     break;
2741   case 0x73:
2742     cpu_6809_illegal_opcode(self);
2743     break;
2744   case 0x74:
2745     cpu_6809_illegal_opcode(self);
2746     break;
2747   case 0x75:
2748     cpu_6809_illegal_opcode(self);
2749     break;
2750   case 0x76:
2751     cpu_6809_illegal_opcode(self);
2752     break;
2753   case 0x77:
2754     cpu_6809_illegal_opcode(self);
2755     break;
2756   case 0x78:
2757     cpu_6809_illegal_opcode(self);
2758     break;
2759   case 0x79:
2760     cpu_6809_illegal_opcode(self);
2761     break;
2762   case 0x7a:
2763     cpu_6809_illegal_opcode(self);
2764     break;
2765   case 0x7b:
2766     cpu_6809_illegal_opcode(self);
2767     break;
2768   case 0x7c:
2769     cpu_6809_illegal_opcode(self);
2770     break;
2771   case 0x7d:
2772     cpu_6809_illegal_opcode(self);
2773     break;
2774   case 0x7e:
2775     cpu_6809_illegal_opcode(self);
2776     break;
2777   case 0x7f:
2778     cpu_6809_illegal_opcode(self);
2779     break;
2780   case 0x80:
2781     cpu_6809_illegal_opcode(self);
2782     break;
2783   case 0x81:
2784     cpu_6809_illegal_opcode(self);
2785     break;
2786   case 0x82:
2787     cpu_6809_illegal_opcode(self);
2788     break;
2789   case 0x83:
2790     cpu_6809_cmp_word(self, self->regs.word.u, cpu_6809_fetch_word(self));
2791     break;
2792   case 0x84:
2793     cpu_6809_illegal_opcode(self);
2794     break;
2795   case 0x85:
2796     cpu_6809_illegal_opcode(self);
2797     break;
2798   case 0x86:
2799     cpu_6809_illegal_opcode(self);
2800     break;
2801   case 0x87:
2802     cpu_6809_illegal_opcode(self);
2803     break;
2804   case 0x88:
2805     cpu_6809_illegal_opcode(self);
2806     break;
2807   case 0x89:
2808     cpu_6809_illegal_opcode(self);
2809     break;
2810   case 0x8a:
2811     cpu_6809_illegal_opcode(self);
2812     break;
2813   case 0x8b:
2814     cpu_6809_illegal_opcode(self);
2815     break;
2816   case 0x8c:
2817     cpu_6809_cmp_word(self, self->regs.word.s, cpu_6809_fetch_word(self));
2818     break;
2819   case 0x8d:
2820     cpu_6809_illegal_opcode(self);
2821     break;
2822   case 0x8e:
2823     cpu_6809_illegal_opcode(self);
2824     break;
2825   case 0x8f:
2826     cpu_6809_illegal_opcode(self);
2827     break;
2828   case 0x90:
2829     cpu_6809_illegal_opcode(self);
2830     break;
2831   case 0x91:
2832     cpu_6809_illegal_opcode(self);
2833     break;
2834   case 0x92:
2835     cpu_6809_illegal_opcode(self);
2836     break;
2837   case 0x93:
2838     cpu_6809_cmp_word(self, self->regs.word.u, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2839     break;
2840   case 0x94:
2841     cpu_6809_illegal_opcode(self);
2842     break;
2843   case 0x95:
2844     cpu_6809_illegal_opcode(self);
2845     break;
2846   case 0x96:
2847     cpu_6809_illegal_opcode(self);
2848     break;
2849   case 0x97:
2850     cpu_6809_illegal_opcode(self);
2851     break;
2852   case 0x98:
2853     cpu_6809_illegal_opcode(self);
2854     break;
2855   case 0x99:
2856     cpu_6809_illegal_opcode(self);
2857     break;
2858   case 0x9a:
2859     cpu_6809_illegal_opcode(self);
2860     break;
2861   case 0x9b:
2862     cpu_6809_illegal_opcode(self);
2863     break;
2864   case 0x9c:
2865     cpu_6809_cmp_word(self, self->regs.word.s, cpu_6809_read_word(self, cpu_6809_ea_direct(self)));
2866     break;
2867   case 0x9d:
2868     cpu_6809_illegal_opcode(self);
2869     break;
2870   case 0x9e:
2871     cpu_6809_illegal_opcode(self);
2872     break;
2873   case 0x9f:
2874     cpu_6809_illegal_opcode(self);
2875     break;
2876   case 0xa0:
2877     cpu_6809_illegal_opcode(self);
2878     break;
2879   case 0xa1:
2880     cpu_6809_illegal_opcode(self);
2881     break;
2882   case 0xa2:
2883     cpu_6809_illegal_opcode(self);
2884     break;
2885   case 0xa3:
2886     cpu_6809_cmp_word(self, self->regs.word.u, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2887     break;
2888   case 0xa4:
2889     cpu_6809_illegal_opcode(self);
2890     break;
2891   case 0xa5:
2892     cpu_6809_illegal_opcode(self);
2893     break;
2894   case 0xa6:
2895     cpu_6809_illegal_opcode(self);
2896     break;
2897   case 0xa7:
2898     cpu_6809_illegal_opcode(self);
2899     break;
2900   case 0xa8:
2901     cpu_6809_illegal_opcode(self);
2902     break;
2903   case 0xa9:
2904     cpu_6809_illegal_opcode(self);
2905     break;
2906   case 0xaa:
2907     cpu_6809_illegal_opcode(self);
2908     break;
2909   case 0xab:
2910     cpu_6809_illegal_opcode(self);
2911     break;
2912   case 0xac:
2913     cpu_6809_cmp_word(self, self->regs.word.s, cpu_6809_read_word(self, cpu_6809_addressing_mode(self)));
2914     break;
2915   case 0xad:
2916     cpu_6809_illegal_opcode(self);
2917     break;
2918   case 0xae:
2919     cpu_6809_illegal_opcode(self);
2920     break;
2921   case 0xaf:
2922     cpu_6809_illegal_opcode(self);
2923     break;
2924   case 0xb0:
2925     cpu_6809_illegal_opcode(self);
2926     break;
2927   case 0xb1:
2928     cpu_6809_illegal_opcode(self);
2929     break;
2930   case 0xb2:
2931     cpu_6809_illegal_opcode(self);
2932     break;
2933   case 0xb3:
2934     cpu_6809_cmp_word(self, self->regs.word.u, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2935     break;
2936   case 0xb4:
2937     cpu_6809_illegal_opcode(self);
2938     break;
2939   case 0xb5:
2940     cpu_6809_illegal_opcode(self);
2941     break;
2942   case 0xb6:
2943     cpu_6809_illegal_opcode(self);
2944     break;
2945   case 0xb7:
2946     cpu_6809_illegal_opcode(self);
2947     break;
2948   case 0xb8:
2949     cpu_6809_illegal_opcode(self);
2950     break;
2951   case 0xb9:
2952     cpu_6809_illegal_opcode(self);
2953     break;
2954   case 0xba:
2955     cpu_6809_illegal_opcode(self);
2956     break;
2957   case 0xbb:
2958     cpu_6809_illegal_opcode(self);
2959     break;
2960   case 0xbc:
2961     cpu_6809_cmp_word(self, self->regs.word.s, cpu_6809_read_word(self, cpu_6809_ea_extended(self)));
2962     break;
2963   case 0xbd:
2964     cpu_6809_illegal_opcode(self);
2965     break;
2966   case 0xbe:
2967     cpu_6809_illegal_opcode(self);
2968     break;
2969   case 0xbf:
2970     cpu_6809_illegal_opcode(self);
2971     break;
2972   case 0xc0:
2973     cpu_6809_illegal_opcode(self);
2974     break;
2975   case 0xc1:
2976     cpu_6809_illegal_opcode(self);
2977     break;
2978   case 0xc2:
2979     cpu_6809_illegal_opcode(self);
2980     break;
2981   case 0xc3:
2982     cpu_6809_illegal_opcode(self);
2983     break;
2984   case 0xc4:
2985     cpu_6809_illegal_opcode(self);
2986     break;
2987   case 0xc5:
2988     cpu_6809_illegal_opcode(self);
2989     break;
2990   case 0xc6:
2991     cpu_6809_illegal_opcode(self);
2992     break;
2993   case 0xc7:
2994     cpu_6809_illegal_opcode(self);
2995     break;
2996   case 0xc8:
2997     cpu_6809_illegal_opcode(self);
2998     break;
2999   case 0xc9:
3000     cpu_6809_illegal_opcode(self);
3001     break;
3002   case 0xca:
3003     cpu_6809_illegal_opcode(self);
3004     break;
3005   case 0xcb:
3006     cpu_6809_illegal_opcode(self);
3007     break;
3008   case 0xcc:
3009     cpu_6809_illegal_opcode(self);
3010     break;
3011   case 0xcd:
3012     cpu_6809_illegal_opcode(self);
3013     break;
3014   case 0xce:
3015     cpu_6809_illegal_opcode(self);
3016     break;
3017   case 0xcf:
3018     cpu_6809_illegal_opcode(self);
3019     break;
3020   case 0xd0:
3021     cpu_6809_illegal_opcode(self);
3022     break;
3023   case 0xd1:
3024     cpu_6809_illegal_opcode(self);
3025     break;
3026   case 0xd2:
3027     cpu_6809_illegal_opcode(self);
3028     break;
3029   case 0xd3:
3030     cpu_6809_illegal_opcode(self);
3031     break;
3032   case 0xd4:
3033     cpu_6809_illegal_opcode(self);
3034     break;
3035   case 0xd5:
3036     cpu_6809_illegal_opcode(self);
3037     break;
3038   case 0xd6:
3039     cpu_6809_illegal_opcode(self);
3040     break;
3041   case 0xd7:
3042     cpu_6809_illegal_opcode(self);
3043     break;
3044   case 0xd8:
3045     cpu_6809_illegal_opcode(self);
3046     break;
3047   case 0xd9:
3048     cpu_6809_illegal_opcode(self);
3049     break;
3050   case 0xda:
3051     cpu_6809_illegal_opcode(self);
3052     break;
3053   case 0xdb:
3054     cpu_6809_illegal_opcode(self);
3055     break;
3056   case 0xdc:
3057     cpu_6809_illegal_opcode(self);
3058     break;
3059   case 0xdd:
3060     cpu_6809_illegal_opcode(self);
3061     break;
3062   case 0xde:
3063     cpu_6809_illegal_opcode(self);
3064     break;
3065   case 0xdf:
3066     cpu_6809_illegal_opcode(self);
3067     break;
3068   case 0xe0:
3069     cpu_6809_illegal_opcode(self);
3070     break;
3071   case 0xe1:
3072     cpu_6809_illegal_opcode(self);
3073     break;
3074   case 0xe2:
3075     cpu_6809_illegal_opcode(self);
3076     break;
3077   case 0xe3:
3078     cpu_6809_illegal_opcode(self);
3079     break;
3080   case 0xe4:
3081     cpu_6809_illegal_opcode(self);
3082     break;
3083   case 0xe5:
3084     cpu_6809_illegal_opcode(self);
3085     break;
3086   case 0xe6:
3087     cpu_6809_illegal_opcode(self);
3088     break;
3089   case 0xe7:
3090     cpu_6809_illegal_opcode(self);
3091     break;
3092   case 0xe8:
3093     cpu_6809_illegal_opcode(self);
3094     break;
3095   case 0xe9:
3096     cpu_6809_illegal_opcode(self);
3097     break;
3098   case 0xea:
3099     cpu_6809_illegal_opcode(self);
3100     break;
3101   case 0xeb:
3102     cpu_6809_illegal_opcode(self);
3103     break;
3104   case 0xec:
3105     cpu_6809_illegal_opcode(self);
3106     break;
3107   case 0xed:
3108     cpu_6809_illegal_opcode(self);
3109     break;
3110   case 0xee:
3111     cpu_6809_illegal_opcode(self);
3112     break;
3113   case 0xef:
3114     cpu_6809_illegal_opcode(self);
3115     break;
3116   case 0xf0:
3117     cpu_6809_illegal_opcode(self);
3118     break;
3119   case 0xf1:
3120     cpu_6809_illegal_opcode(self);
3121     break;
3122   case 0xf2:
3123     cpu_6809_illegal_opcode(self);
3124     break;
3125   case 0xf3:
3126     cpu_6809_illegal_opcode(self);
3127     break;
3128   case 0xf4:
3129     cpu_6809_illegal_opcode(self);
3130     break;
3131   case 0xf5:
3132     cpu_6809_illegal_opcode(self);
3133     break;
3134   case 0xf6:
3135     cpu_6809_illegal_opcode(self);
3136     break;
3137   case 0xf7:
3138     cpu_6809_illegal_opcode(self);
3139     break;
3140   case 0xf8:
3141     cpu_6809_illegal_opcode(self);
3142     break;
3143   case 0xf9:
3144     cpu_6809_illegal_opcode(self);
3145     break;
3146   case 0xfa:
3147     cpu_6809_illegal_opcode(self);
3148     break;
3149   case 0xfb:
3150     cpu_6809_illegal_opcode(self);
3151     break;
3152   case 0xfc:
3153     cpu_6809_illegal_opcode(self);
3154     break;
3155   case 0xfd:
3156     cpu_6809_illegal_opcode(self);
3157     break;
3158   case 0xfe:
3159     cpu_6809_illegal_opcode(self);
3160     break;
3161   case 0xff:
3162     cpu_6809_illegal_opcode(self);
3163     break;
3164   }
3165 }