]> Shamusworld >> Repos - virtualjaguar/blob - src/m68kdasmAG.cpp
Adding 1.0.1/2 uncompressed tarballs to tags for historical purposes.
[virtualjaguar] / src / m68kdasmAG.cpp
1 /*\r
2  *   A MC68000/MC68010 disassembler\r
3  *\r
4  *   Note: this is probably not the most efficient disassembler in the world :-)\r
5  *\r
6  *   This code written by Aaron Giles (agiles@sirius.com) for the MAME project\r
7  *\r
8  */\r
9 \r
10 #include <string.h>\r
11 #include <stdio.h>\r
12 \r
13 static char *ccodes[16] = { "T ", "F ", "HI", "LS", "CC", "CS", "NE", "EQ", "VC", "VS", "PL", "MI", "GE", "LT", "GT", "LE" };\r
14 \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
17 \r
18 #ifdef LOGGING\r
19 \r
20 static char *MakeEA (int lo, char *pBase, int size, int *count)\r
21 {\r
22         static char buffer[2][80];\r
23         static int which;\r
24 \r
25         unsigned char *p = (unsigned char *)pBase;\r
26         char *buf = buffer[which];\r
27         int reg = lo & 7;\r
28         unsigned long pm;\r
29         int temp;\r
30 \r
31         which ^= 1;\r
32         switch ((lo >> 3) & 7)\r
33         {\r
34                 case 0:\r
35                         sprintf (buf, "D%d", reg);\r
36                         break;\r
37                 case 1:\r
38                         sprintf (buf, "A%d", reg);\r
39                         break;\r
40                 case 2:\r
41                         sprintf (buf, "(A%d)", reg);\r
42                         break;\r
43                 case 3:\r
44                         sprintf (buf, "(A%d)+", reg);\r
45                         break;\r
46                 case 4:\r
47                         sprintf (buf, "-(A%d)", reg);\r
48                         break;\r
49                 case 5:\r
50                         PARAM_WORD (pm);\r
51                         if (pm & 0x8000)\r
52                                 sprintf (buf, "(-$%X,A%d)", -(signed short)pm & 0xffff, reg);\r
53                         else\r
54                                 sprintf (buf, "($%lX,A%d)", pm, reg);\r
55                         break;\r
56                 case 6:\r
57                         PARAM_WORD (pm);\r
58                         temp = pm & 0xff;\r
59                         if (temp & 0x80)\r
60                                 sprintf (buf, "(-$%X,A%d,D%ld.%c)", -(signed char)temp & 0xff, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
61                         else\r
62                                 sprintf (buf, "($%X,A%d,D%ld.%c)", temp, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
63                         break;\r
64                 case 7:\r
65                         switch (reg)\r
66                         {\r
67                                 case 0:\r
68                                         PARAM_WORD (pm);\r
69                                         sprintf (buf, "$%lX", pm);\r
70                                         break;\r
71                                 case 1:\r
72                                         PARAM_LONG (pm);\r
73                                         sprintf (buf, "$%lX", pm);\r
74                                         break;\r
75                                 case 2:\r
76                                         PARAM_WORD (pm);\r
77                                         if (pm & 0x8000)\r
78                                                 sprintf (buf, "(-$%X,PC)", -(signed short)pm & 0xffff);\r
79                                         else\r
80                                                 sprintf (buf, "($%lX,PC)", pm);\r
81                                         break;\r
82                                 case 3:\r
83                                         PARAM_WORD (pm);\r
84                                         temp = pm & 0xff;\r
85                                         if (temp & 0x80)\r
86                                                 sprintf (buf, "(-$%X,PC,D%ld.%c)", -(signed char)temp & 0xff, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
87                                         else\r
88                                                 sprintf (buf, "($%X,PC,D%ld.%c)", temp, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
89                                         break;\r
90                                 case 4:\r
91                                         if (size == 1)\r
92                                         {\r
93                                                 PARAM_WORD (pm);\r
94                                                 temp = pm & 0xff;\r
95                                                 sprintf (buf, "#$%X", temp);\r
96                                         }\r
97                                         else if (size == 2)\r
98                                         {\r
99                                                 PARAM_WORD (pm);\r
100                                                 sprintf (buf, "#$%lX", pm);\r
101                                         }\r
102                                         else\r
103                                         {\r
104                                                 PARAM_LONG (pm);\r
105                                                 sprintf (buf, "#$%lX", pm);\r
106                                         }\r
107                                         break;\r
108                         }\r
109                         break;\r
110         }\r
111 \r
112         *count = p - ((unsigned char*)pBase);\r
113         return buf;\r
114 }\r
115 \r
116 static char *MakeRegList (char *p, unsigned short pm)\r
117 {\r
118         int start = -1, sep = 0;\r
119         int i;\r
120 \r
121         for (i = 0; i < 8; i++, pm >>= 1)\r
122         {\r
123                 if ((pm & 1) && start == -1)\r
124                         start = i;\r
125                 else if (!(pm & 1) && start != -1)\r
126                 {\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
130                         start = -1;\r
131                 }\r
132         }\r
133         if (start != -1)\r
134         {\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
138                 start = -1;\r
139         }\r
140 \r
141         for (i = 0; i < 8; i++, pm >>= 1)\r
142         {\r
143                 if ((pm & 1) && start == -1)\r
144                         start = i;\r
145                 else if (!(pm & 1) && start != -1)\r
146                 {\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
150                         start = -1;\r
151                 }\r
152         }\r
153         if (start != -1)\r
154         {\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
158         }\r
159 \r
160         return p;\r
161 }\r
162 \r
163 static char *MakeRevRegList (char *p, unsigned short pm)\r
164 {\r
165         int start = -1, sep = 0;\r
166         int i;\r
167 \r
168         for (i = 0; i < 8; i++, pm <<= 1)\r
169         {\r
170                 if ((pm & 0x8000) && start == -1)\r
171                         start = i;\r
172                 else if (!(pm & 0x8000) && start != -1)\r
173                 {\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
177                         start = -1;\r
178                 }\r
179         }\r
180         if (start != -1)\r
181         {\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
185                 start = -1;\r
186         }\r
187 \r
188         for (i = 0; i < 8; i++, pm <<= 1)\r
189         {\r
190                 if ((pm & 0x8000) && start == -1)\r
191                         start = i;\r
192                 else if (!(pm & 0x8000) && start != -1)\r
193                 {\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
197                         start = -1;\r
198                 }\r
199         }\r
200         if (start != -1)\r
201         {\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
205         }\r
206 \r
207         return p;\r
208 }\r
209 \r
210 \r
211 int Dasm68000 (char *pBase, char *buffer, int pc)\r
212 {\r
213         char *ea, *ea2, *p = pBase;\r
214         unsigned short op, lo, rhi, rlo;\r
215         unsigned long pm;\r
216         int count;\r
217 \r
218         PARAM_WORD(op);\r
219 \r
220         lo = op & 0x3f;\r
221         rhi = (op >> 9) & 7;\r
222         rlo = op & 7;\r
223         switch (op & 0xffc0)\r
224         {\r
225                 case 0x0000:\r
226                         PARAM_WORD(pm);\r
227                         if (lo == 0x3c)\r
228                                 sprintf (buffer, "ORI      #$%lX,CCR", pm & 0xff);\r
229                         else\r
230                         {\r
231                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
232                                 sprintf (buffer, "ORI.B    #$%lX,%s", pm & 0xff, ea);\r
233                         }\r
234                         break;\r
235                 case 0x0040:\r
236                         PARAM_WORD(pm);\r
237                         if (lo == 0x3c)\r
238                                 sprintf (buffer, "ORI      #$%lX,SR", pm & 0xffff);\r
239                         else\r
240                         {\r
241                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
242                                 sprintf (buffer, "ORI.W    #$%lX,%s", pm & 0xffff, ea);\r
243                         }\r
244                         break;\r
245                 case 0x0080:\r
246                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
247                         sprintf (buffer, "ORI.L    #$%lX,%s", pm, ea);\r
248                         break;\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
251                         {\r
252                                 PARAM_WORD(pm);\r
253                                 sprintf (buffer, "MOVEP.W  ($%lX,A%d),D%d", pm, rlo, rhi);\r
254                         }\r
255                         else\r
256                         {\r
257                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
258                                 sprintf (buffer, "BTST     D%d,%s", rhi, ea);\r
259                         }\r
260                         break;\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
263                         {\r
264                                 PARAM_WORD(pm);\r
265                                 sprintf (buffer, "MOVEP.L  ($%lX,A%d),D%d", pm, rlo, rhi);\r
266                         }\r
267                         else\r
268                         {\r
269                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
270                                 sprintf (buffer, "BCHG     D%d,%s", rhi, ea);\r
271                         }\r
272                         break;\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
275                         {\r
276                                 PARAM_WORD(pm);\r
277                                 sprintf (buffer, "MOVEP.W  D%d,($%lX,A%d)", rhi, pm, rlo);\r
278                         }\r
279                         else\r
280                         {\r
281                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
282                                 sprintf (buffer, "BCLR     D%d,%s", rhi, ea);\r
283                         }\r
284                         break;\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
287                         {\r
288                                 PARAM_WORD(pm);\r
289                                 sprintf (buffer, "MOVEP.L  D%d,($%lX,A%d)", rhi, pm, rlo);\r
290                         }\r
291                         else\r
292                         {\r
293                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
294                                 sprintf (buffer, "BSET     D%d,%s", rhi, ea);\r
295                         }\r
296                         break;\r
297                 case 0x0200:\r
298                         PARAM_WORD(pm);\r
299                         if (lo == 0x3c)\r
300                                 sprintf (buffer, "ANDI     #$%lX,CCR", pm & 0xff);\r
301                         else\r
302                         {\r
303                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
304                                 sprintf (buffer, "ANDI.B   #$%lX,%s", pm & 0xff, ea);\r
305                         }\r
306                         break;\r
307                 case 0x0240:\r
308                         PARAM_WORD(pm);\r
309                         if (lo == 0x3c)\r
310                                 sprintf (buffer, "ANDI     #$%lX,SR", pm & 0xffff);\r
311                         else\r
312                         {\r
313                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
314                                 sprintf (buffer, "ANDI.W   #$%lX,%s", pm & 0xffff, ea);\r
315                         }\r
316                         break;\r
317                 case 0x0280:\r
318                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
319                         sprintf (buffer, "ANDI.L   #$%lX,%s", pm, ea);\r
320                         break;\r
321                 case 0x0400:\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
324                         break;\r
325                 case 0x0440:\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
328                         break;\r
329                 case 0x0480:\r
330                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
331                         sprintf (buffer, "SUBI.L   #$%lX,%s", pm, ea);\r
332                         break;\r
333                 case 0x0600:\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
336                         break;\r
337                 case 0x0640:\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
340                         break;\r
341                 case 0x0680:\r
342                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
343                         sprintf (buffer, "ADDI.L   #$%lX,%s", pm, ea);\r
344                         break;\r
345                 case 0x0800:\r
346                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
347                         sprintf (buffer, "BTST     #$%lX,%s", pm & 0xff, ea);\r
348                         break;\r
349                 case 0x0840:\r
350                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
351                         sprintf (buffer, "BCHG     #$%lX,%s", pm & 0xff, ea);\r
352                         break;\r
353                 case 0x0880:\r
354                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
355                         sprintf (buffer, "BCLR     #$%lX,%s", pm & 0xff, ea);\r
356                         break;\r
357                 case 0x08c0:\r
358                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
359                         sprintf (buffer, "BSET     #$%lX,%s", pm & 0xff, ea);\r
360                         break;\r
361                 case 0x0a00:\r
362                         PARAM_WORD(pm);\r
363                         if (lo == 0x3c)\r
364                                 sprintf (buffer, "EORI     #$%lX,CCR", pm & 0xff);\r
365                         else\r
366                         {\r
367                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
368                                 sprintf (buffer, "EORI.B   #$%lX,%s", pm & 0xff, ea);\r
369                         }\r
370                         break;\r
371                 case 0x0a40:\r
372                         PARAM_WORD(pm);\r
373                         if (lo == 0x3c)\r
374                                 sprintf (buffer, "EORI     #$%lX,SR", pm & 0xffff);\r
375                         else\r
376                         {\r
377                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
378                                 sprintf (buffer, "EORI.W   #$%lX,%s", pm & 0xffff, ea);\r
379                         }\r
380                         break;\r
381                 case 0x0a80:\r
382                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
383                         sprintf (buffer, "EORI.L   #$%lX,%s", pm, ea);\r
384                         break;\r
385                 case 0x0c00:\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
388                         break;\r
389                 case 0x0c40:\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
392                         break;\r
393                 case 0x0c80:\r
394                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
395                         sprintf (buffer, "CMPI.L   #$%lX,%s", pm, ea);\r
396                         break;\r
397                 case 0x0e00:\r
398                         PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;\r
399                         if (pm & 0x0800)\r
400                         {\r
401                                 if (pm & 0x8000)\r
402                                         sprintf (buffer, "MOVES.B  A%ld,%s", (pm >> 12) & 7, ea);\r
403                                 else\r
404                                         sprintf (buffer, "MOVES.B  D%ld,%s", (pm >> 12) & 7, ea);\r
405                         }\r
406                         else\r
407                         {\r
408                                 if (pm & 0x8000)\r
409                                         sprintf (buffer, "MOVES.B  %s,A%ld", ea, (pm >> 12) & 7);\r
410                                 else\r
411                                         sprintf (buffer, "MOVES.B  %s,D%ld", ea, (pm >> 12) & 7);\r
412                         }\r
413                         break;\r
414                 case 0x0e40:\r
415                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
416                         if (pm & 0x0800)\r
417                         {\r
418                                 if (pm & 0x8000)\r
419                                         sprintf (buffer, "MOVES.W  A%ld,%s", (pm >> 12) & 7, ea);\r
420                                 else\r
421                                         sprintf (buffer, "MOVES.W  D%ld,%s", (pm >> 12) & 7, ea);\r
422                         }\r
423                         else\r
424                         {\r
425                                 if (pm & 0x8000)\r
426                                         sprintf (buffer, "MOVES.W  %s,A%ld", ea, (pm >> 12) & 7);\r
427                                 else\r
428                                         sprintf (buffer, "MOVES.W  %s,D%ld", ea, (pm >> 12) & 7);\r
429                         }\r
430                         break;\r
431                 case 0x0e80:\r
432                         PARAM_WORD(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
433                         if (pm & 0x0800)\r
434                         {\r
435                                 if (pm & 0x8000)\r
436                                         sprintf (buffer, "MOVES.L  A%ld,%s", (pm >> 12) & 7, ea);\r
437                                 else\r
438                                         sprintf (buffer, "MOVES.L  D%ld,%s", (pm >> 12) & 7, ea);\r
439                         }\r
440                         else\r
441                         {\r
442                                 if (pm & 0x8000)\r
443                                         sprintf (buffer, "MOVES.L  %s,A%ld", ea, (pm >> 12) & 7);\r
444                                 else\r
445                                         sprintf (buffer, "MOVES.L  %s,D%ld", ea, (pm >> 12) & 7);\r
446                         }\r
447                         break;\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
458                         break;\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
469                         break;\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
473                         break;\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
484                         break;\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
488                         break;\r
489                 case 0x4000:\r
490                         ea = MakeEA (lo, p, 1, &count); p += count;\r
491                         sprintf (buffer, "NEGX.B   %s", ea);\r
492                         break;\r
493                 case 0x4040:\r
494                         ea = MakeEA (lo, p, 2, &count); p += count;\r
495                         sprintf (buffer, "NEGX.W   %s", ea);\r
496                         break;\r
497                 case 0x4080:\r
498                         ea = MakeEA (lo, p, 4, &count); p += count;\r
499                         sprintf (buffer, "NEGX.L   %s", ea);\r
500                         break;\r
501                 case 0x40c0:\r
502                         ea = MakeEA (lo, p, 2, &count); p += count;\r
503                         sprintf (buffer, "MOVE     SR,%s", ea);\r
504                         break;\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
508                         break;\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
512                         break;\r
513                 case 0x4200:\r
514                         ea = MakeEA (lo, p, 1, &count); p += count;\r
515                         sprintf (buffer, "CLR.B    %s", ea);\r
516                         break;\r
517                 case 0x4240:\r
518                         ea = MakeEA (lo, p, 2, &count); p += count;\r
519                         sprintf (buffer, "CLR.W    %s", ea);\r
520                         break;\r
521                 case 0x4280:\r
522                         ea = MakeEA (lo, p, 4, &count); p += count;\r
523                         sprintf (buffer, "CLR.L    %s", ea);\r
524                         break;\r
525                 case 0x42c0:\r
526                         ea = MakeEA (lo, p, 2, &count); p += count;\r
527                         sprintf (buffer, "MOVE     CCR,%s", ea);\r
528                         break;\r
529                 case 0x4400:\r
530                         ea = MakeEA (lo, p, 1, &count); p += count;\r
531                         sprintf (buffer, "NEG.B    %s", ea);\r
532                         break;\r
533                 case 0x4440:\r
534                         ea = MakeEA (lo, p, 2, &count); p += count;\r
535                         sprintf (buffer, "NEG.W    %s", ea);\r
536                         break;\r
537                 case 0x4480:\r
538                         ea = MakeEA (lo, p, 4, &count); p += count;\r
539                         sprintf (buffer, "NEG.L    %s", ea);\r
540                         break;\r
541                 case 0x44c0:\r
542                         ea = MakeEA (lo, p, 2, &count); p += count;\r
543                         sprintf (buffer, "MOVE     %s,CCR", ea);\r
544                         break;\r
545                 case 0x4600:\r
546                         ea = MakeEA (lo, p, 1, &count); p += count;\r
547                         sprintf (buffer, "NOT.B    %s", ea);\r
548                         break;\r
549                 case 0x4640:\r
550                         ea = MakeEA (lo, p, 2, &count); p += count;\r
551                         sprintf (buffer, "NOT.W    %s", ea);\r
552                         break;\r
553                 case 0x4680:\r
554                         ea = MakeEA (lo, p, 4, &count); p += count;\r
555                         sprintf (buffer, "NOT.L    %s", ea);\r
556                         break;\r
557                 case 0x46c0:\r
558                         ea = MakeEA (lo, p, 2, &count); p += count;\r
559                         sprintf (buffer, "MOVE     %s,SR", ea);\r
560                         break;\r
561                 case 0x4800:\r
562                         ea = MakeEA (lo, p, 1, &count); p += count;\r
563                         sprintf (buffer, "NBCD.B   %s", ea);\r
564                         break;\r
565                 case 0x4840:\r
566                         if ((lo & 0x38) == 0x00)\r
567                                 sprintf (buffer, "SWAP     D%d", rlo);\r
568                         else\r
569                         {\r
570                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
571                                 sprintf (buffer, "PEA      %s", ea);\r
572                         }\r
573                         break;\r
574                 case 0x4880:\r
575                         if ((lo & 0x38) == 0x00)\r
576                                 sprintf (buffer, "EXT.W    D%d", rlo);\r
577                         else\r
578                         {\r
579                                 char *b = buffer;\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
585                         }\r
586                         break;\r
587                 case 0x48c0:\r
588                         if ((lo & 0x38) == 0x00)\r
589                                 sprintf (buffer, "EXT.L    D%d", rlo);\r
590                         else\r
591                         {\r
592                                 char *b = buffer;\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
598                         }\r
599                         break;\r
600                 case 0x4a00:\r
601                         ea = MakeEA (lo, p, 1, &count); p += count;\r
602                         sprintf (buffer, "TST.B    %s", ea);\r
603                         break;\r
604                 case 0x4a40:\r
605                         ea = MakeEA (lo, p, 2, &count); p += count;\r
606                         sprintf (buffer, "TST.W    %s", ea);\r
607                         break;\r
608                 case 0x4a80:\r
609                         ea = MakeEA (lo, p, 4, &count); p += count;\r
610                         sprintf (buffer, "TST.L    %s", ea);\r
611                         break;\r
612                 case 0x4ac0:\r
613                         ea = MakeEA (lo, p, 1, &count); p += count;\r
614                         sprintf (buffer, "TAS.B    %s", ea);\r
615                         break;\r
616                 case 0x4c80:\r
617                         {\r
618                                 char *b = buffer;\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
622                         }\r
623                         break;\r
624                 case 0x4cc0:\r
625                         {\r
626                                 char *b = buffer;\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
630                         }\r
631                         break;\r
632                 case 0x4e40:\r
633                         if ((lo & 30) == 0x00)\r
634                                 sprintf (buffer, "TRAP     #$%X", lo & 15);\r
635                         else if ((lo & 0x38) == 0x10)\r
636                         {\r
637                                 PARAM_WORD (pm);\r
638                                 sprintf (buffer, "LINK     A%d,#$%lX", rlo, pm);\r
639                         }\r
640                         else if ((lo & 0x38) == 0x18)\r
641                         {\r
642                                 sprintf (buffer, "UNLK     A%d", rlo);\r
643                         }\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
663                         {\r
664                                 PARAM_WORD (pm);\r
665                                 switch (pm & 0xfff)\r
666                                 {\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
672                                 }\r
673                                 if (pm & 0x8000)\r
674                                         sprintf (buffer, "MOVEC    %s,A%ld", ea, (pm >> 12) & 7);\r
675                                 else\r
676                                         sprintf (buffer, "MOVEC    %s,D%ld", ea, (pm >> 12) & 7);\r
677                         }\r
678                         else if (lo == 0x3b)\r
679                         {\r
680                                 PARAM_WORD (pm);\r
681                                 switch (pm & 0xfff)\r
682                                 {\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
688                                 }\r
689                                 if (pm & 0x8000)\r
690                                         sprintf (buffer, "MOVEC    A%ld,%s", (pm >> 12) & 7, ea);\r
691                                 else\r
692                                         sprintf (buffer, "MOVEC    D%ld,%s", (pm >> 12) & 7, ea);\r
693                         }\r
694                         else\r
695                                 sprintf (buffer, "DC.W     $%X", op);\r
696                         break;\r
697                 case 0x4e80:\r
698                         ea = MakeEA (lo, p, 4, &count); p += count;\r
699                         sprintf (buffer, "JSR      %s", ea);\r
700                         break;\r
701                 case 0x4ec0:\r
702                         ea = MakeEA (lo, p, 4, &count); p += count;\r
703                         sprintf (buffer, "JMP      %s", ea);\r
704                         break;\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
708                         break;\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
712                         break;\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
716                         break;\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
720                         {\r
721                                 PARAM_WORD (pm);\r
722                                 if (pm & 0x8000)\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
724                                 else\r
725                                         sprintf (buffer, "DB%s     D%d,*+$%lX [%lX]", ccodes[(op >> 8) & 15], rlo, pm - 2, pc + pm + 2);\r
726                         }\r
727                         else\r
728                         {\r
729                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
730                                 sprintf (buffer, "S%s.B    %s", ccodes[(op >> 8) & 15], ea);\r
731                         }\r
732                         break;\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
736                         break;\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
740                         break;\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
744                         break;\r
745                 case 0x6000: case 0x6040: case 0x6080: case 0x60c0:\r
746                         pm = op & 0xff;\r
747                         if (pm == 0)\r
748                         {\r
749                                 PARAM_WORD(pm);\r
750                                 if (pm & 0x8000)\r
751                                         sprintf (buffer, "BRA      *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
752                                 else\r
753                                         sprintf (buffer, "BRA      *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
754                         }\r
755                         else\r
756                         {\r
757                                 if (pm & 0x80)\r
758                                         sprintf (buffer, "BRA.S    *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
759                                 else\r
760                                         sprintf (buffer, "BRA.S    *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
761                         }\r
762                         break;\r
763                 case 0x6100: case 0x6140: case 0x6180: case 0x61c0:\r
764                         pm = op & 0xff;\r
765                         if (pm == 0)\r
766                         {\r
767                                 PARAM_WORD(pm);\r
768                                 if (pm & 0x8000)\r
769                                         sprintf (buffer, "BSR      *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
770                                 else\r
771                                         sprintf (buffer, "BSR      *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
772                         }\r
773                         else\r
774                         {\r
775                                 if (pm & 0x80)\r
776                                         sprintf (buffer, "BSR.S    *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
777                                 else\r
778                                         sprintf (buffer, "BSR.S    *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
779                         }\r
780                         break;\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
788                         pm = op & 0xff;\r
789                         if (pm == 0)\r
790                         {\r
791                                 PARAM_WORD(pm);\r
792                                 if (pm & 0x8000)\r
793                                         sprintf (buffer, "B%s      *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
794                                 else\r
795                                         sprintf (buffer, "B%s      *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);\r
796                         }\r
797                         else\r
798                         {\r
799                                 if (pm & 0x80)\r
800                                         sprintf (buffer, "B%s.S    *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
801                                 else\r
802                                         sprintf (buffer, "B%s.S    *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);\r
803                         }\r
804                         break;\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
813                         pm = op & 0xff;\r
814                         if (pm & 0x80)\r
815                                 sprintf (buffer, "MOVEQ    #$-%X,D%d", -(signed char)pm, rhi);\r
816                         else\r
817                                 sprintf (buffer, "MOVEQ    #$%lX,D%d", pm, rhi);\r
818                         break;\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
822                         break;\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
826                         break;\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
830                         break;\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
834                         break;\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
838                         break;\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
842                         break;\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
846                         break;\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
850                         break;\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
854                         break;\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
858                         break;\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
862                         break;\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
866                         break;\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
869                         {\r
870                                 if (lo & 0x08)\r
871                                         sprintf (buffer, "SUBX.B   -(A%d),-(A%d)", rlo, rhi);\r
872                                 else\r
873                                         sprintf (buffer, "SUBX.B   D%d,D%d", rlo, rhi);\r
874                         }\r
875                         else\r
876                         {\r
877                                 ea = MakeEA (lo, p, 1,&count); p += count;\r
878                                 sprintf (buffer, "SUB.B    D%d,%s", rhi, ea);\r
879                         }\r
880                         break;\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
883                         {\r
884                                 if (lo & 0x08)\r
885                                         sprintf (buffer, "SUBX.W   -(A%d),-(A%d)", rlo, rhi);\r
886                                 else\r
887                                         sprintf (buffer, "SUBX.W   D%d,D%d", rlo, rhi);\r
888                         }\r
889                         else\r
890                         {\r
891                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
892                                 sprintf (buffer, "SUB.W    D%d,%s", rhi, ea);\r
893                         }\r
894                         break;\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
897                         {\r
898                                 if (lo & 0x08)\r
899                                         sprintf (buffer, "SUBX.L   -(A%d),-(A%d)", rlo, rhi);\r
900                                 else\r
901                                         sprintf (buffer, "SUBX.L   D%d,D%d", rlo, rhi);\r
902                         }\r
903                         else\r
904                         {\r
905                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
906                                 sprintf (buffer, "SUB.L    D%d,%s", rhi, ea);\r
907                         }\r
908                         break;\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
912                         break;\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
916                         break;\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
920                         break;\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
924                         break;\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
928                         break;\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
932                         else\r
933                         {\r
934                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
935                                 sprintf (buffer, "EOR.B    D%d,%s", rhi, ea);\r
936                         }\r
937                         break;\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
941                         else\r
942                         {\r
943                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
944                                 sprintf (buffer, "EOR.W    D%d,%s", rhi, ea);\r
945                         }\r
946                         break;\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
950                         else\r
951                         {\r
952                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
953                                 sprintf (buffer, "EOR.L    D%d,%s", rhi, ea);\r
954                         }\r
955                         break;\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
959                         break;\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
963                         break;\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
967                         break;\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
971                         break;\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
975                         break;\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
978                         {\r
979                                 if (lo & 0x08)\r
980                                         sprintf (buffer, "ABCD.B   -(A%d),-(A%d)", rlo, rhi);\r
981                                 else\r
982                                         sprintf (buffer, "ABCD.B   D%d,D%d", rlo, rhi);\r
983                         }\r
984                         else\r
985                         {\r
986                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
987                                 sprintf (buffer, "AND.B    D%d,%s", rhi, ea);\r
988                         }\r
989                         break;\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
992                         {\r
993                                 if (lo & 0x08)\r
994                                         sprintf (buffer, "EXG      A%d,A%d", rhi, rlo);\r
995                                 else\r
996                                         sprintf (buffer, "EXG      D%d,D%d", rhi, rlo);\r
997                         }\r
998                         else\r
999                         {\r
1000                                 ea = MakeEA (lo, p, 2,&count); p += count;\r
1001                                 sprintf (buffer, "AND.W    D%d,%s", rhi, ea);\r
1002                         }\r
1003                         break;\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
1007                         else\r
1008                         {\r
1009                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
1010                                 sprintf (buffer, "AND.L    D%d,%s", rhi, ea);\r
1011                         }\r
1012                         break;\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
1016                         break;\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
1020                         break;\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
1024                         break;\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
1028                         break;\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
1032                         break;\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
1035                         {\r
1036                                 if (lo & 0x08)\r
1037                                         sprintf (buffer, "ADDX.B   -(A%d),-(A%d)", rlo, rhi);\r
1038                                 else\r
1039                                         sprintf (buffer, "ADDX.B   D%d,D%d", rlo, rhi);\r
1040                         }\r
1041                         else\r
1042                         {\r
1043                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
1044                                 sprintf (buffer, "ADD.B    D%d,%s", rhi, ea);\r
1045                         }\r
1046                         break;\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
1049                         {\r
1050                                 if (lo & 0x08)\r
1051                                         sprintf (buffer, "ADDX.W   -(A%d),-(A%d)", rlo, rhi);\r
1052                                 else\r
1053                                         sprintf (buffer, "ADDX.W   D%d,D%d", rlo, rhi);\r
1054                         }\r
1055                         else\r
1056                         {\r
1057                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1058                                 sprintf (buffer, "ADD.W    D%d,%s", rhi, ea);\r
1059                         }\r
1060                         break;\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
1063                         {\r
1064                                 if (lo & 0x08)\r
1065                                         sprintf (buffer, "ADDX.L   -(A%d),-(A%d)", rlo, rhi);\r
1066                                 else\r
1067                                         sprintf (buffer, "ADDX.L   D%d,D%d", rlo, rhi);\r
1068                         }\r
1069                         else\r
1070                         {\r
1071                                 ea = MakeEA (lo, p, 4,&count); p += count;\r
1072                                 sprintf (buffer, "ADD.L    D%d,%s", rhi, ea);\r
1073                         }\r
1074                         break;\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
1078                         break;\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
1081                         {\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
1090                         }\r
1091                         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
1094                         {\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
1103                         }\r
1104                         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
1107                         {\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
1116                         }\r
1117                         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
1122                         {\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
1131                         }\r
1132                         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
1135                         {\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
1144                         }\r
1145                         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
1148                         {\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
1157                         }\r
1158                         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
1161                         {\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
1170                         }\r
1171                         break;\r
1172                 default:\r
1173                         sprintf (buffer, "DC.W     $%X", op);\r
1174                         break;\r
1175         }\r
1176 \r
1177         return p - pBase;\r
1178 }\r
1179 \r
1180 #else\r
1181 \r
1182 static char *MakeEA (int lo, char *pBase, int size, int *count)\r
1183 {\r
1184         static char buffer[2][80];\r
1185         static int which;\r
1186 \r
1187         unsigned char *p = (unsigned char *)pBase;\r
1188         char *buf = buffer[which];\r
1189         int reg = lo & 7;\r
1190         unsigned long pm;\r
1191         int temp;\r
1192 \r
1193         which ^= 1;\r
1194         switch ((lo >> 3) & 7)\r
1195         {\r
1196                 case 0:\r
1197                         sprintf (buf, "D%d", reg);\r
1198                         break;\r
1199                 case 1:\r
1200                         sprintf (buf, "A%d", reg);\r
1201                         break;\r
1202                 case 2:\r
1203                         sprintf (buf, "(A%d)", reg);\r
1204                         break;\r
1205                 case 3:\r
1206                         sprintf (buf, "(A%d)+", reg);\r
1207                         break;\r
1208                 case 4:\r
1209                         sprintf (buf, "-(A%d)", reg);\r
1210                         break;\r
1211                 case 5:\r
1212                         PARAM_WORD (pm);\r
1213                         if (pm & 0x8000)\r
1214                                 sprintf (buf, "(-$%X,A%d)", -(signed short)pm & 0xffff, reg);\r
1215                         else\r
1216                                 sprintf (buf, "($%lX,A%d)", pm, reg);\r
1217                         break;\r
1218                 case 6:\r
1219                         PARAM_WORD (pm);\r
1220                         temp = pm & 0xff;\r
1221                         if (temp & 0x80)\r
1222                                 sprintf (buf, "(-$%X,A%d,D%ld.%c)", -(signed char)temp & 0xff, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
1223                         else\r
1224                                 sprintf (buf, "($%X,A%d,D%ld.%c)", temp, reg, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
1225                         break;\r
1226                 case 7:\r
1227                         switch (reg)\r
1228                         {\r
1229                                 case 0:\r
1230                                         PARAM_WORD (pm);\r
1231                                         sprintf (buf, "$%lX", pm);\r
1232                                         break;\r
1233                                 case 1:\r
1234                                         PARAM_LONG (pm);\r
1235                                         sprintf (buf, "$%lX", pm);\r
1236                                         break;\r
1237                                 case 2:\r
1238                                         PARAM_WORD (pm);\r
1239                                         if (pm & 0x8000)\r
1240                                                 sprintf (buf, "(-$%X,PC)", -(signed short)pm & 0xffff);\r
1241                                         else\r
1242                                                 sprintf (buf, "($%lX,PC)", pm);\r
1243                                         break;\r
1244                                 case 3:\r
1245                                         PARAM_WORD (pm);\r
1246                                         temp = pm & 0xff;\r
1247                                         if (temp & 0x80)\r
1248                                                 sprintf (buf, "(-$%X,PC,D%ld.%c)", -(signed char)temp & 0xff, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
1249                                         else\r
1250                                                 sprintf (buf, "($%X,PC,D%ld.%c)", temp, (pm >> 12) & 7, (pm & 800) ? 'L' : 'W');\r
1251                                         break;\r
1252                                 case 4:\r
1253                                         if (size == 1)\r
1254                                         {\r
1255                                                 PARAM_WORD (pm);\r
1256                                                 temp = pm & 0xff;\r
1257                                                 sprintf (buf, "#$%X", temp);\r
1258                                         }\r
1259                                         else if (size == 2)\r
1260                                         {\r
1261                                                 PARAM_WORD (pm);\r
1262                                                 sprintf (buf, "#$%lX", pm);\r
1263                                         }\r
1264                                         else\r
1265                                         {\r
1266                                                 PARAM_LONG (pm);\r
1267                                                 sprintf (buf, "#$%lX", pm);\r
1268                                         }\r
1269                                         break;\r
1270                         }\r
1271                         break;\r
1272         }\r
1273 \r
1274         *count = p - ((unsigned char*)pBase);\r
1275         return buf;\r
1276 }\r
1277 \r
1278 static char *MakeRegList (char *p, unsigned short pm)\r
1279 {\r
1280         int start = -1, sep = 0;\r
1281         int i;\r
1282 \r
1283         for (i = 0; i < 8; i++, pm >>= 1)\r
1284         {\r
1285                 if ((pm & 1) && start == -1)\r
1286                         start = i;\r
1287                 else if (!(pm & 1) && start != -1)\r
1288                 {\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
1292                         start = -1;\r
1293                 }\r
1294         }\r
1295         if (start != -1)\r
1296         {\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
1300                 start = -1;\r
1301         }\r
1302 \r
1303         for (i = 0; i < 8; i++, pm >>= 1)\r
1304         {\r
1305                 if ((pm & 1) && start == -1)\r
1306                         start = i;\r
1307                 else if (!(pm & 1) && start != -1)\r
1308                 {\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
1312                         start = -1;\r
1313                 }\r
1314         }\r
1315         if (start != -1)\r
1316         {\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
1320         }\r
1321 \r
1322         return p;\r
1323 }\r
1324 \r
1325 static char *MakeRevRegList (char *p, unsigned short pm)\r
1326 {\r
1327         int start = -1, sep = 0;\r
1328         int i;\r
1329 \r
1330         for (i = 0; i < 8; i++, pm <<= 1)\r
1331         {\r
1332                 if ((pm & 0x8000) && start == -1)\r
1333                         start = i;\r
1334                 else if (!(pm & 0x8000) && start != -1)\r
1335                 {\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
1339                         start = -1;\r
1340                 }\r
1341         }\r
1342         if (start != -1)\r
1343         {\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
1347                 start = -1;\r
1348         }\r
1349 \r
1350         for (i = 0; i < 8; i++, pm <<= 1)\r
1351         {\r
1352                 if ((pm & 0x8000) && start == -1)\r
1353                         start = i;\r
1354                 else if (!(pm & 0x8000) && start != -1)\r
1355                 {\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
1359                         start = -1;\r
1360                 }\r
1361         }\r
1362         if (start != -1)\r
1363         {\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
1367         }\r
1368 \r
1369         return p;\r
1370 }\r
1371 \r
1372 \r
1373 int Dasm68000 (char *pBase, char *buffer, int pc)\r
1374 {\r
1375         char *ea, *ea2, *p = pBase;\r
1376         unsigned short op, lo, rhi, rlo;\r
1377         unsigned long pm;\r
1378         int count;\r
1379 \r
1380         PARAM_WORD(op);\r
1381 \r
1382         lo = op & 0x3f;\r
1383         rhi = (op >> 9) & 7;\r
1384         rlo = op & 7;\r
1385         switch (op & 0xffc0)\r
1386         {\r
1387                 case 0x0000:\r
1388                         PARAM_WORD(pm);\r
1389                         if (lo == 0x3c)\r
1390                                 sprintf (buffer, "ORI      #$%lX,CCR", pm & 0xff);\r
1391                         else\r
1392                         {\r
1393                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
1394                                 sprintf (buffer, "ORI.B    #$%lX,%s", pm & 0xff, ea);\r
1395                         }\r
1396                         break;\r
1397                 case 0x0040:\r
1398                         PARAM_WORD(pm);\r
1399                         if (lo == 0x3c)\r
1400                                 sprintf (buffer, "ORI      #$%lX,SR", pm & 0xffff);\r
1401                         else\r
1402                         {\r
1403                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1404                                 sprintf (buffer, "ORI.W    #$%lX,%s", pm & 0xffff, ea);\r
1405                         }\r
1406                         break;\r
1407                 case 0x0080:\r
1408                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1409                         sprintf (buffer, "ORI.L    #$%lX,%s", pm, ea);\r
1410                         break;\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
1413                         {\r
1414                                 PARAM_WORD(pm);\r
1415                                 sprintf (buffer, "MOVEP.W  ($%lX,A%d),D%d", pm, rlo, rhi);\r
1416                         }\r
1417                         else\r
1418                         {\r
1419                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1420                                 sprintf (buffer, "BTST     D%d,%s", rhi, ea);\r
1421                         }\r
1422                         break;\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
1425                         {\r
1426                                 PARAM_WORD(pm);\r
1427                                 sprintf (buffer, "MOVEP.L  ($%lX,A%d),D%d", pm, rlo, rhi);\r
1428                         }\r
1429                         else\r
1430                         {\r
1431                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1432                                 sprintf (buffer, "BCHG     D%d,%s", rhi, ea);\r
1433                         }\r
1434                         break;\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
1437                         {\r
1438                                 PARAM_WORD(pm);\r
1439                                 sprintf (buffer, "MOVEP.W  D%d,($%lX,A%d)", rhi, pm, rlo);\r
1440                         }\r
1441                         else\r
1442                         {\r
1443                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1444                                 sprintf (buffer, "BCLR     D%d,%s", rhi, ea);\r
1445                         }\r
1446                         break;\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
1449                         {\r
1450                                 PARAM_WORD(pm);\r
1451                                 sprintf (buffer, "MOVEP.L  D%d,($%lX,A%d)", rhi, pm, rlo);\r
1452                         }\r
1453                         else\r
1454                         {\r
1455                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1456                                 sprintf (buffer, "BSET     D%d,%s", rhi, ea);\r
1457                         }\r
1458                         break;\r
1459                 case 0x0200:\r
1460                         PARAM_WORD(pm);\r
1461                         if (lo == 0x3c)\r
1462                                 sprintf (buffer, "ANDI     #$%lX,CCR", pm & 0xff);\r
1463                         else\r
1464                         {\r
1465                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
1466                                 sprintf (buffer, "ANDI.B   #$%lX,%s", pm & 0xff, ea);\r
1467                         }\r
1468                         break;\r
1469                 case 0x0240:\r
1470                         PARAM_WORD(pm);\r
1471                         if (lo == 0x3c)\r
1472                                 sprintf (buffer, "ANDI     #$%lX,SR", pm & 0xffff);\r
1473                         else\r
1474                         {\r
1475                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1476                                 sprintf (buffer, "ANDI.W   #$%lX,%s", pm & 0xffff, ea);\r
1477                         }\r
1478                         break;\r
1479                 case 0x0280:\r
1480                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1481                         sprintf (buffer, "ANDI.L   #$%lX,%s", pm, ea);\r
1482                         break;\r
1483                 case 0x0400:\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
1486                         break;\r
1487                 case 0x0440:\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
1490                         break;\r
1491                 case 0x0480:\r
1492                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1493                         sprintf (buffer, "SUBI.L   #$%lX,%s", pm, ea);\r
1494                         break;\r
1495                 case 0x0600:\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
1498                         break;\r
1499                 case 0x0640:\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
1502                         break;\r
1503                 case 0x0680:\r
1504                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1505                         sprintf (buffer, "ADDI.L   #$%lX,%s", pm, ea);\r
1506                         break;\r
1507                 case 0x0800:\r
1508                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
1509                         sprintf (buffer, "BTST     #$%lX,%s", pm & 0xff, ea);\r
1510                         break;\r
1511                 case 0x0840:\r
1512                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
1513                         sprintf (buffer, "BCHG     #$%lX,%s", pm & 0xff, ea);\r
1514                         break;\r
1515                 case 0x0880:\r
1516                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
1517                         sprintf (buffer, "BCLR     #$%lX,%s", pm & 0xff, ea);\r
1518                         break;\r
1519                 case 0x08c0:\r
1520                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
1521                         sprintf (buffer, "BSET     #$%lX,%s", pm & 0xff, ea);\r
1522                         break;\r
1523                 case 0x0a00:\r
1524                         PARAM_WORD(pm);\r
1525                         if (lo == 0x3c)\r
1526                                 sprintf (buffer, "EORI     #$%lX,CCR", pm & 0xff);\r
1527                         else\r
1528                         {\r
1529                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
1530                                 sprintf (buffer, "EORI.B   #$%lX,%s", pm & 0xff, ea);\r
1531                         }\r
1532                         break;\r
1533                 case 0x0a40:\r
1534                         PARAM_WORD(pm);\r
1535                         if (lo == 0x3c)\r
1536                                 sprintf (buffer, "EORI     #$%lX,SR", pm & 0xffff);\r
1537                         else\r
1538                         {\r
1539                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
1540                                 sprintf (buffer, "EORI.W   #$%lX,%s", pm & 0xffff, ea);\r
1541                         }\r
1542                         break;\r
1543                 case 0x0a80:\r
1544                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1545                         sprintf (buffer, "EORI.L   #$%lX,%s", pm, ea);\r
1546                         break;\r
1547                 case 0x0c00:\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
1550                         break;\r
1551                 case 0x0c40:\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
1554                         break;\r
1555                 case 0x0c80:\r
1556                         PARAM_LONG(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1557                         sprintf (buffer, "CMPI.L   #$%lX,%s", pm, ea);\r
1558                         break;\r
1559                 case 0x0e00:\r
1560                         PARAM_WORD(pm); ea = MakeEA (lo, p, 1, &count); p += count;\r
1561                         if (pm & 0x0800)\r
1562                         {\r
1563                                 if (pm & 0x8000)\r
1564                                         sprintf (buffer, "MOVES.B  A%ld,%s", (pm >> 12) & 7, ea);\r
1565                                 else\r
1566                                         sprintf (buffer, "MOVES.B  D%ld,%s", (pm >> 12) & 7, ea);\r
1567                         }\r
1568                         else\r
1569                         {\r
1570                                 if (pm & 0x8000)\r
1571                                         sprintf (buffer, "MOVES.B  %s,A%ld", ea, (pm >> 12) & 7);\r
1572                                 else\r
1573                                         sprintf (buffer, "MOVES.B  %s,D%ld", ea, (pm >> 12) & 7);\r
1574                         }\r
1575                         break;\r
1576                 case 0x0e40:\r
1577                         PARAM_WORD(pm); ea = MakeEA (lo, p, 2, &count); p += count;\r
1578                         if (pm & 0x0800)\r
1579                         {\r
1580                                 if (pm & 0x8000)\r
1581                                         sprintf (buffer, "MOVES.W  A%ld,%s", (pm >> 12) & 7, ea);\r
1582                                 else\r
1583                                         sprintf (buffer, "MOVES.W  D%ld,%s", (pm >> 12) & 7, ea);\r
1584                         }\r
1585                         else\r
1586                         {\r
1587                                 if (pm & 0x8000)\r
1588                                         sprintf (buffer, "MOVES.W  %s,A%ld", ea, (pm >> 12) & 7);\r
1589                                 else\r
1590                                         sprintf (buffer, "MOVES.W  %s,D%ld", ea, (pm >> 12) & 7);\r
1591                         }\r
1592                         break;\r
1593                 case 0x0e80:\r
1594                         PARAM_WORD(pm); ea = MakeEA (lo, p, 4, &count); p += count;\r
1595                         if (pm & 0x0800)\r
1596                         {\r
1597                                 if (pm & 0x8000)\r
1598                                         sprintf (buffer, "MOVES.L  A%ld,%s", (pm >> 12) & 7, ea);\r
1599                                 else\r
1600                                         sprintf (buffer, "MOVES.L  D%ld,%s", (pm >> 12) & 7, ea);\r
1601                         }\r
1602                         else\r
1603                         {\r
1604                                 if (pm & 0x8000)\r
1605                                         sprintf (buffer, "MOVES.L  %s,A%ld", ea, (pm >> 12) & 7);\r
1606                                 else\r
1607                                         sprintf (buffer, "MOVES.L  %s,D%ld", ea, (pm >> 12) & 7);\r
1608                         }\r
1609                         break;\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
1620                         break;\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
1631                         break;\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
1635                         break;\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
1646                         break;\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
1650                         break;\r
1651                 case 0x4000:\r
1652                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1653                         sprintf (buffer, "NEGX.B   %s", ea);\r
1654                         break;\r
1655                 case 0x4040:\r
1656                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1657                         sprintf (buffer, "NEGX.W   %s", ea);\r
1658                         break;\r
1659                 case 0x4080:\r
1660                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1661                         sprintf (buffer, "NEGX.L   %s", ea);\r
1662                         break;\r
1663                 case 0x40c0:\r
1664                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1665                         sprintf (buffer, "MOVE     SR,%s", ea);\r
1666                         break;\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
1670                         break;\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
1674                         break;\r
1675                 case 0x4200:\r
1676                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1677                         sprintf (buffer, "CLR.B    %s", ea);\r
1678                         break;\r
1679                 case 0x4240:\r
1680                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1681                         sprintf (buffer, "CLR.W    %s", ea);\r
1682                         break;\r
1683                 case 0x4280:\r
1684                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1685                         sprintf (buffer, "CLR.L    %s", ea);\r
1686                         break;\r
1687                 case 0x42c0:\r
1688                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1689                         sprintf (buffer, "MOVE     CCR,%s", ea);\r
1690                         break;\r
1691                 case 0x4400:\r
1692                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1693                         sprintf (buffer, "NEG.B    %s", ea);\r
1694                         break;\r
1695                 case 0x4440:\r
1696                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1697                         sprintf (buffer, "NEG.W    %s", ea);\r
1698                         break;\r
1699                 case 0x4480:\r
1700                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1701                         sprintf (buffer, "NEG.L    %s", ea);\r
1702                         break;\r
1703                 case 0x44c0:\r
1704                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1705                         sprintf (buffer, "MOVE     %s,CCR", ea);\r
1706                         break;\r
1707                 case 0x4600:\r
1708                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1709                         sprintf (buffer, "NOT.B    %s", ea);\r
1710                         break;\r
1711                 case 0x4640:\r
1712                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1713                         sprintf (buffer, "NOT.W    %s", ea);\r
1714                         break;\r
1715                 case 0x4680:\r
1716                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1717                         sprintf (buffer, "NOT.L    %s", ea);\r
1718                         break;\r
1719                 case 0x46c0:\r
1720                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1721                         sprintf (buffer, "MOVE     %s,SR", ea);\r
1722                         break;\r
1723                 case 0x4800:\r
1724                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1725                         sprintf (buffer, "NBCD.B   %s", ea);\r
1726                         break;\r
1727                 case 0x4840:\r
1728                         if ((lo & 0x38) == 0x00)\r
1729                                 sprintf (buffer, "SWAP     D%d", rlo);\r
1730                         else\r
1731                         {\r
1732                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
1733                                 sprintf (buffer, "PEA      %s", ea);\r
1734                         }\r
1735                         break;\r
1736                 case 0x4880:\r
1737                         if ((lo & 0x38) == 0x00)\r
1738                                 sprintf (buffer, "EXT.W    D%d", rlo);\r
1739                         else\r
1740                         {\r
1741                                 char *b = buffer;\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
1747                         }\r
1748                         break;\r
1749                 case 0x48c0:\r
1750                         if ((lo & 0x38) == 0x00)\r
1751                                 sprintf (buffer, "EXT.L    D%d", rlo);\r
1752                         else\r
1753                         {\r
1754                                 char *b = buffer;\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
1760                         }\r
1761                         break;\r
1762                 case 0x4a00:\r
1763                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1764                         sprintf (buffer, "TST.B    %s", ea);\r
1765                         break;\r
1766                 case 0x4a40:\r
1767                         ea = MakeEA (lo, p, 2, &count); p += count;\r
1768                         sprintf (buffer, "TST.W    %s", ea);\r
1769                         break;\r
1770                 case 0x4a80:\r
1771                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1772                         sprintf (buffer, "TST.L    %s", ea);\r
1773                         break;\r
1774                 case 0x4ac0:\r
1775                         ea = MakeEA (lo, p, 1, &count); p += count;\r
1776                         sprintf (buffer, "TAS.B    %s", ea);\r
1777                         break;\r
1778                 case 0x4c80:\r
1779                         {\r
1780                                 char *b = buffer;\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
1784                         }\r
1785                         break;\r
1786                 case 0x4cc0:\r
1787                         {\r
1788                                 char *b = buffer;\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
1792                         }\r
1793                         break;\r
1794                 case 0x4e40:\r
1795                         if ((lo & 30) == 0x00)\r
1796                                 sprintf (buffer, "TRAP     #$%X", lo & 15);\r
1797                         else if ((lo & 0x38) == 0x10)\r
1798                         {\r
1799                                 PARAM_WORD (pm);\r
1800                                 sprintf (buffer, "LINK     A%d,#$%lX", rlo, pm);\r
1801                         }\r
1802                         else if ((lo & 0x38) == 0x18)\r
1803                         {\r
1804                                 sprintf (buffer, "UNLK     A%d", rlo);\r
1805                         }\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
1825                         {\r
1826                                 PARAM_WORD (pm);\r
1827                                 switch (pm & 0xfff)\r
1828                                 {\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
1834                                 }\r
1835                                 if (pm & 0x8000)\r
1836                                         sprintf (buffer, "MOVEC    %s,A%ld", ea, (pm >> 12) & 7);\r
1837                                 else\r
1838                                         sprintf (buffer, "MOVEC    %s,D%ld", ea, (pm >> 12) & 7);\r
1839                         }\r
1840                         else if (lo == 0x3b)\r
1841                         {\r
1842                                 PARAM_WORD (pm);\r
1843                                 switch (pm & 0xfff)\r
1844                                 {\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
1850                                 }\r
1851                                 if (pm & 0x8000)\r
1852                                         sprintf (buffer, "MOVEC    A%ld,%s", (pm >> 12) & 7, ea);\r
1853                                 else\r
1854                                         sprintf (buffer, "MOVEC    D%ld,%s", (pm >> 12) & 7, ea);\r
1855                         }\r
1856                         else\r
1857                                 sprintf (buffer, "DC.W     $%X", op);\r
1858                         break;\r
1859                 case 0x4e80:\r
1860                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1861                         sprintf (buffer, "JSR      %s", ea);\r
1862                         break;\r
1863                 case 0x4ec0:\r
1864                         ea = MakeEA (lo, p, 4, &count); p += count;\r
1865                         sprintf (buffer, "JMP      %s", ea);\r
1866                         break;\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
1870                         break;\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
1874                         break;\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
1878                         break;\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
1882                         {\r
1883                                 PARAM_WORD (pm);\r
1884                                 if (pm & 0x8000)\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
1886                                 else\r
1887                                         sprintf (buffer, "DB%s     D%d,*+$%lX [%lX]", ccodes[(op >> 8) & 15], rlo, pm - 2, pc + pm + 2);\r
1888                         }\r
1889                         else\r
1890                         {\r
1891                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
1892                                 sprintf (buffer, "S%s.B    %s", ccodes[(op >> 8) & 15], ea);\r
1893                         }\r
1894                         break;\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
1898                         break;\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
1902                         break;\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
1906                         break;\r
1907                 case 0x6000: case 0x6040: case 0x6080: case 0x60c0:\r
1908                         pm = op & 0xff;\r
1909                         if (pm == 0)\r
1910                         {\r
1911                                 PARAM_WORD(pm);\r
1912                                 if (pm & 0x8000)\r
1913                                         sprintf (buffer, "BRA      *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
1914                                 else\r
1915                                         sprintf (buffer, "BRA      *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
1916                         }\r
1917                         else\r
1918                         {\r
1919                                 if (pm & 0x80)\r
1920                                         sprintf (buffer, "BRA.S    *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
1921                                 else\r
1922                                         sprintf (buffer, "BRA.S    *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
1923                         }\r
1924                         break;\r
1925                 case 0x6100: case 0x6140: case 0x6180: case 0x61c0:\r
1926                         pm = op & 0xff;\r
1927                         if (pm == 0)\r
1928                         {\r
1929                                 PARAM_WORD(pm);\r
1930                                 if (pm & 0x8000)\r
1931                                         sprintf (buffer, "BSR      *-$%X [%X]", (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
1932                                 else\r
1933                                         sprintf (buffer, "BSR      *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
1934                         }\r
1935                         else\r
1936                         {\r
1937                                 if (pm & 0x80)\r
1938                                         sprintf (buffer, "BSR.S    *-$%X [%X]", (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
1939                                 else\r
1940                                         sprintf (buffer, "BSR.S    *+$%lX [%lX]", pm + 2, pc + pm + 2);\r
1941                         }\r
1942                         break;\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
1950                         pm = op & 0xff;\r
1951                         if (pm == 0)\r
1952                         {\r
1953                                 PARAM_WORD(pm);\r
1954                                 if (pm & 0x8000)\r
1955                                         sprintf (buffer, "B%s      *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed short)pm) - 2, pc + (signed short)pm + 2);\r
1956                                 else\r
1957                                         sprintf (buffer, "B%s      *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);\r
1958                         }\r
1959                         else\r
1960                         {\r
1961                                 if (pm & 0x80)\r
1962                                         sprintf (buffer, "B%s.S    *-$%X [%X]", ccodes[(op >> 8) & 15], (int)(-(signed char)pm) - 2, pc + (signed char)pm + 2);\r
1963                                 else\r
1964                                         sprintf (buffer, "B%s.S    *+$%lX [%lX]", ccodes[(op >> 8) & 15], pm + 2, pc + pm + 2);\r
1965                         }\r
1966                         break;\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
1975                         pm = op & 0xff;\r
1976                         if (pm & 0x80)\r
1977                                 sprintf (buffer, "MOVEQ    #$-%X,D%d", -(signed char)pm, rhi);\r
1978                         else\r
1979                                 sprintf (buffer, "MOVEQ    #$%lX,D%d", pm, rhi);\r
1980                         break;\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
1984                         break;\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
1988                         break;\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
1992                         break;\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
1996                         break;\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
2000                         break;\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
2004                         break;\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
2008                         break;\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
2012                         break;\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
2016                         break;\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
2020                         break;\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
2024                         break;\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
2028                         break;\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
2031                         {\r
2032                                 if (lo & 0x08)\r
2033                                         sprintf (buffer, "SUBX.B   -(A%d),-(A%d)", rlo, rhi);\r
2034                                 else\r
2035                                         sprintf (buffer, "SUBX.B   D%d,D%d", rlo, rhi);\r
2036                         }\r
2037                         else\r
2038                         {\r
2039                                 ea = MakeEA (lo, p, 1,&count); p += count;\r
2040                                 sprintf (buffer, "SUB.B    D%d,%s", rhi, ea);\r
2041                         }\r
2042                         break;\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
2045                         {\r
2046                                 if (lo & 0x08)\r
2047                                         sprintf (buffer, "SUBX.W   -(A%d),-(A%d)", rlo, rhi);\r
2048                                 else\r
2049                                         sprintf (buffer, "SUBX.W   D%d,D%d", rlo, rhi);\r
2050                         }\r
2051                         else\r
2052                         {\r
2053                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
2054                                 sprintf (buffer, "SUB.W    D%d,%s", rhi, ea);\r
2055                         }\r
2056                         break;\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
2059                         {\r
2060                                 if (lo & 0x08)\r
2061                                         sprintf (buffer, "SUBX.L   -(A%d),-(A%d)", rlo, rhi);\r
2062                                 else\r
2063                                         sprintf (buffer, "SUBX.L   D%d,D%d", rlo, rhi);\r
2064                         }\r
2065                         else\r
2066                         {\r
2067                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
2068                                 sprintf (buffer, "SUB.L    D%d,%s", rhi, ea);\r
2069                         }\r
2070                         break;\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
2074                         break;\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
2078                         break;\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
2082                         break;\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
2086                         break;\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
2090                         break;\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
2094                         else\r
2095                         {\r
2096                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
2097                                 sprintf (buffer, "EOR.B    D%d,%s", rhi, ea);\r
2098                         }\r
2099                         break;\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
2103                         else\r
2104                         {\r
2105                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
2106                                 sprintf (buffer, "EOR.W    D%d,%s", rhi, ea);\r
2107                         }\r
2108                         break;\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
2112                         else\r
2113                         {\r
2114                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
2115                                 sprintf (buffer, "EOR.L    D%d,%s", rhi, ea);\r
2116                         }\r
2117                         break;\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
2121                         break;\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
2125                         break;\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
2129                         break;\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
2133                         break;\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
2137                         break;\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
2140                         {\r
2141                                 if (lo & 0x08)\r
2142                                         sprintf (buffer, "ABCD.B   -(A%d),-(A%d)", rlo, rhi);\r
2143                                 else\r
2144                                         sprintf (buffer, "ABCD.B   D%d,D%d", rlo, rhi);\r
2145                         }\r
2146                         else\r
2147                         {\r
2148                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
2149                                 sprintf (buffer, "AND.B    D%d,%s", rhi, ea);\r
2150                         }\r
2151                         break;\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
2154                         {\r
2155                                 if (lo & 0x08)\r
2156                                         sprintf (buffer, "EXG      A%d,A%d", rhi, rlo);\r
2157                                 else\r
2158                                         sprintf (buffer, "EXG      D%d,D%d", rhi, rlo);\r
2159                         }\r
2160                         else\r
2161                         {\r
2162                                 ea = MakeEA (lo, p, 2,&count); p += count;\r
2163                                 sprintf (buffer, "AND.W    D%d,%s", rhi, ea);\r
2164                         }\r
2165                         break;\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
2169                         else\r
2170                         {\r
2171                                 ea = MakeEA (lo, p, 4, &count); p += count;\r
2172                                 sprintf (buffer, "AND.L    D%d,%s", rhi, ea);\r
2173                         }\r
2174                         break;\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
2178                         break;\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
2182                         break;\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
2186                         break;\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
2190                         break;\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
2194                         break;\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
2197                         {\r
2198                                 if (lo & 0x08)\r
2199                                         sprintf (buffer, "ADDX.B   -(A%d),-(A%d)", rlo, rhi);\r
2200                                 else\r
2201                                         sprintf (buffer, "ADDX.B   D%d,D%d", rlo, rhi);\r
2202                         }\r
2203                         else\r
2204                         {\r
2205                                 ea = MakeEA (lo, p, 1, &count); p += count;\r
2206                                 sprintf (buffer, "ADD.B    D%d,%s", rhi, ea);\r
2207                         }\r
2208                         break;\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
2211                         {\r
2212                                 if (lo & 0x08)\r
2213                                         sprintf (buffer, "ADDX.W   -(A%d),-(A%d)", rlo, rhi);\r
2214                                 else\r
2215                                         sprintf (buffer, "ADDX.W   D%d,D%d", rlo, rhi);\r
2216                         }\r
2217                         else\r
2218                         {\r
2219                                 ea = MakeEA (lo, p, 2, &count); p += count;\r
2220                                 sprintf (buffer, "ADD.W    D%d,%s", rhi, ea);\r
2221                         }\r
2222                         break;\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
2225                         {\r
2226                                 if (lo & 0x08)\r
2227                                         sprintf (buffer, "ADDX.L   -(A%d),-(A%d)", rlo, rhi);\r
2228                                 else\r
2229                                         sprintf (buffer, "ADDX.L   D%d,D%d", rlo, rhi);\r
2230                         }\r
2231                         else\r
2232                         {\r
2233                                 ea = MakeEA (lo, p, 4,&count); p += count;\r
2234                                 sprintf (buffer, "ADD.L    D%d,%s", rhi, ea);\r
2235                         }\r
2236                         break;\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
2240                         break;\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
2243                         {\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
2252                         }\r
2253                         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
2256                         {\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
2265                         }\r
2266                         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
2269                         {\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
2278                         }\r
2279                         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
2284                         {\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
2293                         }\r
2294                         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
2297                         {\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
2306                         }\r
2307                         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
2310                         {\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
2319                         }\r
2320                         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
2323                         {\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
2332                         }\r
2333                         break;\r
2334                 default:\r
2335                         sprintf (buffer, "DC.W     $%X", op);\r
2336                         break;\r
2337         }\r
2338 \r
2339         return p - pBase;\r
2340 }\r
2341 \r
2342 \r
2343 \r
2344 #endif\r