2 * A MC68000/MC68010 disassembler
\r
4 * Note: this is probably not the most efficient disassembler in the world :-)
\r
6 * This code written by Aaron Giles (agiles@sirius.com) for the MAME project
\r
13 static char *ccodes[16] = { "T ", "F ", "HI", "LS", "CC", "CS", "NE", "EQ", "VC", "VS", "PL", "MI", "GE", "LT", "GT", "LE" };
\r
15 #define PARAM_WORD(v) ((v) = *(unsigned short *)&p[0], p += 2)
\r
16 #define PARAM_LONG(v) ((v) = (*(unsigned short *)&p[0] << 16) + *(unsigned short *)&p[2], p += 4)
\r
20 static char *MakeEA (int lo, char *pBase, int size, int *count)
\r
22 static char buffer[2][80];
\r
25 unsigned char *p = (unsigned char *)pBase;
\r
26 char *buf = buffer[which];
\r
32 switch ((lo >> 3) & 7)
\r
35 sprintf (buf, "D%d", reg);
\r
38 sprintf (buf, "A%d", reg);
\r
41 sprintf (buf, "(A%d)", reg);
\r
44 sprintf (buf, "(A%d)+", reg);
\r
47 sprintf (buf, "-(A%d)", reg);
\r
52 sprintf (buf, "(-$%X,A%d)", -(signed short)pm & 0xffff, reg);
\r
54 sprintf (buf, "($%lX,A%d)", pm, reg);
\r
60 sprintf (buf, "(-$%X,A%d,D%ld.%c)", -(signed char)temp & 0xff, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
62 sprintf (buf, "($%X,A%d,D%ld.%c)", temp, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
69 sprintf (buf, "$%lX", pm);
\r
73 sprintf (buf, "$%lX", pm);
\r
78 sprintf (buf, "(-$%X,PC)", -(signed short)pm & 0xffff);
\r
80 sprintf (buf, "($%lX,PC)", pm);
\r
86 sprintf (buf, "(-$%X,PC,D%ld.%c)", -(signed char)temp & 0xff, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
88 sprintf (buf, "($%X,PC,D%ld.%c)", temp, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
95 sprintf (buf, "#$%X", temp);
\r
100 sprintf (buf, "#$%lX", pm);
\r
105 sprintf (buf, "#$%lX", pm);
\r
112 *count = p - ((unsigned char*)pBase);
\r
116 static char *MakeRegList (char *p, unsigned short pm)
\r
118 int start = -1, sep = 0;
\r
121 for (i = 0; i < 8; i++, pm >>= 1)
\r
123 if ((pm & 1) && start == -1)
\r
125 else if (!(pm & 1) && start != -1)
\r
127 if (sep++) p += sprintf (p, "/");
\r
128 if (start == i - 1) p += sprintf (p, "D%d", start);
\r
129 else p += sprintf (p, "D%d-D%d", start, i - 1);
\r
135 if (sep++) p += sprintf (p, "/");
\r
136 if (start == 7) p += sprintf (p, "D7");
\r
137 else p += sprintf (p, "D%d-D7", start);
\r
141 for (i = 0; i < 8; i++, pm >>= 1)
\r
143 if ((pm & 1) && start == -1)
\r
145 else if (!(pm & 1) && start != -1)
\r
147 if (sep++) p += sprintf (p, "/");
\r
148 if (start == i - 1) p += sprintf (p, "A%d", start);
\r
149 else p += sprintf (p, "A%d-A%d", start, i - 1);
\r
155 if (sep++) p += sprintf (p, "/");
\r
156 if (start == 7) p += sprintf (p, "A7");
\r
157 else p += sprintf (p, "A%d-A7", start);
\r
163 static char *MakeRevRegList (char *p, unsigned short pm)
\r
165 int start = -1, sep = 0;
\r
168 for (i = 0; i < 8; i++, pm <<= 1)
\r
170 if ((pm & 0x8000) && start == -1)
\r
172 else if (!(pm & 0x8000) && start != -1)
\r
174 if (sep++) p += sprintf (p, "/");
\r
175 if (start == i - 1) p += sprintf (p, "D%d", start);
\r
176 else p += sprintf (p, "D%d-D%d", start, i - 1);
\r
182 if (sep++) p += sprintf (p, "/");
\r
183 if (start == 7) p += sprintf (p, "D7");
\r
184 else p += sprintf (p, "D%d-D7", start);
\r
188 for (i = 0; i < 8; i++, pm <<= 1)
\r
190 if ((pm & 0x8000) && start == -1)
\r
192 else if (!(pm & 0x8000) && start != -1)
\r
194 if (sep++) p += sprintf (p, "/");
\r
195 if (start == i - 1) p += sprintf (p, "A%d", start);
\r
196 else p += sprintf (p, "A%d-A%d", start, i - 1);
\r
202 if (sep++) p += sprintf (p, "/");
\r
203 if (start == 7) p += sprintf (p, "A7");
\r
204 else p += sprintf (p, "A%d-A7", start);
\r
211 int Dasm68000 (char *pBase, char *buffer, int pc)
\r
213 char *ea, *ea2, *p = pBase;
\r
214 unsigned short op, lo, rhi, rlo;
\r
221 rhi = (op >> 9) & 7;
\r
223 switch (op & 0xffc0)
\r
228 sprintf (buffer, "ORI #$%lX,CCR", pm & 0xff);
\r
231 ea = MakeEA (lo, p, 1, &count); p += count;
\r
232 sprintf (buffer, "ORI.B #$%lX,%s", pm & 0xff, ea);
\r
238 sprintf (buffer, "ORI #$%lX,SR", pm & 0xffff);
\r
241 ea = MakeEA (lo, p, 2, &count); p += count;
\r
242 sprintf (buffer, "ORI.W #$%lX,%s", pm & 0xffff, ea);
\r
246 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
247 sprintf (buffer, "ORI.L #$%lX,%s", pm, ea);
\r
249 case 0x0100: case 0x0300: case 0x0500: case 0x0700: case 0x0900: case 0x0b00: case 0x0d00: case 0x0f00:
\r
250 if ((lo & 0x38) == 0x08)
\r
253 sprintf (buffer, "MOVEP.W ($%lX,A%d),D%d", pm, rlo, rhi);
\r
257 ea = MakeEA (lo, p, 2, &count); p += count;
\r
258 sprintf (buffer, "BTST D%d,%s", rhi, ea);
\r
261 case 0x0140: case 0x0340: case 0x0540: case 0x0740: case 0x0940: case 0x0b40: case 0x0d40: case 0x0f40:
\r
262 if ((lo & 0x38) == 0x08)
\r
265 sprintf (buffer, "MOVEP.L ($%lX,A%d),D%d", pm, rlo, rhi);
\r
269 ea = MakeEA (lo, p, 2, &count); p += count;
\r
270 sprintf (buffer, "BCHG D%d,%s", rhi, ea);
\r
273 case 0x0180: case 0x0380: case 0x0580: case 0x0780: case 0x0980: case 0x0b80: case 0x0d80: case 0x0f80:
\r
274 if ((lo & 0x38) == 0x08)
\r
277 sprintf (buffer, "MOVEP.W D%d,($%lX,A%d)", rhi, pm, rlo);
\r
281 ea = MakeEA (lo, p, 2, &count); p += count;
\r
282 sprintf (buffer, "BCLR D%d,%s", rhi, ea);
\r
285 case 0x01c0: case 0x03c0: case 0x05c0: case 0x07c0: case 0x09c0: case 0x0bc0: case 0x0dc0: case 0x0fc0:
\r
286 if ((lo & 0x38) == 0x08)
\r
289 sprintf (buffer, "MOVEP.L D%d,($%lX,A%d)", rhi, pm, rlo);
\r
293 ea = MakeEA (lo, p, 2, &count); p += count;
\r
294 sprintf (buffer, "BSET D%d,%s", rhi, ea);
\r
300 sprintf (buffer, "ANDI #$%lX,CCR", pm & 0xff);
\r
303 ea = MakeEA (lo, p, 1, &count); p += count;
\r
304 sprintf (buffer, "ANDI.B #$%lX,%s", pm & 0xff, ea);
\r
310 sprintf (buffer, "ANDI #$%lX,SR", pm & 0xffff);
\r
313 ea = MakeEA (lo, p, 2, &count); p += count;
\r
314 sprintf (buffer, "ANDI.W #$%lX,%s", pm & 0xffff, ea);
\r
318 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
319 sprintf (buffer, "ANDI.L #$%lX,%s", pm, ea);
\r
322 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
323 sprintf (buffer, "SUBI.B #$%lX,%s", pm & 0xff, ea);
\r
326 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
327 sprintf (buffer, "SUBI.W #$%lX,%s", pm & 0xffff, ea);
\r
330 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
331 sprintf (buffer, "SUBI.L #$%lX,%s", pm, ea);
\r
334 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
335 sprintf (buffer, "ADDI.B #$%lX,%s", pm & 0xff, ea);
\r
338 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
339 sprintf (buffer, "ADDI.W #$%lX,%s", pm & 0xffff, ea);
\r
342 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
343 sprintf (buffer, "ADDI.L #$%lX,%s", pm, ea);
\r
346 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
347 sprintf (buffer, "BTST #$%lX,%s", pm & 0xff, ea);
\r
350 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
351 sprintf (buffer, "BCHG #$%lX,%s", pm & 0xff, ea);
\r
354 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
355 sprintf (buffer, "BCLR #$%lX,%s", pm & 0xff, ea);
\r
358 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
359 sprintf (buffer, "BSET #$%lX,%s", pm & 0xff, ea);
\r
364 sprintf (buffer, "EORI #$%lX,CCR", pm & 0xff);
\r
367 ea = MakeEA (lo, p, 1, &count); p += count;
\r
368 sprintf (buffer, "EORI.B #$%lX,%s", pm & 0xff, ea);
\r
374 sprintf (buffer, "EORI #$%lX,SR", pm & 0xffff);
\r
377 ea = MakeEA (lo, p, 2, &count); p += count;
\r
378 sprintf (buffer, "EORI.W #$%lX,%s", pm & 0xffff, ea);
\r
382 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
383 sprintf (buffer, "EORI.L #$%lX,%s", pm, ea);
\r
386 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
387 sprintf (buffer, "CMPI.B #$%lX,%s", pm & 0xff, ea);
\r
390 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
391 sprintf (buffer, "CMPI.W #$%lX,%s", pm & 0xffff, ea);
\r
394 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
395 sprintf (buffer, "CMPI.L #$%lX,%s", pm, ea);
\r
398 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
402 sprintf (buffer, "MOVES.B A%ld,%s", (pm >> 12) & 7, ea);
\r
404 sprintf (buffer, "MOVES.B D%ld,%s", (pm >> 12) & 7, ea);
\r
409 sprintf (buffer, "MOVES.B %s,A%ld", ea, (pm >> 12) & 7);
\r
411 sprintf (buffer, "MOVES.B %s,D%ld", ea, (pm >> 12) & 7);
\r
415 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
419 sprintf (buffer, "MOVES.W A%ld,%s", (pm >> 12) & 7, ea);
\r
421 sprintf (buffer, "MOVES.W D%ld,%s", (pm >> 12) & 7, ea);
\r
426 sprintf (buffer, "MOVES.W %s,A%ld", ea, (pm >> 12) & 7);
\r
428 sprintf (buffer, "MOVES.W %s,D%ld", ea, (pm >> 12) & 7);
\r
432 PARAM_WORD(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
436 sprintf (buffer, "MOVES.L A%ld,%s", (pm >> 12) & 7, ea);
\r
438 sprintf (buffer, "MOVES.L D%ld,%s", (pm >> 12) & 7, ea);
\r
443 sprintf (buffer, "MOVES.L %s,A%ld", ea, (pm >> 12) & 7);
\r
445 sprintf (buffer, "MOVES.L %s,D%ld", ea, (pm >> 12) & 7);
\r
448 case 0x1000: case 0x1080: case 0x10c0: case 0x1100: case 0x1140: case 0x1180: case 0x11c0:
\r
449 case 0x1200: case 0x1280: case 0x12c0: case 0x1300: case 0x1340: case 0x1380: case 0x13c0:
\r
450 case 0x1400: case 0x1480: case 0x14c0: case 0x1500: case 0x1540: case 0x1580:
\r
451 case 0x1600: case 0x1680: case 0x16c0: case 0x1700: case 0x1740: case 0x1780:
\r
452 case 0x1800: case 0x1880: case 0x18c0: case 0x1900: case 0x1940: case 0x1980:
\r
453 case 0x1a00: case 0x1a80: case 0x1ac0: case 0x1b00: case 0x1b40: case 0x1b80:
\r
454 case 0x1c00: case 0x1c80: case 0x1cc0: case 0x1d00: case 0x1d40: case 0x1d80:
\r
455 case 0x1e00: case 0x1e80: case 0x1ec0: case 0x1f00: case 0x1f40: case 0x1f80:
\r
456 ea = MakeEA (lo, p, 1, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 1, &count); p += count;
\r
457 sprintf (buffer, "MOVE.B %s,%s", ea, ea2);
\r
459 case 0x2000: case 0x2080: case 0x20c0: case 0x2100: case 0x2140: case 0x2180: case 0x21c0:
\r
460 case 0x2200: case 0x2280: case 0x22c0: case 0x2300: case 0x2340: case 0x2380: case 0x23c0:
\r
461 case 0x2400: case 0x2480: case 0x24c0: case 0x2500: case 0x2540: case 0x2580:
\r
462 case 0x2600: case 0x2680: case 0x26c0: case 0x2700: case 0x2740: case 0x2780:
\r
463 case 0x2800: case 0x2880: case 0x28c0: case 0x2900: case 0x2940: case 0x2980:
\r
464 case 0x2a00: case 0x2a80: case 0x2ac0: case 0x2b00: case 0x2b40: case 0x2b80:
\r
465 case 0x2c00: case 0x2c80: case 0x2cc0: case 0x2d00: case 0x2d40: case 0x2d80:
\r
466 case 0x2e00: case 0x2e80: case 0x2ec0: case 0x2f00: case 0x2f40: case 0x2f80:
\r
467 ea = MakeEA (lo, p, 4, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 4, &count); p += count;
\r
468 sprintf (buffer, "MOVE.L %s,%s", ea, ea2);
\r
470 case 0x2040: case 0x2240: case 0x2440: case 0x2640: case 0x2840: case 0x2a40: case 0x2c40: case 0x2e40:
\r
471 ea = MakeEA (lo, p, 4, &count); p += count;
\r
472 sprintf (buffer, "MOVEA.L %s,A%d", ea, rhi);
\r
474 case 0x3000: case 0x3080: case 0x30c0: case 0x3100: case 0x3140: case 0x3180: case 0x31c0:
\r
475 case 0x3200: case 0x3280: case 0x32c0: case 0x3300: case 0x3340: case 0x3380: case 0x33c0:
\r
476 case 0x3400: case 0x3480: case 0x34c0: case 0x3500: case 0x3540: case 0x3580:
\r
477 case 0x3600: case 0x3680: case 0x36c0: case 0x3700: case 0x3740: case 0x3780:
\r
478 case 0x3800: case 0x3880: case 0x38c0: case 0x3900: case 0x3940: case 0x3980:
\r
479 case 0x3a00: case 0x3a80: case 0x3ac0: case 0x3b00: case 0x3b40: case 0x3b80:
\r
480 case 0x3c00: case 0x3c80: case 0x3cc0: case 0x3d00: case 0x3d40: case 0x3d80:
\r
481 case 0x3e00: case 0x3e80: case 0x3ec0: case 0x3f00: case 0x3f40: case 0x3f80:
\r
482 ea = MakeEA (lo, p, 2, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 2, &count); p += count;
\r
483 sprintf (buffer, "MOVE.W %s,%s", ea, ea2);
\r
485 case 0x3040: case 0x3240: case 0x3440: case 0x3640: case 0x3840: case 0x3a40: case 0x3c40: case 0x3e40:
\r
486 ea = MakeEA (lo, p, 2, &count); p += count;
\r
487 sprintf (buffer, "MOVEA.W %s,A%d", ea, rhi);
\r
490 ea = MakeEA (lo, p, 1, &count); p += count;
\r
491 sprintf (buffer, "NEGX.B %s", ea);
\r
494 ea = MakeEA (lo, p, 2, &count); p += count;
\r
495 sprintf (buffer, "NEGX.W %s", ea);
\r
498 ea = MakeEA (lo, p, 4, &count); p += count;
\r
499 sprintf (buffer, "NEGX.L %s", ea);
\r
502 ea = MakeEA (lo, p, 2, &count); p += count;
\r
503 sprintf (buffer, "MOVE SR,%s", ea);
\r
505 case 0x4180: case 0x4380: case 0x4580: case 0x4780: case 0x4980: case 0x4b80: case 0x4d80: case 0x4f80:
\r
506 ea = MakeEA (lo, p, 2, &count); p += count;
\r
507 sprintf (buffer, "CHK.W %s,D%d", ea, rhi);
\r
509 case 0x41c0: case 0x43c0: case 0x45c0: case 0x47c0: case 0x49c0: case 0x4bc0: case 0x4dc0: case 0x4fc0:
\r
510 ea = MakeEA (lo, p, 4, &count); p += count;
\r
511 sprintf (buffer, "LEA %s,A%d", ea, rhi);
\r
514 ea = MakeEA (lo, p, 1, &count); p += count;
\r
515 sprintf (buffer, "CLR.B %s", ea);
\r
518 ea = MakeEA (lo, p, 2, &count); p += count;
\r
519 sprintf (buffer, "CLR.W %s", ea);
\r
522 ea = MakeEA (lo, p, 4, &count); p += count;
\r
523 sprintf (buffer, "CLR.L %s", ea);
\r
526 ea = MakeEA (lo, p, 2, &count); p += count;
\r
527 sprintf (buffer, "MOVE CCR,%s", ea);
\r
530 ea = MakeEA (lo, p, 1, &count); p += count;
\r
531 sprintf (buffer, "NEG.B %s", ea);
\r
534 ea = MakeEA (lo, p, 2, &count); p += count;
\r
535 sprintf (buffer, "NEG.W %s", ea);
\r
538 ea = MakeEA (lo, p, 4, &count); p += count;
\r
539 sprintf (buffer, "NEG.L %s", ea);
\r
542 ea = MakeEA (lo, p, 2, &count); p += count;
\r
543 sprintf (buffer, "MOVE %s,CCR", ea);
\r
546 ea = MakeEA (lo, p, 1, &count); p += count;
\r
547 sprintf (buffer, "NOT.B %s", ea);
\r
550 ea = MakeEA (lo, p, 2, &count); p += count;
\r
551 sprintf (buffer, "NOT.W %s", ea);
\r
554 ea = MakeEA (lo, p, 4, &count); p += count;
\r
555 sprintf (buffer, "NOT.L %s", ea);
\r
558 ea = MakeEA (lo, p, 2, &count); p += count;
\r
559 sprintf (buffer, "MOVE %s,SR", ea);
\r
562 ea = MakeEA (lo, p, 1, &count); p += count;
\r
563 sprintf (buffer, "NBCD.B %s", ea);
\r
566 if ((lo & 0x38) == 0x00)
\r
567 sprintf (buffer, "SWAP D%d", rlo);
\r
570 ea = MakeEA (lo, p, 4, &count); p += count;
\r
571 sprintf (buffer, "PEA %s", ea);
\r
575 if ((lo & 0x38) == 0x00)
\r
576 sprintf (buffer, "EXT.W D%d", rlo);
\r
580 PARAM_WORD (pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
581 b += sprintf (b, "MOVEM.W ");
\r
582 if ((lo & 0x38) != 0x20) b = MakeRegList (b, pm);
\r
583 else b = MakeRevRegList (b, pm);
\r
584 sprintf (b, ",%s", ea);
\r
588 if ((lo & 0x38) == 0x00)
\r
589 sprintf (buffer, "EXT.L D%d", rlo);
\r
593 PARAM_WORD (pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
594 b += sprintf (b, "MOVEM.L ");
\r
595 if ((lo & 0x38) != 0x20) b = MakeRegList (b, pm);
\r
596 else b = MakeRevRegList (b, pm);
\r
597 sprintf (b, ",%s", ea);
\r
601 ea = MakeEA (lo, p, 1, &count); p += count;
\r
602 sprintf (buffer, "TST.B %s", ea);
\r
605 ea = MakeEA (lo, p, 2, &count); p += count;
\r
606 sprintf (buffer, "TST.W %s", ea);
\r
609 ea = MakeEA (lo, p, 4, &count); p += count;
\r
610 sprintf (buffer, "TST.L %s", ea);
\r
613 ea = MakeEA (lo, p, 1, &count); p += count;
\r
614 sprintf (buffer, "TAS.B %s", ea);
\r
619 PARAM_WORD (pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
620 b += sprintf (b, "MOVEM.W %s,", ea);
\r
621 b = MakeRegList (b, pm);
\r
627 PARAM_WORD (pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
628 b += sprintf (b, "MOVEM.L %s,", ea);
\r
629 b = MakeRegList (b, pm);
\r
633 if ((lo & 30) == 0x00)
\r
634 sprintf (buffer, "TRAP #$%X", lo & 15);
\r
635 else if ((lo & 0x38) == 0x10)
\r
638 sprintf (buffer, "LINK A%d,#$%lX", rlo, pm);
\r
640 else if ((lo & 0x38) == 0x18)
\r
642 sprintf (buffer, "UNLK A%d", rlo);
\r
644 else if ((lo & 0x38) == 0x20)
\r
645 sprintf (buffer, "MOVE A%d,USP", rlo);
\r
646 else if ((lo & 0x38) == 0x28)
\r
647 sprintf (buffer, "MOVE USP,A%d", rlo);
\r
648 else if (lo == 0x30)
\r
649 sprintf (buffer, "RESET");
\r
650 else if (lo == 0x31)
\r
651 sprintf (buffer, "NOP");
\r
652 else if (lo == 0x32)
\r
653 sprintf (buffer, "STOP");
\r
654 else if (lo == 0x33)
\r
655 sprintf (buffer, "RTE");
\r
656 else if (lo == 0x35)
\r
657 sprintf (buffer, "RTS");
\r
658 else if (lo == 0x36)
\r
659 sprintf (buffer, "TRAPV");
\r
660 else if (lo == 0x37)
\r
661 sprintf (buffer, "RTR");
\r
662 else if (lo == 0x3a)
\r
665 switch (pm & 0xfff)
\r
667 case 0x000: ea = "SFC"; break;
\r
668 case 0x001: ea = "DFC"; break;
\r
669 case 0x800: ea = "USP"; break;
\r
670 case 0x801: ea = "VBR"; break;
\r
671 default: ea = "???"; break;
\r
674 sprintf (buffer, "MOVEC %s,A%ld", ea, (pm >> 12) & 7);
\r
676 sprintf (buffer, "MOVEC %s,D%ld", ea, (pm >> 12) & 7);
\r
678 else if (lo == 0x3b)
\r
681 switch (pm & 0xfff)
\r
683 case 0x000: ea = "SFC"; break;
\r
684 case 0x001: ea = "DFC"; break;
\r
685 case 0x800: ea = "USP"; break;
\r
686 case 0x801: ea = "VBR"; break;
\r
687 default: ea = "???"; break;
\r
690 sprintf (buffer, "MOVEC A%ld,%s", (pm >> 12) & 7, ea);
\r
692 sprintf (buffer, "MOVEC D%ld,%s", (pm >> 12) & 7, ea);
\r
695 sprintf (buffer, "DC.W $%X", op);
\r
698 ea = MakeEA (lo, p, 4, &count); p += count;
\r
699 sprintf (buffer, "JSR %s", ea);
\r
702 ea = MakeEA (lo, p, 4, &count); p += count;
\r
703 sprintf (buffer, "JMP %s", ea);
\r
705 case 0x5000: case 0x5200: case 0x5400: case 0x5600: case 0x5800: case 0x5a00: case 0x5c00: case 0x5e00:
\r
706 ea = MakeEA (lo, p, 1, &count); p += count;
\r
707 sprintf (buffer, "ADDQ.B #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
709 case 0x5040: case 0x5240: case 0x5440: case 0x5640: case 0x5840: case 0x5a40: case 0x5c40: case 0x5e40:
\r
710 ea = MakeEA (lo, p, 2, &count); p += count;
\r
711 sprintf (buffer, "ADDQ.W #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
713 case 0x5080: case 0x5280: case 0x5480: case 0x5680: case 0x5880: case 0x5a80: case 0x5c80: case 0x5e80:
\r
714 ea = MakeEA (lo, p, 4, &count); p += count;
\r
715 sprintf (buffer, "ADDQ.L #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
717 case 0x50c0: case 0x52c0: case 0x54c0: case 0x56c0: case 0x58c0: case 0x5ac0: case 0x5cc0: case 0x5ec0:
\r
718 case 0x51c0: case 0x53c0: case 0x55c0: case 0x57c0: case 0x59c0: case 0x5bc0: case 0x5dc0: case 0x5fc0:
\r
719 if ((lo & 0x38) == 0x08)
\r
723 sprintf (buffer, "DB%s D%d,*-$%X [%X]", ccodes[(op >> 8) & 15], rlo, (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
725 sprintf (buffer, "DB%s D%d,*+$%lX [%lX]", ccodes[(op >> 8) & 15], rlo, pm - 2, pc + pm + 2);
\r
729 ea = MakeEA (lo, p, 1, &count); p += count;
\r
730 sprintf (buffer, "S%s.B %s", ccodes[(op >> 8) & 15], ea);
\r
733 case 0x5100: case 0x5300: case 0x5500: case 0x5700: case 0x5900: case 0x5b00: case 0x5d00: case 0x5f00:
\r
734 ea = MakeEA (lo, p, 1, &count); p += count;
\r
735 sprintf (buffer, "SUBQ.B #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
737 case 0x5140: case 0x5340: case 0x5540: case 0x5740: case 0x5940: case 0x5b40: case 0x5d40: case 0x5f40:
\r
738 ea = MakeEA (lo, p, 2, &count); p += count;
\r
739 sprintf (buffer, "SUBQ.W #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
741 case 0x5180: case 0x5380: case 0x5580: case 0x5780: case 0x5980: case 0x5b80: case 0x5d80: case 0x5f80:
\r
742 ea = MakeEA (lo, p, 4, &count); p += count;
\r
743 sprintf (buffer, "SUBQ.L #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
745 case 0x6000: case 0x6040: case 0x6080: case 0x60c0:
\r
751 sprintf (buffer, "BRA *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
753 sprintf (buffer, "BRA *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
758 sprintf (buffer, "BRA.S *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
760 sprintf (buffer, "BRA.S *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
763 case 0x6100: case 0x6140: case 0x6180: case 0x61c0:
\r
769 sprintf (buffer, "BSR *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
771 sprintf (buffer, "BSR *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
776 sprintf (buffer, "BSR.S *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
778 sprintf (buffer, "BSR.S *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
781 case 0x6200: case 0x6240: case 0x6280: case 0x62c0: case 0x6300: case 0x6340: case 0x6380: case 0x63c0:
\r
782 case 0x6400: case 0x6440: case 0x6480: case 0x64c0: case 0x6500: case 0x6540: case 0x6580: case 0x65c0:
\r
783 case 0x6600: case 0x6640: case 0x6680: case 0x66c0: case 0x6700: case 0x6740: case 0x6780: case 0x67c0:
\r
784 case 0x6800: case 0x6840: case 0x6880: case 0x68c0: case 0x6900: case 0x6940: case 0x6980: case 0x69c0:
\r
785 case 0x6a00: case 0x6a40: case 0x6a80: case 0x6ac0: case 0x6b00: case 0x6b40: case 0x6b80: case 0x6bc0:
\r
786 case 0x6c00: case 0x6c40: case 0x6c80: case 0x6cc0: case 0x6d00: case 0x6d40: case 0x6d80: case 0x6dc0:
\r
787 case 0x6e00: case 0x6e40: case 0x6e80: case 0x6ec0: case 0x6f00: case 0x6f40: case 0x6f80: case 0x6fc0:
\r
793 sprintf (buffer, "B%s *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
795 sprintf (buffer, "B%s *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);
\r
800 sprintf (buffer, "B%s.S *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
802 sprintf (buffer, "B%s.S *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);
\r
805 case 0x7000: case 0x7040: case 0x7080: case 0x70c0:
\r
806 case 0x7200: case 0x7240: case 0x7280: case 0x72c0:
\r
807 case 0x7400: case 0x7440: case 0x7480: case 0x74c0:
\r
808 case 0x7600: case 0x7640: case 0x7680: case 0x76c0:
\r
809 case 0x7800: case 0x7840: case 0x7880: case 0x78c0:
\r
810 case 0x7a00: case 0x7a40: case 0x7a80: case 0x7ac0:
\r
811 case 0x7c00: case 0x7c40: case 0x7c80: case 0x7cc0:
\r
812 case 0x7e00: case 0x7e40: case 0x7e80: case 0x7ec0:
\r
815 sprintf (buffer, "MOVEQ #$-%X,D%d", -(signed char)pm, rhi);
\r
817 sprintf (buffer, "MOVEQ #$%lX,D%d", pm, rhi);
\r
819 case 0x8000: case 0x8200: case 0x8400: case 0x8600: case 0x8800: case 0x8a00: case 0x8c00: case 0x8e00:
\r
820 ea = MakeEA (lo, p, 1, &count); p += count;
\r
821 sprintf (buffer, "OR.B %s,D%d", ea, rhi);
\r
823 case 0x8040: case 0x8240: case 0x8440: case 0x8640: case 0x8840: case 0x8a40: case 0x8c40: case 0x8e40:
\r
824 ea = MakeEA (lo, p, 2, &count); p += count;
\r
825 sprintf (buffer, "OR.W %s,D%d", ea, rhi);
\r
827 case 0x8080: case 0x8280: case 0x8480: case 0x8680: case 0x8880: case 0x8a80: case 0x8c80: case 0x8e80:
\r
828 ea = MakeEA (lo, p, 4, &count); p += count;
\r
829 sprintf (buffer, "OR.L %s,D%d", ea, rhi);
\r
831 case 0x80c0: case 0x82c0: case 0x84c0: case 0x86c0: case 0x88c0: case 0x8ac0: case 0x8cc0: case 0x8ec0:
\r
832 ea = MakeEA (lo, p, 2, &count); p += count;
\r
833 sprintf (buffer, "DIVU.W %s,D%d", ea, rhi);
\r
835 case 0x8100: case 0x8300: case 0x8500: case 0x8700: case 0x8900: case 0x8b00: case 0x8d00: case 0x8f00:
\r
836 ea = MakeEA (lo, p, 1, &count); p += count;
\r
837 sprintf (buffer, "OR.B D%d,%s", rhi, ea);
\r
839 case 0x8140: case 0x8340: case 0x8540: case 0x8740: case 0x8940: case 0x8b40: case 0x8d40: case 0x8f40:
\r
840 ea = MakeEA (lo, p, 2, &count); p += count;
\r
841 sprintf (buffer, "OR.W D%d,%s", rhi, ea);
\r
843 case 0x8180: case 0x8380: case 0x8580: case 0x8780: case 0x8980: case 0x8b80: case 0x8d80: case 0x8f80:
\r
844 ea = MakeEA (lo, p, 4, &count); p += count;
\r
845 sprintf (buffer, "OR.L D%d,%s", rhi, ea);
\r
847 case 0x81c0: case 0x83c0: case 0x85c0: case 0x87c0: case 0x89c0: case 0x8bc0: case 0x8dc0: case 0x8fc0:
\r
848 ea = MakeEA (lo, p, 2, &count); p += count;
\r
849 sprintf (buffer, "DIVS.W %s,D%d", ea, rhi);
\r
851 case 0x9000: case 0x9200: case 0x9400: case 0x9600: case 0x9800: case 0x9a00: case 0x9c00: case 0x9e00:
\r
852 ea = MakeEA (lo, p, 1, &count); p += count;
\r
853 sprintf (buffer, "SUB.B %s,D%d", ea, rhi);
\r
855 case 0x9040: case 0x9240: case 0x9440: case 0x9640: case 0x9840: case 0x9a40: case 0x9c40: case 0x9e40:
\r
856 ea = MakeEA (lo, p, 2, &count); p += count;
\r
857 sprintf (buffer, "SUB.W %s,D%d", ea, rhi);
\r
859 case 0x9080: case 0x9280: case 0x9480: case 0x9680: case 0x9880: case 0x9a80: case 0x9c80: case 0x9e80:
\r
860 ea = MakeEA (lo, p, 4, &count); p += count;
\r
861 sprintf (buffer, "SUB.L %s,D%d", ea, rhi);
\r
863 case 0x90c0: case 0x92c0: case 0x94c0: case 0x96c0: case 0x98c0: case 0x9ac0: case 0x9cc0: case 0x9ec0:
\r
864 ea = MakeEA (lo, p, 2, &count); p += count;
\r
865 sprintf (buffer, "SUBA.W %s,A%d", ea, rhi);
\r
867 case 0x9100: case 0x9300: case 0x9500: case 0x9700: case 0x9900: case 0x9b00: case 0x9d00: case 0x9f00:
\r
868 if ((lo & 0x30) == 0)
\r
871 sprintf (buffer, "SUBX.B -(A%d),-(A%d)", rlo, rhi);
\r
873 sprintf (buffer, "SUBX.B D%d,D%d", rlo, rhi);
\r
877 ea = MakeEA (lo, p, 1,&count); p += count;
\r
878 sprintf (buffer, "SUB.B D%d,%s", rhi, ea);
\r
881 case 0x9140: case 0x9340: case 0x9540: case 0x9740: case 0x9940: case 0x9b40: case 0x9d40: case 0x9f40:
\r
882 if ((lo & 0x30) == 0)
\r
885 sprintf (buffer, "SUBX.W -(A%d),-(A%d)", rlo, rhi);
\r
887 sprintf (buffer, "SUBX.W D%d,D%d", rlo, rhi);
\r
891 ea = MakeEA (lo, p, 2, &count); p += count;
\r
892 sprintf (buffer, "SUB.W D%d,%s", rhi, ea);
\r
895 case 0x9180: case 0x9380: case 0x9580: case 0x9780: case 0x9980: case 0x9b80: case 0x9d80: case 0x9f80:
\r
896 if ((lo & 0x30) == 0)
\r
899 sprintf (buffer, "SUBX.L -(A%d),-(A%d)", rlo, rhi);
\r
901 sprintf (buffer, "SUBX.L D%d,D%d", rlo, rhi);
\r
905 ea = MakeEA (lo, p, 4, &count); p += count;
\r
906 sprintf (buffer, "SUB.L D%d,%s", rhi, ea);
\r
909 case 0x91c0: case 0x93c0: case 0x95c0: case 0x97c0: case 0x99c0: case 0x9bc0: case 0x9dc0: case 0x9fc0:
\r
910 ea = MakeEA (lo, p, 4, &count); p += count;
\r
911 sprintf (buffer, "SUBA.L %s,A%d", ea, rhi);
\r
913 case 0xb000: case 0xb200: case 0xb400: case 0xb600: case 0xb800: case 0xba00: case 0xbc00: case 0xbe00:
\r
914 ea = MakeEA (lo, p, 1, &count); p += count;
\r
915 sprintf (buffer, "CMP.B %s,D%d", ea, rhi);
\r
917 case 0xb040: case 0xb240: case 0xb440: case 0xb640: case 0xb840: case 0xba40: case 0xbc40: case 0xbe40:
\r
918 ea = MakeEA (lo, p, 2, &count); p += count;
\r
919 sprintf (buffer, "CMP.W %s,D%d", ea, rhi);
\r
921 case 0xb080: case 0xb280: case 0xb480: case 0xb680: case 0xb880: case 0xba80: case 0xbc80: case 0xbe80:
\r
922 ea = MakeEA (lo, p, 4, &count); p += count;
\r
923 sprintf (buffer, "CMP.L %s,D%d", ea, rhi);
\r
925 case 0xb0c0: case 0xb2c0: case 0xb4c0: case 0xb6c0: case 0xb8c0: case 0xbac0: case 0xbcc0: case 0xbec0:
\r
926 ea = MakeEA (lo, p, 2, &count); p += count;
\r
927 sprintf (buffer, "CMPA.W %s,A%d", ea, rhi);
\r
929 case 0xb100: case 0xb300: case 0xb500: case 0xb700: case 0xb900: case 0xbb00: case 0xbd00: case 0xbf00:
\r
930 if ((lo & 0x38) == 0x08)
\r
931 sprintf (buffer, "CMPM.B (A%d)+,(A%d)+", rlo, rhi);
\r
934 ea = MakeEA (lo, p, 1, &count); p += count;
\r
935 sprintf (buffer, "EOR.B D%d,%s", rhi, ea);
\r
938 case 0xb140: case 0xb340: case 0xb540: case 0xb740: case 0xb940: case 0xbb40: case 0xbd40: case 0xbf40:
\r
939 if ((lo & 0x38) == 0x08)
\r
940 sprintf (buffer, "CMPM.W (A%d)+,(A%d)+", rlo, rhi);
\r
943 ea = MakeEA (lo, p, 2, &count); p += count;
\r
944 sprintf (buffer, "EOR.W D%d,%s", rhi, ea);
\r
947 case 0xb180: case 0xb380: case 0xb580: case 0xb780: case 0xb980: case 0xbb80: case 0xbd80: case 0xbf80:
\r
948 if ((lo & 0x38) == 0x08)
\r
949 sprintf (buffer, "CMPM.L (A%d)+,(A%d)+", rlo, rhi);
\r
952 ea = MakeEA (lo, p, 4, &count); p += count;
\r
953 sprintf (buffer, "EOR.L D%d,%s", rhi, ea);
\r
956 case 0xb1c0: case 0xb3c0: case 0xb5c0: case 0xb7c0: case 0xb9c0: case 0xbbc0: case 0xbdc0: case 0xbfc0:
\r
957 ea = MakeEA (lo, p, 4, &count); p += count;
\r
958 sprintf (buffer, "CMPA.L %s,A%d", ea, rhi);
\r
960 case 0xc000: case 0xc200: case 0xc400: case 0xc600: case 0xc800: case 0xca00: case 0xcc00: case 0xce00:
\r
961 ea = MakeEA (lo, p, 1, &count); p += count;
\r
962 sprintf (buffer, "AND.B %s,D%d", ea, rhi);
\r
964 case 0xc040: case 0xc240: case 0xc440: case 0xc640: case 0xc840: case 0xca40: case 0xcc40: case 0xce40:
\r
965 ea = MakeEA (lo, p, 2, &count); p += count;
\r
966 sprintf (buffer, "AND.W %s,D%d", ea, rhi);
\r
968 case 0xc080: case 0xc280: case 0xc480: case 0xc680: case 0xc880: case 0xca80: case 0xcc80: case 0xce80:
\r
969 ea = MakeEA (lo, p, 4, &count); p += count;
\r
970 sprintf (buffer, "AND.L %s,D%d", ea, rhi);
\r
972 case 0xc0c0: case 0xc2c0: case 0xc4c0: case 0xc6c0: case 0xc8c0: case 0xcac0: case 0xccc0: case 0xcec0:
\r
973 ea = MakeEA (lo, p, 2, &count); p += count;
\r
974 sprintf (buffer, "MULU.W %s,D%d", ea, rhi);
\r
976 case 0xc100: case 0xc300: case 0xc500: case 0xc700: case 0xc900: case 0xcb00: case 0xcd00: case 0xcf00:
\r
977 if ((lo & 0x30) == 0)
\r
980 sprintf (buffer, "ABCD.B -(A%d),-(A%d)", rlo, rhi);
\r
982 sprintf (buffer, "ABCD.B D%d,D%d", rlo, rhi);
\r
986 ea = MakeEA (lo, p, 1, &count); p += count;
\r
987 sprintf (buffer, "AND.B D%d,%s", rhi, ea);
\r
990 case 0xc140: case 0xc340: case 0xc540: case 0xc740: case 0xc940: case 0xcb40: case 0xcd40: case 0xcf40:
\r
991 if ((lo & 0x30) == 0)
\r
994 sprintf (buffer, "EXG A%d,A%d", rhi, rlo);
\r
996 sprintf (buffer, "EXG D%d,D%d", rhi, rlo);
\r
1000 ea = MakeEA (lo, p, 2,&count); p += count;
\r
1001 sprintf (buffer, "AND.W D%d,%s", rhi, ea);
\r
1004 case 0xc180: case 0xc380: case 0xc580: case 0xc780: case 0xc980: case 0xcb80: case 0xcd80: case 0xcf80:
\r
1005 if ((lo & 0x38) == 0x08)
\r
1006 sprintf (buffer, "EXG D%d,A%d", rhi, rlo);
\r
1009 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1010 sprintf (buffer, "AND.L D%d,%s", rhi, ea);
\r
1013 case 0xc1c0: case 0xc3c0: case 0xc5c0: case 0xc7c0: case 0xc9c0: case 0xcbc0: case 0xcdc0: case 0xcfc0:
\r
1014 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1015 sprintf (buffer, "MULS.W %s,D%d", ea, rhi);
\r
1017 case 0xd000: case 0xd200: case 0xd400: case 0xd600: case 0xd800: case 0xda00: case 0xdc00: case 0xde00:
\r
1018 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1019 sprintf (buffer, "ADD.B %s,D%d", ea, rhi);
\r
1021 case 0xd040: case 0xd240: case 0xd440: case 0xd640: case 0xd840: case 0xda40: case 0xdc40: case 0xde40:
\r
1022 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1023 sprintf (buffer, "ADD.W %s,D%d", ea, rhi);
\r
1025 case 0xd080: case 0xd280: case 0xd480: case 0xd680: case 0xd880: case 0xda80: case 0xdc80: case 0xde80:
\r
1026 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1027 sprintf (buffer, "ADD.L %s,D%d", ea, rhi);
\r
1029 case 0xd0c0: case 0xd2c0: case 0xd4c0: case 0xd6c0: case 0xd8c0: case 0xdac0: case 0xdcc0: case 0xdec0:
\r
1030 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1031 sprintf (buffer, "ADDA.W %s,A%d", ea, rhi);
\r
1033 case 0xd100: case 0xd300: case 0xd500: case 0xd700: case 0xd900: case 0xdb00: case 0xdd00: case 0xdf00:
\r
1034 if ((lo & 0x30) == 0)
\r
1037 sprintf (buffer, "ADDX.B -(A%d),-(A%d)", rlo, rhi);
\r
1039 sprintf (buffer, "ADDX.B D%d,D%d", rlo, rhi);
\r
1043 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1044 sprintf (buffer, "ADD.B D%d,%s", rhi, ea);
\r
1047 case 0xd140: case 0xd340: case 0xd540: case 0xd740: case 0xd940: case 0xdb40: case 0xdd40: case 0xdf40:
\r
1048 if ((lo & 0x30) == 0)
\r
1051 sprintf (buffer, "ADDX.W -(A%d),-(A%d)", rlo, rhi);
\r
1053 sprintf (buffer, "ADDX.W D%d,D%d", rlo, rhi);
\r
1057 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1058 sprintf (buffer, "ADD.W D%d,%s", rhi, ea);
\r
1061 case 0xd180: case 0xd380: case 0xd580: case 0xd780: case 0xd980: case 0xdb80: case 0xdd80: case 0xdf80:
\r
1062 if ((lo & 0x30) == 0)
\r
1065 sprintf (buffer, "ADDX.L -(A%d),-(A%d)", rlo, rhi);
\r
1067 sprintf (buffer, "ADDX.L D%d,D%d", rlo, rhi);
\r
1071 ea = MakeEA (lo, p, 4,&count); p += count;
\r
1072 sprintf (buffer, "ADD.L D%d,%s", rhi, ea);
\r
1075 case 0xd1c0: case 0xd3c0: case 0xd5c0: case 0xd7c0: case 0xd9c0: case 0xdbc0: case 0xddc0: case 0xdfc0:
\r
1076 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1077 sprintf (buffer, "ADDA.L %s,A%d", ea, rhi);
\r
1079 case 0xe000: case 0xe200: case 0xe400: case 0xe600: case 0xe800: case 0xea00: case 0xec00: case 0xee00:
\r
1080 switch ((lo >> 3) & 7)
\r
1082 case 0: sprintf (buffer, "ASR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1083 case 1: sprintf (buffer, "LSR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1084 case 2: sprintf (buffer, "ROXR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1085 case 3: sprintf (buffer, "ROR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1086 case 4: sprintf (buffer, "ASR.B D%d,D%d", rhi, rlo); break;
\r
1087 case 5: sprintf (buffer, "LSR.B D%d,D%d", rhi, rlo); break;
\r
1088 case 6: sprintf (buffer, "ROXR.B D%d,D%d", rhi, rlo); break;
\r
1089 case 7: sprintf (buffer, "ROR.B D%d,D%d", rhi, rlo); break;
\r
1092 case 0xe040: case 0xe240: case 0xe440: case 0xe640: case 0xe840: case 0xea40: case 0xec40: case 0xee40:
\r
1093 switch ((lo >> 3) & 7)
\r
1095 case 0: sprintf (buffer, "ASR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1096 case 1: sprintf (buffer, "LSR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1097 case 2: sprintf (buffer, "ROXR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1098 case 3: sprintf (buffer, "ROR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1099 case 4: sprintf (buffer, "ASR.W D%d,D%d", rhi, rlo); break;
\r
1100 case 5: sprintf (buffer, "LSR.W D%d,D%d", rhi, rlo); break;
\r
1101 case 6: sprintf (buffer, "ROXR.W D%d,D%d", rhi, rlo); break;
\r
1102 case 7: sprintf (buffer, "ROR.W D%d,D%d", rhi, rlo); break;
\r
1105 case 0xe080: case 0xe280: case 0xe480: case 0xe680: case 0xe880: case 0xea80: case 0xec80: case 0xee80:
\r
1106 switch ((lo >> 3) & 7)
\r
1108 case 0: sprintf (buffer, "ASR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1109 case 1: sprintf (buffer, "LSR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1110 case 2: sprintf (buffer, "ROXR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1111 case 3: sprintf (buffer, "ROR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1112 case 4: sprintf (buffer, "ASR.L D%d,D%d", rhi, rlo); break;
\r
1113 case 5: sprintf (buffer, "LSR.L D%d,D%d", rhi, rlo); break;
\r
1114 case 6: sprintf (buffer, "ROXR.L D%d,D%d", rhi, rlo); break;
\r
1115 case 7: sprintf (buffer, "ROR.L D%d,D%d", rhi, rlo); break;
\r
1118 case 0xe0c0: case 0xe2c0: case 0xe4c0: case 0xe6c0:
\r
1119 case 0xe1c0: case 0xe3c0: case 0xe5c0: case 0xe7c0:
\r
1120 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1121 switch ((op >> 8) & 7)
\r
1123 case 0: sprintf (buffer, "ASR.L #1,%s", ea); break;
\r
1124 case 1: sprintf (buffer, "ASL.L #1,%s", ea); break;
\r
1125 case 2: sprintf (buffer, "LSR.L #1,%s", ea); break;
\r
1126 case 3: sprintf (buffer, "LSL.L #1,%s", ea); break;
\r
1127 case 4: sprintf (buffer, "ROXR.L #1,%s", ea); break;
\r
1128 case 5: sprintf (buffer, "ROXL.L #1,%s", ea); break;
\r
1129 case 6: sprintf (buffer, "ROR.L #1,%s", ea); break;
\r
1130 case 7: sprintf (buffer, "ROL.L #1,%s", ea); break;
\r
1133 case 0xe100: case 0xe300: case 0xe500: case 0xe700: case 0xe900: case 0xeb00: case 0xed00: case 0xef00:
\r
1134 switch ((lo >> 3) & 7)
\r
1136 case 0: sprintf (buffer, "ASL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1137 case 1: sprintf (buffer, "LSL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1138 case 2: sprintf (buffer, "ROXL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1139 case 3: sprintf (buffer, "ROL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1140 case 4: sprintf (buffer, "ASL.B D%d,D%d", rhi, rlo); break;
\r
1141 case 5: sprintf (buffer, "LSL.B D%d,D%d", rhi, rlo); break;
\r
1142 case 6: sprintf (buffer, "ROXL.B D%d,D%d", rhi, rlo); break;
\r
1143 case 7: sprintf (buffer, "ROL.B D%d,D%d", rhi, rlo); break;
\r
1146 case 0xe140: case 0xe340: case 0xe540: case 0xe740: case 0xe940: case 0xeb40: case 0xed40: case 0xef40:
\r
1147 switch ((lo >> 3) & 7)
\r
1149 case 0: sprintf (buffer, "ASL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1150 case 1: sprintf (buffer, "LSL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1151 case 2: sprintf (buffer, "ROXL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1152 case 3: sprintf (buffer, "ROL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1153 case 4: sprintf (buffer, "ASL.W D%d,D%d", rhi, rlo); break;
\r
1154 case 5: sprintf (buffer, "LSL.W D%d,D%d", rhi, rlo); break;
\r
1155 case 6: sprintf (buffer, "ROXL.W D%d,D%d", rhi, rlo); break;
\r
1156 case 7: sprintf (buffer, "ROL.W D%d,D%d", rhi, rlo); break;
\r
1159 case 0xe180: case 0xe380: case 0xe580: case 0xe780: case 0xe980: case 0xeb80: case 0xed80: case 0xef80:
\r
1160 switch ((lo >> 3) & 7)
\r
1162 case 0: sprintf (buffer, "ASL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1163 case 1: sprintf (buffer, "LSL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1164 case 2: sprintf (buffer, "ROXL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1165 case 3: sprintf (buffer, "ROL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
1166 case 4: sprintf (buffer, "ASL.L D%d,D%d", rhi, rlo); break;
\r
1167 case 5: sprintf (buffer, "LSL.L D%d,D%d", rhi, rlo); break;
\r
1168 case 6: sprintf (buffer, "ROXL.L D%d,D%d", rhi, rlo); break;
\r
1169 case 7: sprintf (buffer, "ROL.L D%d,D%d", rhi, rlo); break;
\r
1173 sprintf (buffer, "DC.W $%X", op);
\r
1182 static char *MakeEA (int lo, char *pBase, int size, int *count)
\r
1184 static char buffer[2][80];
\r
1187 unsigned char *p = (unsigned char *)pBase;
\r
1188 char *buf = buffer[which];
\r
1194 switch ((lo >> 3) & 7)
\r
1197 sprintf (buf, "D%d", reg);
\r
1200 sprintf (buf, "A%d", reg);
\r
1203 sprintf (buf, "(A%d)", reg);
\r
1206 sprintf (buf, "(A%d)+", reg);
\r
1209 sprintf (buf, "-(A%d)", reg);
\r
1214 sprintf (buf, "(-$%X,A%d)", -(signed short)pm & 0xffff, reg);
\r
1216 sprintf (buf, "($%lX,A%d)", pm, reg);
\r
1222 sprintf (buf, "(-$%X,A%d,D%ld.%c)", -(signed char)temp & 0xff, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
1224 sprintf (buf, "($%X,A%d,D%ld.%c)", temp, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
1231 sprintf (buf, "$%lX", pm);
\r
1235 sprintf (buf, "$%lX", pm);
\r
1240 sprintf (buf, "(-$%X,PC)", -(signed short)pm & 0xffff);
\r
1242 sprintf (buf, "($%lX,PC)", pm);
\r
1248 sprintf (buf, "(-$%X,PC,D%ld.%c)", -(signed char)temp & 0xff, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
1250 sprintf (buf, "($%X,PC,D%ld.%c)", temp, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');
\r
1257 sprintf (buf, "#$%X", temp);
\r
1259 else if (size == 2)
\r
1262 sprintf (buf, "#$%lX", pm);
\r
1267 sprintf (buf, "#$%lX", pm);
\r
1274 *count = p - ((unsigned char*)pBase);
\r
1278 static char *MakeRegList (char *p, unsigned short pm)
\r
1280 int start = -1, sep = 0;
\r
1283 for (i = 0; i < 8; i++, pm >>= 1)
\r
1285 if ((pm & 1) && start == -1)
\r
1287 else if (!(pm & 1) && start != -1)
\r
1289 if (sep++) p += sprintf (p, "/");
\r
1290 if (start == i - 1) p += sprintf (p, "D%d", start);
\r
1291 else p += sprintf (p, "D%d-D%d", start, i - 1);
\r
1297 if (sep++) p += sprintf (p, "/");
\r
1298 if (start == 7) p += sprintf (p, "D7");
\r
1299 else p += sprintf (p, "D%d-D7", start);
\r
1303 for (i = 0; i < 8; i++, pm >>= 1)
\r
1305 if ((pm & 1) && start == -1)
\r
1307 else if (!(pm & 1) && start != -1)
\r
1309 if (sep++) p += sprintf (p, "/");
\r
1310 if (start == i - 1) p += sprintf (p, "A%d", start);
\r
1311 else p += sprintf (p, "A%d-A%d", start, i - 1);
\r
1317 if (sep++) p += sprintf (p, "/");
\r
1318 if (start == 7) p += sprintf (p, "A7");
\r
1319 else p += sprintf (p, "A%d-A7", start);
\r
1325 static char *MakeRevRegList (char *p, unsigned short pm)
\r
1327 int start = -1, sep = 0;
\r
1330 for (i = 0; i < 8; i++, pm <<= 1)
\r
1332 if ((pm & 0x8000) && start == -1)
\r
1334 else if (!(pm & 0x8000) && start != -1)
\r
1336 if (sep++) p += sprintf (p, "/");
\r
1337 if (start == i - 1) p += sprintf (p, "D%d", start);
\r
1338 else p += sprintf (p, "D%d-D%d", start, i - 1);
\r
1344 if (sep++) p += sprintf (p, "/");
\r
1345 if (start == 7) p += sprintf (p, "D7");
\r
1346 else p += sprintf (p, "D%d-D7", start);
\r
1350 for (i = 0; i < 8; i++, pm <<= 1)
\r
1352 if ((pm & 0x8000) && start == -1)
\r
1354 else if (!(pm & 0x8000) && start != -1)
\r
1356 if (sep++) p += sprintf (p, "/");
\r
1357 if (start == i - 1) p += sprintf (p, "A%d", start);
\r
1358 else p += sprintf (p, "A%d-A%d", start, i - 1);
\r
1364 if (sep++) p += sprintf (p, "/");
\r
1365 if (start == 7) p += sprintf (p, "A7");
\r
1366 else p += sprintf (p, "A%d-A7", start);
\r
1373 int Dasm68000 (char *pBase, char *buffer, int pc)
\r
1375 char *ea, *ea2, *p = pBase;
\r
1376 unsigned short op, lo, rhi, rlo;
\r
1383 rhi = (op >> 9) & 7;
\r
1385 switch (op & 0xffc0)
\r
1390 sprintf (buffer, "ORI #$%lX,CCR", pm & 0xff);
\r
1393 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1394 sprintf (buffer, "ORI.B #$%lX,%s", pm & 0xff, ea);
\r
1400 sprintf (buffer, "ORI #$%lX,SR", pm & 0xffff);
\r
1403 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1404 sprintf (buffer, "ORI.W #$%lX,%s", pm & 0xffff, ea);
\r
1408 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1409 sprintf (buffer, "ORI.L #$%lX,%s", pm, ea);
\r
1411 case 0x0100: case 0x0300: case 0x0500: case 0x0700: case 0x0900: case 0x0b00: case 0x0d00: case 0x0f00:
\r
1412 if ((lo & 0x38) == 0x08)
\r
1415 sprintf (buffer, "MOVEP.W ($%lX,A%d),D%d", pm, rlo, rhi);
\r
1419 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1420 sprintf (buffer, "BTST D%d,%s", rhi, ea);
\r
1423 case 0x0140: case 0x0340: case 0x0540: case 0x0740: case 0x0940: case 0x0b40: case 0x0d40: case 0x0f40:
\r
1424 if ((lo & 0x38) == 0x08)
\r
1427 sprintf (buffer, "MOVEP.L ($%lX,A%d),D%d", pm, rlo, rhi);
\r
1431 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1432 sprintf (buffer, "BCHG D%d,%s", rhi, ea);
\r
1435 case 0x0180: case 0x0380: case 0x0580: case 0x0780: case 0x0980: case 0x0b80: case 0x0d80: case 0x0f80:
\r
1436 if ((lo & 0x38) == 0x08)
\r
1439 sprintf (buffer, "MOVEP.W D%d,($%lX,A%d)", rhi, pm, rlo);
\r
1443 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1444 sprintf (buffer, "BCLR D%d,%s", rhi, ea);
\r
1447 case 0x01c0: case 0x03c0: case 0x05c0: case 0x07c0: case 0x09c0: case 0x0bc0: case 0x0dc0: case 0x0fc0:
\r
1448 if ((lo & 0x38) == 0x08)
\r
1451 sprintf (buffer, "MOVEP.L D%d,($%lX,A%d)", rhi, pm, rlo);
\r
1455 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1456 sprintf (buffer, "BSET D%d,%s", rhi, ea);
\r
1462 sprintf (buffer, "ANDI #$%lX,CCR", pm & 0xff);
\r
1465 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1466 sprintf (buffer, "ANDI.B #$%lX,%s", pm & 0xff, ea);
\r
1472 sprintf (buffer, "ANDI #$%lX,SR", pm & 0xffff);
\r
1475 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1476 sprintf (buffer, "ANDI.W #$%lX,%s", pm & 0xffff, ea);
\r
1480 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1481 sprintf (buffer, "ANDI.L #$%lX,%s", pm, ea);
\r
1484 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
1485 sprintf (buffer, "SUBI.B #$%lX,%s", pm & 0xff, ea);
\r
1488 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1489 sprintf (buffer, "SUBI.W #$%lX,%s", pm & 0xffff, ea);
\r
1492 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1493 sprintf (buffer, "SUBI.L #$%lX,%s", pm, ea);
\r
1496 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
1497 sprintf (buffer, "ADDI.B #$%lX,%s", pm & 0xff, ea);
\r
1500 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1501 sprintf (buffer, "ADDI.W #$%lX,%s", pm & 0xffff, ea);
\r
1504 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1505 sprintf (buffer, "ADDI.L #$%lX,%s", pm, ea);
\r
1508 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1509 sprintf (buffer, "BTST #$%lX,%s", pm & 0xff, ea);
\r
1512 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1513 sprintf (buffer, "BCHG #$%lX,%s", pm & 0xff, ea);
\r
1516 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1517 sprintf (buffer, "BCLR #$%lX,%s", pm & 0xff, ea);
\r
1520 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1521 sprintf (buffer, "BSET #$%lX,%s", pm & 0xff, ea);
\r
1526 sprintf (buffer, "EORI #$%lX,CCR", pm & 0xff);
\r
1529 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1530 sprintf (buffer, "EORI.B #$%lX,%s", pm & 0xff, ea);
\r
1536 sprintf (buffer, "EORI #$%lX,SR", pm & 0xffff);
\r
1539 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1540 sprintf (buffer, "EORI.W #$%lX,%s", pm & 0xffff, ea);
\r
1544 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1545 sprintf (buffer, "EORI.L #$%lX,%s", pm, ea);
\r
1548 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
1549 sprintf (buffer, "CMPI.B #$%lX,%s", pm & 0xff, ea);
\r
1552 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1553 sprintf (buffer, "CMPI.W #$%lX,%s", pm & 0xffff, ea);
\r
1556 PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1557 sprintf (buffer, "CMPI.L #$%lX,%s", pm, ea);
\r
1560 PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;
\r
1564 sprintf (buffer, "MOVES.B A%ld,%s", (pm >> 12) & 7, ea);
\r
1566 sprintf (buffer, "MOVES.B D%ld,%s", (pm >> 12) & 7, ea);
\r
1571 sprintf (buffer, "MOVES.B %s,A%ld", ea, (pm >> 12) & 7);
\r
1573 sprintf (buffer, "MOVES.B %s,D%ld", ea, (pm >> 12) & 7);
\r
1577 PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1581 sprintf (buffer, "MOVES.W A%ld,%s", (pm >> 12) & 7, ea);
\r
1583 sprintf (buffer, "MOVES.W D%ld,%s", (pm >> 12) & 7, ea);
\r
1588 sprintf (buffer, "MOVES.W %s,A%ld", ea, (pm >> 12) & 7);
\r
1590 sprintf (buffer, "MOVES.W %s,D%ld", ea, (pm >> 12) & 7);
\r
1594 PARAM_WORD(pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1598 sprintf (buffer, "MOVES.L A%ld,%s", (pm >> 12) & 7, ea);
\r
1600 sprintf (buffer, "MOVES.L D%ld,%s", (pm >> 12) & 7, ea);
\r
1605 sprintf (buffer, "MOVES.L %s,A%ld", ea, (pm >> 12) & 7);
\r
1607 sprintf (buffer, "MOVES.L %s,D%ld", ea, (pm >> 12) & 7);
\r
1610 case 0x1000: case 0x1080: case 0x10c0: case 0x1100: case 0x1140: case 0x1180: case 0x11c0:
\r
1611 case 0x1200: case 0x1280: case 0x12c0: case 0x1300: case 0x1340: case 0x1380: case 0x13c0:
\r
1612 case 0x1400: case 0x1480: case 0x14c0: case 0x1500: case 0x1540: case 0x1580:
\r
1613 case 0x1600: case 0x1680: case 0x16c0: case 0x1700: case 0x1740: case 0x1780:
\r
1614 case 0x1800: case 0x1880: case 0x18c0: case 0x1900: case 0x1940: case 0x1980:
\r
1615 case 0x1a00: case 0x1a80: case 0x1ac0: case 0x1b00: case 0x1b40: case 0x1b80:
\r
1616 case 0x1c00: case 0x1c80: case 0x1cc0: case 0x1d00: case 0x1d40: case 0x1d80:
\r
1617 case 0x1e00: case 0x1e80: case 0x1ec0: case 0x1f00: case 0x1f40: case 0x1f80:
\r
1618 ea = MakeEA (lo, p, 1, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 1, &count); p += count;
\r
1619 sprintf (buffer, "MOVE.B %s,%s", ea, ea2);
\r
1621 case 0x2000: case 0x2080: case 0x20c0: case 0x2100: case 0x2140: case 0x2180: case 0x21c0:
\r
1622 case 0x2200: case 0x2280: case 0x22c0: case 0x2300: case 0x2340: case 0x2380: case 0x23c0:
\r
1623 case 0x2400: case 0x2480: case 0x24c0: case 0x2500: case 0x2540: case 0x2580:
\r
1624 case 0x2600: case 0x2680: case 0x26c0: case 0x2700: case 0x2740: case 0x2780:
\r
1625 case 0x2800: case 0x2880: case 0x28c0: case 0x2900: case 0x2940: case 0x2980:
\r
1626 case 0x2a00: case 0x2a80: case 0x2ac0: case 0x2b00: case 0x2b40: case 0x2b80:
\r
1627 case 0x2c00: case 0x2c80: case 0x2cc0: case 0x2d00: case 0x2d40: case 0x2d80:
\r
1628 case 0x2e00: case 0x2e80: case 0x2ec0: case 0x2f00: case 0x2f40: case 0x2f80:
\r
1629 ea = MakeEA (lo, p, 4, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 4, &count); p += count;
\r
1630 sprintf (buffer, "MOVE.L %s,%s", ea, ea2);
\r
1632 case 0x2040: case 0x2240: case 0x2440: case 0x2640: case 0x2840: case 0x2a40: case 0x2c40: case 0x2e40:
\r
1633 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1634 sprintf (buffer, "MOVEA.L %s,A%d", ea, rhi);
\r
1636 case 0x3000: case 0x3080: case 0x30c0: case 0x3100: case 0x3140: case 0x3180: case 0x31c0:
\r
1637 case 0x3200: case 0x3280: case 0x32c0: case 0x3300: case 0x3340: case 0x3380: case 0x33c0:
\r
1638 case 0x3400: case 0x3480: case 0x34c0: case 0x3500: case 0x3540: case 0x3580:
\r
1639 case 0x3600: case 0x3680: case 0x36c0: case 0x3700: case 0x3740: case 0x3780:
\r
1640 case 0x3800: case 0x3880: case 0x38c0: case 0x3900: case 0x3940: case 0x3980:
\r
1641 case 0x3a00: case 0x3a80: case 0x3ac0: case 0x3b00: case 0x3b40: case 0x3b80:
\r
1642 case 0x3c00: case 0x3c80: case 0x3cc0: case 0x3d00: case 0x3d40: case 0x3d80:
\r
1643 case 0x3e00: case 0x3e80: case 0x3ec0: case 0x3f00: case 0x3f40: case 0x3f80:
\r
1644 ea = MakeEA (lo, p, 2, &count); p += count; ea2 = MakeEA (((op >> 9) & 0x07) + ((op >> 3) & 0x38), p, 2, &count); p += count;
\r
1645 sprintf (buffer, "MOVE.W %s,%s", ea, ea2);
\r
1647 case 0x3040: case 0x3240: case 0x3440: case 0x3640: case 0x3840: case 0x3a40: case 0x3c40: case 0x3e40:
\r
1648 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1649 sprintf (buffer, "MOVEA.W %s,A%d", ea, rhi);
\r
1652 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1653 sprintf (buffer, "NEGX.B %s", ea);
\r
1656 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1657 sprintf (buffer, "NEGX.W %s", ea);
\r
1660 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1661 sprintf (buffer, "NEGX.L %s", ea);
\r
1664 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1665 sprintf (buffer, "MOVE SR,%s", ea);
\r
1667 case 0x4180: case 0x4380: case 0x4580: case 0x4780: case 0x4980: case 0x4b80: case 0x4d80: case 0x4f80:
\r
1668 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1669 sprintf (buffer, "CHK.W %s,D%d", ea, rhi);
\r
1671 case 0x41c0: case 0x43c0: case 0x45c0: case 0x47c0: case 0x49c0: case 0x4bc0: case 0x4dc0: case 0x4fc0:
\r
1672 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1673 sprintf (buffer, "LEA %s,A%d", ea, rhi);
\r
1676 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1677 sprintf (buffer, "CLR.B %s", ea);
\r
1680 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1681 sprintf (buffer, "CLR.W %s", ea);
\r
1684 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1685 sprintf (buffer, "CLR.L %s", ea);
\r
1688 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1689 sprintf (buffer, "MOVE CCR,%s", ea);
\r
1692 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1693 sprintf (buffer, "NEG.B %s", ea);
\r
1696 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1697 sprintf (buffer, "NEG.W %s", ea);
\r
1700 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1701 sprintf (buffer, "NEG.L %s", ea);
\r
1704 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1705 sprintf (buffer, "MOVE %s,CCR", ea);
\r
1708 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1709 sprintf (buffer, "NOT.B %s", ea);
\r
1712 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1713 sprintf (buffer, "NOT.W %s", ea);
\r
1716 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1717 sprintf (buffer, "NOT.L %s", ea);
\r
1720 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1721 sprintf (buffer, "MOVE %s,SR", ea);
\r
1724 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1725 sprintf (buffer, "NBCD.B %s", ea);
\r
1728 if ((lo & 0x38) == 0x00)
\r
1729 sprintf (buffer, "SWAP D%d", rlo);
\r
1732 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1733 sprintf (buffer, "PEA %s", ea);
\r
1737 if ((lo & 0x38) == 0x00)
\r
1738 sprintf (buffer, "EXT.W D%d", rlo);
\r
1742 PARAM_WORD (pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1743 b += sprintf (b, "MOVEM.W ");
\r
1744 if ((lo & 0x38) != 0x20) b = MakeRegList (b, pm);
\r
1745 else b = MakeRevRegList (b, pm);
\r
1746 sprintf (b, ",%s", ea);
\r
1750 if ((lo & 0x38) == 0x00)
\r
1751 sprintf (buffer, "EXT.L D%d", rlo);
\r
1755 PARAM_WORD (pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1756 b += sprintf (b, "MOVEM.L ");
\r
1757 if ((lo & 0x38) != 0x20) b = MakeRegList (b, pm);
\r
1758 else b = MakeRevRegList (b, pm);
\r
1759 sprintf (b, ",%s", ea);
\r
1763 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1764 sprintf (buffer, "TST.B %s", ea);
\r
1767 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1768 sprintf (buffer, "TST.W %s", ea);
\r
1771 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1772 sprintf (buffer, "TST.L %s", ea);
\r
1775 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1776 sprintf (buffer, "TAS.B %s", ea);
\r
1781 PARAM_WORD (pm); ea = MakeEA (lo, p, 2, &count); p += count;
\r
1782 b += sprintf (b, "MOVEM.W %s,", ea);
\r
1783 b = MakeRegList (b, pm);
\r
1789 PARAM_WORD (pm); ea = MakeEA (lo, p, 4, &count); p += count;
\r
1790 b += sprintf (b, "MOVEM.L %s,", ea);
\r
1791 b = MakeRegList (b, pm);
\r
1795 if ((lo & 30) == 0x00)
\r
1796 sprintf (buffer, "TRAP #$%X", lo & 15);
\r
1797 else if ((lo & 0x38) == 0x10)
\r
1800 sprintf (buffer, "LINK A%d,#$%lX", rlo, pm);
\r
1802 else if ((lo & 0x38) == 0x18)
\r
1804 sprintf (buffer, "UNLK A%d", rlo);
\r
1806 else if ((lo & 0x38) == 0x20)
\r
1807 sprintf (buffer, "MOVE A%d,USP", rlo);
\r
1808 else if ((lo & 0x38) == 0x28)
\r
1809 sprintf (buffer, "MOVE USP,A%d", rlo);
\r
1810 else if (lo == 0x30)
\r
1811 sprintf (buffer, "RESET");
\r
1812 else if (lo == 0x31)
\r
1813 sprintf (buffer, "NOP");
\r
1814 else if (lo == 0x32)
\r
1815 sprintf (buffer, "STOP");
\r
1816 else if (lo == 0x33)
\r
1817 sprintf (buffer, "RTE");
\r
1818 else if (lo == 0x35)
\r
1819 sprintf (buffer, "RTS");
\r
1820 else if (lo == 0x36)
\r
1821 sprintf (buffer, "TRAPV");
\r
1822 else if (lo == 0x37)
\r
1823 sprintf (buffer, "RTR");
\r
1824 else if (lo == 0x3a)
\r
1827 switch (pm & 0xfff)
\r
1829 case 0x000: ea = "SFC"; break;
\r
1830 case 0x001: ea = "DFC"; break;
\r
1831 case 0x800: ea = "USP"; break;
\r
1832 case 0x801: ea = "VBR"; break;
\r
1833 default: ea = "???"; break;
\r
1836 sprintf (buffer, "MOVEC %s,A%ld", ea, (pm >> 12) & 7);
\r
1838 sprintf (buffer, "MOVEC %s,D%ld", ea, (pm >> 12) & 7);
\r
1840 else if (lo == 0x3b)
\r
1843 switch (pm & 0xfff)
\r
1845 case 0x000: ea = "SFC"; break;
\r
1846 case 0x001: ea = "DFC"; break;
\r
1847 case 0x800: ea = "USP"; break;
\r
1848 case 0x801: ea = "VBR"; break;
\r
1849 default: ea = "???"; break;
\r
1852 sprintf (buffer, "MOVEC A%ld,%s", (pm >> 12) & 7, ea);
\r
1854 sprintf (buffer, "MOVEC D%ld,%s", (pm >> 12) & 7, ea);
\r
1857 sprintf (buffer, "DC.W $%X", op);
\r
1860 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1861 sprintf (buffer, "JSR %s", ea);
\r
1864 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1865 sprintf (buffer, "JMP %s", ea);
\r
1867 case 0x5000: case 0x5200: case 0x5400: case 0x5600: case 0x5800: case 0x5a00: case 0x5c00: case 0x5e00:
\r
1868 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1869 sprintf (buffer, "ADDQ.B #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1871 case 0x5040: case 0x5240: case 0x5440: case 0x5640: case 0x5840: case 0x5a40: case 0x5c40: case 0x5e40:
\r
1872 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1873 sprintf (buffer, "ADDQ.W #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1875 case 0x5080: case 0x5280: case 0x5480: case 0x5680: case 0x5880: case 0x5a80: case 0x5c80: case 0x5e80:
\r
1876 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1877 sprintf (buffer, "ADDQ.L #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1879 case 0x50c0: case 0x52c0: case 0x54c0: case 0x56c0: case 0x58c0: case 0x5ac0: case 0x5cc0: case 0x5ec0:
\r
1880 case 0x51c0: case 0x53c0: case 0x55c0: case 0x57c0: case 0x59c0: case 0x5bc0: case 0x5dc0: case 0x5fc0:
\r
1881 if ((lo & 0x38) == 0x08)
\r
1885 sprintf (buffer, "DB%s D%d,*-$%X [%X]", ccodes[(op >> 8) & 15], rlo, (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
1887 sprintf (buffer, "DB%s D%d,*+$%lX [%lX]", ccodes[(op >> 8) & 15], rlo, pm - 2, pc + pm + 2);
\r
1891 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1892 sprintf (buffer, "S%s.B %s", ccodes[(op >> 8) & 15], ea);
\r
1895 case 0x5100: case 0x5300: case 0x5500: case 0x5700: case 0x5900: case 0x5b00: case 0x5d00: case 0x5f00:
\r
1896 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1897 sprintf (buffer, "SUBQ.B #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1899 case 0x5140: case 0x5340: case 0x5540: case 0x5740: case 0x5940: case 0x5b40: case 0x5d40: case 0x5f40:
\r
1900 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1901 sprintf (buffer, "SUBQ.W #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1903 case 0x5180: case 0x5380: case 0x5580: case 0x5780: case 0x5980: case 0x5b80: case 0x5d80: case 0x5f80:
\r
1904 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1905 sprintf (buffer, "SUBQ.L #%d,%s", (rhi == 0) ? 8 : rhi, ea);
\r
1907 case 0x6000: case 0x6040: case 0x6080: case 0x60c0:
\r
1913 sprintf (buffer, "BRA *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
1915 sprintf (buffer, "BRA *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
1920 sprintf (buffer, "BRA.S *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
1922 sprintf (buffer, "BRA.S *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
1925 case 0x6100: case 0x6140: case 0x6180: case 0x61c0:
\r
1931 sprintf (buffer, "BSR *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
1933 sprintf (buffer, "BSR *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
1938 sprintf (buffer, "BSR.S *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
1940 sprintf (buffer, "BSR.S *+$%lX [%lX]", pm + 2, pc + pm + 2);
\r
1943 case 0x6200: case 0x6240: case 0x6280: case 0x62c0: case 0x6300: case 0x6340: case 0x6380: case 0x63c0:
\r
1944 case 0x6400: case 0x6440: case 0x6480: case 0x64c0: case 0x6500: case 0x6540: case 0x6580: case 0x65c0:
\r
1945 case 0x6600: case 0x6640: case 0x6680: case 0x66c0: case 0x6700: case 0x6740: case 0x6780: case 0x67c0:
\r
1946 case 0x6800: case 0x6840: case 0x6880: case 0x68c0: case 0x6900: case 0x6940: case 0x6980: case 0x69c0:
\r
1947 case 0x6a00: case 0x6a40: case 0x6a80: case 0x6ac0: case 0x6b00: case 0x6b40: case 0x6b80: case 0x6bc0:
\r
1948 case 0x6c00: case 0x6c40: case 0x6c80: case 0x6cc0: case 0x6d00: case 0x6d40: case 0x6d80: case 0x6dc0:
\r
1949 case 0x6e00: case 0x6e40: case 0x6e80: case 0x6ec0: case 0x6f00: case 0x6f40: case 0x6f80: case 0x6fc0:
\r
1955 sprintf (buffer, "B%s *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);
\r
1957 sprintf (buffer, "B%s *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);
\r
1962 sprintf (buffer, "B%s.S *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);
\r
1964 sprintf (buffer, "B%s.S *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);
\r
1967 case 0x7000: case 0x7040: case 0x7080: case 0x70c0:
\r
1968 case 0x7200: case 0x7240: case 0x7280: case 0x72c0:
\r
1969 case 0x7400: case 0x7440: case 0x7480: case 0x74c0:
\r
1970 case 0x7600: case 0x7640: case 0x7680: case 0x76c0:
\r
1971 case 0x7800: case 0x7840: case 0x7880: case 0x78c0:
\r
1972 case 0x7a00: case 0x7a40: case 0x7a80: case 0x7ac0:
\r
1973 case 0x7c00: case 0x7c40: case 0x7c80: case 0x7cc0:
\r
1974 case 0x7e00: case 0x7e40: case 0x7e80: case 0x7ec0:
\r
1977 sprintf (buffer, "MOVEQ #$-%X,D%d", -(signed char)pm, rhi);
\r
1979 sprintf (buffer, "MOVEQ #$%lX,D%d", pm, rhi);
\r
1981 case 0x8000: case 0x8200: case 0x8400: case 0x8600: case 0x8800: case 0x8a00: case 0x8c00: case 0x8e00:
\r
1982 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1983 sprintf (buffer, "OR.B %s,D%d", ea, rhi);
\r
1985 case 0x8040: case 0x8240: case 0x8440: case 0x8640: case 0x8840: case 0x8a40: case 0x8c40: case 0x8e40:
\r
1986 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1987 sprintf (buffer, "OR.W %s,D%d", ea, rhi);
\r
1989 case 0x8080: case 0x8280: case 0x8480: case 0x8680: case 0x8880: case 0x8a80: case 0x8c80: case 0x8e80:
\r
1990 ea = MakeEA (lo, p, 4, &count); p += count;
\r
1991 sprintf (buffer, "OR.L %s,D%d", ea, rhi);
\r
1993 case 0x80c0: case 0x82c0: case 0x84c0: case 0x86c0: case 0x88c0: case 0x8ac0: case 0x8cc0: case 0x8ec0:
\r
1994 ea = MakeEA (lo, p, 2, &count); p += count;
\r
1995 sprintf (buffer, "DIVU.W %s,D%d", ea, rhi);
\r
1997 case 0x8100: case 0x8300: case 0x8500: case 0x8700: case 0x8900: case 0x8b00: case 0x8d00: case 0x8f00:
\r
1998 ea = MakeEA (lo, p, 1, &count); p += count;
\r
1999 sprintf (buffer, "OR.B D%d,%s", rhi, ea);
\r
2001 case 0x8140: case 0x8340: case 0x8540: case 0x8740: case 0x8940: case 0x8b40: case 0x8d40: case 0x8f40:
\r
2002 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2003 sprintf (buffer, "OR.W D%d,%s", rhi, ea);
\r
2005 case 0x8180: case 0x8380: case 0x8580: case 0x8780: case 0x8980: case 0x8b80: case 0x8d80: case 0x8f80:
\r
2006 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2007 sprintf (buffer, "OR.L D%d,%s", rhi, ea);
\r
2009 case 0x81c0: case 0x83c0: case 0x85c0: case 0x87c0: case 0x89c0: case 0x8bc0: case 0x8dc0: case 0x8fc0:
\r
2010 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2011 sprintf (buffer, "DIVS.W %s,D%d", ea, rhi);
\r
2013 case 0x9000: case 0x9200: case 0x9400: case 0x9600: case 0x9800: case 0x9a00: case 0x9c00: case 0x9e00:
\r
2014 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2015 sprintf (buffer, "SUB.B %s,D%d", ea, rhi);
\r
2017 case 0x9040: case 0x9240: case 0x9440: case 0x9640: case 0x9840: case 0x9a40: case 0x9c40: case 0x9e40:
\r
2018 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2019 sprintf (buffer, "SUB.W %s,D%d", ea, rhi);
\r
2021 case 0x9080: case 0x9280: case 0x9480: case 0x9680: case 0x9880: case 0x9a80: case 0x9c80: case 0x9e80:
\r
2022 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2023 sprintf (buffer, "SUB.L %s,D%d", ea, rhi);
\r
2025 case 0x90c0: case 0x92c0: case 0x94c0: case 0x96c0: case 0x98c0: case 0x9ac0: case 0x9cc0: case 0x9ec0:
\r
2026 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2027 sprintf (buffer, "SUBA.W %s,A%d", ea, rhi);
\r
2029 case 0x9100: case 0x9300: case 0x9500: case 0x9700: case 0x9900: case 0x9b00: case 0x9d00: case 0x9f00:
\r
2030 if ((lo & 0x30) == 0)
\r
2033 sprintf (buffer, "SUBX.B -(A%d),-(A%d)", rlo, rhi);
\r
2035 sprintf (buffer, "SUBX.B D%d,D%d", rlo, rhi);
\r
2039 ea = MakeEA (lo, p, 1,&count); p += count;
\r
2040 sprintf (buffer, "SUB.B D%d,%s", rhi, ea);
\r
2043 case 0x9140: case 0x9340: case 0x9540: case 0x9740: case 0x9940: case 0x9b40: case 0x9d40: case 0x9f40:
\r
2044 if ((lo & 0x30) == 0)
\r
2047 sprintf (buffer, "SUBX.W -(A%d),-(A%d)", rlo, rhi);
\r
2049 sprintf (buffer, "SUBX.W D%d,D%d", rlo, rhi);
\r
2053 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2054 sprintf (buffer, "SUB.W D%d,%s", rhi, ea);
\r
2057 case 0x9180: case 0x9380: case 0x9580: case 0x9780: case 0x9980: case 0x9b80: case 0x9d80: case 0x9f80:
\r
2058 if ((lo & 0x30) == 0)
\r
2061 sprintf (buffer, "SUBX.L -(A%d),-(A%d)", rlo, rhi);
\r
2063 sprintf (buffer, "SUBX.L D%d,D%d", rlo, rhi);
\r
2067 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2068 sprintf (buffer, "SUB.L D%d,%s", rhi, ea);
\r
2071 case 0x91c0: case 0x93c0: case 0x95c0: case 0x97c0: case 0x99c0: case 0x9bc0: case 0x9dc0: case 0x9fc0:
\r
2072 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2073 sprintf (buffer, "SUBA.L %s,A%d", ea, rhi);
\r
2075 case 0xb000: case 0xb200: case 0xb400: case 0xb600: case 0xb800: case 0xba00: case 0xbc00: case 0xbe00:
\r
2076 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2077 sprintf (buffer, "CMP.B %s,D%d", ea, rhi);
\r
2079 case 0xb040: case 0xb240: case 0xb440: case 0xb640: case 0xb840: case 0xba40: case 0xbc40: case 0xbe40:
\r
2080 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2081 sprintf (buffer, "CMP.W %s,D%d", ea, rhi);
\r
2083 case 0xb080: case 0xb280: case 0xb480: case 0xb680: case 0xb880: case 0xba80: case 0xbc80: case 0xbe80:
\r
2084 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2085 sprintf (buffer, "CMP.L %s,D%d", ea, rhi);
\r
2087 case 0xb0c0: case 0xb2c0: case 0xb4c0: case 0xb6c0: case 0xb8c0: case 0xbac0: case 0xbcc0: case 0xbec0:
\r
2088 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2089 sprintf (buffer, "CMPA.W %s,A%d", ea, rhi);
\r
2091 case 0xb100: case 0xb300: case 0xb500: case 0xb700: case 0xb900: case 0xbb00: case 0xbd00: case 0xbf00:
\r
2092 if ((lo & 0x38) == 0x08)
\r
2093 sprintf (buffer, "CMPM.B (A%d)+,(A%d)+", rlo, rhi);
\r
2096 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2097 sprintf (buffer, "EOR.B D%d,%s", rhi, ea);
\r
2100 case 0xb140: case 0xb340: case 0xb540: case 0xb740: case 0xb940: case 0xbb40: case 0xbd40: case 0xbf40:
\r
2101 if ((lo & 0x38) == 0x08)
\r
2102 sprintf (buffer, "CMPM.W (A%d)+,(A%d)+", rlo, rhi);
\r
2105 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2106 sprintf (buffer, "EOR.W D%d,%s", rhi, ea);
\r
2109 case 0xb180: case 0xb380: case 0xb580: case 0xb780: case 0xb980: case 0xbb80: case 0xbd80: case 0xbf80:
\r
2110 if ((lo & 0x38) == 0x08)
\r
2111 sprintf (buffer, "CMPM.L (A%d)+,(A%d)+", rlo, rhi);
\r
2114 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2115 sprintf (buffer, "EOR.L D%d,%s", rhi, ea);
\r
2118 case 0xb1c0: case 0xb3c0: case 0xb5c0: case 0xb7c0: case 0xb9c0: case 0xbbc0: case 0xbdc0: case 0xbfc0:
\r
2119 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2120 sprintf (buffer, "CMPA.L %s,A%d", ea, rhi);
\r
2122 case 0xc000: case 0xc200: case 0xc400: case 0xc600: case 0xc800: case 0xca00: case 0xcc00: case 0xce00:
\r
2123 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2124 sprintf (buffer, "AND.B %s,D%d", ea, rhi);
\r
2126 case 0xc040: case 0xc240: case 0xc440: case 0xc640: case 0xc840: case 0xca40: case 0xcc40: case 0xce40:
\r
2127 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2128 sprintf (buffer, "AND.W %s,D%d", ea, rhi);
\r
2130 case 0xc080: case 0xc280: case 0xc480: case 0xc680: case 0xc880: case 0xca80: case 0xcc80: case 0xce80:
\r
2131 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2132 sprintf (buffer, "AND.L %s,D%d", ea, rhi);
\r
2134 case 0xc0c0: case 0xc2c0: case 0xc4c0: case 0xc6c0: case 0xc8c0: case 0xcac0: case 0xccc0: case 0xcec0:
\r
2135 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2136 sprintf (buffer, "MULU.W %s,D%d", ea, rhi);
\r
2138 case 0xc100: case 0xc300: case 0xc500: case 0xc700: case 0xc900: case 0xcb00: case 0xcd00: case 0xcf00:
\r
2139 if ((lo & 0x30) == 0)
\r
2142 sprintf (buffer, "ABCD.B -(A%d),-(A%d)", rlo, rhi);
\r
2144 sprintf (buffer, "ABCD.B D%d,D%d", rlo, rhi);
\r
2148 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2149 sprintf (buffer, "AND.B D%d,%s", rhi, ea);
\r
2152 case 0xc140: case 0xc340: case 0xc540: case 0xc740: case 0xc940: case 0xcb40: case 0xcd40: case 0xcf40:
\r
2153 if ((lo & 0x30) == 0)
\r
2156 sprintf (buffer, "EXG A%d,A%d", rhi, rlo);
\r
2158 sprintf (buffer, "EXG D%d,D%d", rhi, rlo);
\r
2162 ea = MakeEA (lo, p, 2,&count); p += count;
\r
2163 sprintf (buffer, "AND.W D%d,%s", rhi, ea);
\r
2166 case 0xc180: case 0xc380: case 0xc580: case 0xc780: case 0xc980: case 0xcb80: case 0xcd80: case 0xcf80:
\r
2167 if ((lo & 0x38) == 0x08)
\r
2168 sprintf (buffer, "EXG D%d,A%d", rhi, rlo);
\r
2171 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2172 sprintf (buffer, "AND.L D%d,%s", rhi, ea);
\r
2175 case 0xc1c0: case 0xc3c0: case 0xc5c0: case 0xc7c0: case 0xc9c0: case 0xcbc0: case 0xcdc0: case 0xcfc0:
\r
2176 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2177 sprintf (buffer, "MULS.W %s,D%d", ea, rhi);
\r
2179 case 0xd000: case 0xd200: case 0xd400: case 0xd600: case 0xd800: case 0xda00: case 0xdc00: case 0xde00:
\r
2180 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2181 sprintf (buffer, "ADD.B %s,D%d", ea, rhi);
\r
2183 case 0xd040: case 0xd240: case 0xd440: case 0xd640: case 0xd840: case 0xda40: case 0xdc40: case 0xde40:
\r
2184 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2185 sprintf (buffer, "ADD.W %s,D%d", ea, rhi);
\r
2187 case 0xd080: case 0xd280: case 0xd480: case 0xd680: case 0xd880: case 0xda80: case 0xdc80: case 0xde80:
\r
2188 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2189 sprintf (buffer, "ADD.L %s,D%d", ea, rhi);
\r
2191 case 0xd0c0: case 0xd2c0: case 0xd4c0: case 0xd6c0: case 0xd8c0: case 0xdac0: case 0xdcc0: case 0xdec0:
\r
2192 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2193 sprintf (buffer, "ADDA.W %s,A%d", ea, rhi);
\r
2195 case 0xd100: case 0xd300: case 0xd500: case 0xd700: case 0xd900: case 0xdb00: case 0xdd00: case 0xdf00:
\r
2196 if ((lo & 0x30) == 0)
\r
2199 sprintf (buffer, "ADDX.B -(A%d),-(A%d)", rlo, rhi);
\r
2201 sprintf (buffer, "ADDX.B D%d,D%d", rlo, rhi);
\r
2205 ea = MakeEA (lo, p, 1, &count); p += count;
\r
2206 sprintf (buffer, "ADD.B D%d,%s", rhi, ea);
\r
2209 case 0xd140: case 0xd340: case 0xd540: case 0xd740: case 0xd940: case 0xdb40: case 0xdd40: case 0xdf40:
\r
2210 if ((lo & 0x30) == 0)
\r
2213 sprintf (buffer, "ADDX.W -(A%d),-(A%d)", rlo, rhi);
\r
2215 sprintf (buffer, "ADDX.W D%d,D%d", rlo, rhi);
\r
2219 ea = MakeEA (lo, p, 2, &count); p += count;
\r
2220 sprintf (buffer, "ADD.W D%d,%s", rhi, ea);
\r
2223 case 0xd180: case 0xd380: case 0xd580: case 0xd780: case 0xd980: case 0xdb80: case 0xdd80: case 0xdf80:
\r
2224 if ((lo & 0x30) == 0)
\r
2227 sprintf (buffer, "ADDX.L -(A%d),-(A%d)", rlo, rhi);
\r
2229 sprintf (buffer, "ADDX.L D%d,D%d", rlo, rhi);
\r
2233 ea = MakeEA (lo, p, 4,&count); p += count;
\r
2234 sprintf (buffer, "ADD.L D%d,%s", rhi, ea);
\r
2237 case 0xd1c0: case 0xd3c0: case 0xd5c0: case 0xd7c0: case 0xd9c0: case 0xdbc0: case 0xddc0: case 0xdfc0:
\r
2238 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2239 sprintf (buffer, "ADDA.L %s,A%d", ea, rhi);
\r
2241 case 0xe000: case 0xe200: case 0xe400: case 0xe600: case 0xe800: case 0xea00: case 0xec00: case 0xee00:
\r
2242 switch ((lo >> 3) & 7)
\r
2244 case 0: sprintf (buffer, "ASR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2245 case 1: sprintf (buffer, "LSR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2246 case 2: sprintf (buffer, "ROXR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2247 case 3: sprintf (buffer, "ROR.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2248 case 4: sprintf (buffer, "ASR.B D%d,D%d", rhi, rlo); break;
\r
2249 case 5: sprintf (buffer, "LSR.B D%d,D%d", rhi, rlo); break;
\r
2250 case 6: sprintf (buffer, "ROXR.B D%d,D%d", rhi, rlo); break;
\r
2251 case 7: sprintf (buffer, "ROR.B D%d,D%d", rhi, rlo); break;
\r
2254 case 0xe040: case 0xe240: case 0xe440: case 0xe640: case 0xe840: case 0xea40: case 0xec40: case 0xee40:
\r
2255 switch ((lo >> 3) & 7)
\r
2257 case 0: sprintf (buffer, "ASR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2258 case 1: sprintf (buffer, "LSR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2259 case 2: sprintf (buffer, "ROXR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2260 case 3: sprintf (buffer, "ROR.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2261 case 4: sprintf (buffer, "ASR.W D%d,D%d", rhi, rlo); break;
\r
2262 case 5: sprintf (buffer, "LSR.W D%d,D%d", rhi, rlo); break;
\r
2263 case 6: sprintf (buffer, "ROXR.W D%d,D%d", rhi, rlo); break;
\r
2264 case 7: sprintf (buffer, "ROR.W D%d,D%d", rhi, rlo); break;
\r
2267 case 0xe080: case 0xe280: case 0xe480: case 0xe680: case 0xe880: case 0xea80: case 0xec80: case 0xee80:
\r
2268 switch ((lo >> 3) & 7)
\r
2270 case 0: sprintf (buffer, "ASR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2271 case 1: sprintf (buffer, "LSR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2272 case 2: sprintf (buffer, "ROXR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2273 case 3: sprintf (buffer, "ROR.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2274 case 4: sprintf (buffer, "ASR.L D%d,D%d", rhi, rlo); break;
\r
2275 case 5: sprintf (buffer, "LSR.L D%d,D%d", rhi, rlo); break;
\r
2276 case 6: sprintf (buffer, "ROXR.L D%d,D%d", rhi, rlo); break;
\r
2277 case 7: sprintf (buffer, "ROR.L D%d,D%d", rhi, rlo); break;
\r
2280 case 0xe0c0: case 0xe2c0: case 0xe4c0: case 0xe6c0:
\r
2281 case 0xe1c0: case 0xe3c0: case 0xe5c0: case 0xe7c0:
\r
2282 ea = MakeEA (lo, p, 4, &count); p += count;
\r
2283 switch ((op >> 8) & 7)
\r
2285 case 0: sprintf (buffer, "ASR.L #1,%s", ea); break;
\r
2286 case 1: sprintf (buffer, "ASL.L #1,%s", ea); break;
\r
2287 case 2: sprintf (buffer, "LSR.L #1,%s", ea); break;
\r
2288 case 3: sprintf (buffer, "LSL.L #1,%s", ea); break;
\r
2289 case 4: sprintf (buffer, "ROXR.L #1,%s", ea); break;
\r
2290 case 5: sprintf (buffer, "ROXL.L #1,%s", ea); break;
\r
2291 case 6: sprintf (buffer, "ROR.L #1,%s", ea); break;
\r
2292 case 7: sprintf (buffer, "ROL.L #1,%s", ea); break;
\r
2295 case 0xe100: case 0xe300: case 0xe500: case 0xe700: case 0xe900: case 0xeb00: case 0xed00: case 0xef00:
\r
2296 switch ((lo >> 3) & 7)
\r
2298 case 0: sprintf (buffer, "ASL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2299 case 1: sprintf (buffer, "LSL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2300 case 2: sprintf (buffer, "ROXL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2301 case 3: sprintf (buffer, "ROL.B #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2302 case 4: sprintf (buffer, "ASL.B D%d,D%d", rhi, rlo); break;
\r
2303 case 5: sprintf (buffer, "LSL.B D%d,D%d", rhi, rlo); break;
\r
2304 case 6: sprintf (buffer, "ROXL.B D%d,D%d", rhi, rlo); break;
\r
2305 case 7: sprintf (buffer, "ROL.B D%d,D%d", rhi, rlo); break;
\r
2308 case 0xe140: case 0xe340: case 0xe540: case 0xe740: case 0xe940: case 0xeb40: case 0xed40: case 0xef40:
\r
2309 switch ((lo >> 3) & 7)
\r
2311 case 0: sprintf (buffer, "ASL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2312 case 1: sprintf (buffer, "LSL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2313 case 2: sprintf (buffer, "ROXL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2314 case 3: sprintf (buffer, "ROL.W #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2315 case 4: sprintf (buffer, "ASL.W D%d,D%d", rhi, rlo); break;
\r
2316 case 5: sprintf (buffer, "LSL.W D%d,D%d", rhi, rlo); break;
\r
2317 case 6: sprintf (buffer, "ROXL.W D%d,D%d", rhi, rlo); break;
\r
2318 case 7: sprintf (buffer, "ROL.W D%d,D%d", rhi, rlo); break;
\r
2321 case 0xe180: case 0xe380: case 0xe580: case 0xe780: case 0xe980: case 0xeb80: case 0xed80: case 0xef80:
\r
2322 switch ((lo >> 3) & 7)
\r
2324 case 0: sprintf (buffer, "ASL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2325 case 1: sprintf (buffer, "LSL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2326 case 2: sprintf (buffer, "ROXL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2327 case 3: sprintf (buffer, "ROL.L #%d,D%d", (rhi == 0) ? 8 : rhi, rlo); break;
\r
2328 case 4: sprintf (buffer, "ASL.L D%d,D%d", rhi, rlo); break;
\r
2329 case 5: sprintf (buffer, "LSL.L D%d,D%d", rhi, rlo); break;
\r
2330 case 6: sprintf (buffer, "ROXL.L D%d,D%d", rhi, rlo); break;
\r
2331 case 7: sprintf (buffer, "ROL.L D%d,D%d", rhi, rlo); break;
\r
2335 sprintf (buffer, "DC.W $%X", op);
\r