Previous 15994 Revisions Next

r11554 Sunday 15th May, 2011 at 16:04:51 UTC by Curt Coder
Fixed T11 disassembler. (nw)
[src/emu/cpu/t11]t11dasm.c

src/emu/cpu/t11/t11dasm.c
r11553r11554
1818
1919#define PARAM_WORD(v)   ((v) = rombase[pc - pcbase] | (rombase[pc + 1 - pcbase] << 8), pc += 2)
2020
21static unsigned MakeEA (char **ea, int lo, unsigned pc, int width)
21static unsigned MakeEA (char *ea, int lo, unsigned pc, int width)
2222{
23   static char buffer[32];
2423   int reg, pm;
2524
2625   assert (width == 2 || width == 4);
r11553r11554
3029   switch ((lo >> 3) & 7)
3130   {
3231      case 0:
33         sprintf (buffer, "%s", regs[reg]);
32         sprintf (ea, "%s", regs[reg]);
3433         break;
3534      case 1:
36         sprintf (buffer, "(%s)", regs[reg]);
35         sprintf (ea, "(%s)", regs[reg]);
3736         break;
3837      case 2:
3938         if (reg == 7)
4039            {
4140            PARAM_WORD (pm);
42            sprintf (buffer, "#$%0*X", width, pm & ((width == 2) ? 0xff : 0xffff));
41            sprintf (ea, "#$%0*X", width, pm & ((width == 2) ? 0xff : 0xffff));
4342            }
4443         else
4544            {
46                sprintf (buffer, "(%s)+", regs[reg]);
45                sprintf (ea, "(%s)+", regs[reg]);
4746            }
4847            break;
4948      case 3:
5049         if (reg == 7)
5150         {
5251                PARAM_WORD (pm);
53                sprintf (buffer,  "$%04X", pm &= 0xffff);
52                sprintf (ea,  "$%04X", pm &= 0xffff);
5453         }
5554         else
5655         {
57                sprintf (buffer, "@(%s)+", regs[reg]);
56                sprintf (ea, "@(%s)+", regs[reg]);
5857         }
5958            break;
6059      case 4:
61            sprintf (buffer, "-(%s)", regs[reg]);
60            sprintf (ea, "-(%s)", regs[reg]);
6261         break;
6362      case 5:
64         sprintf (buffer, "@-(%s)", regs[reg]);
63         sprintf (ea, "@-(%s)", regs[reg]);
6564         break;
6665      case 6:
6766         PARAM_WORD (pm);
68         sprintf(buffer, "%s$%X(%s)",
67         sprintf(ea, "%s$%X(%s)",
6968            (pm&0x8000)?"-":"",
7069            (pm&0x8000)?-(signed short)pm:pm,
7170            regs[reg]);
7271         break;
7372      case 7:
7473         PARAM_WORD (pm);
75         sprintf(buffer, "@%s$%X(%s)",
74         sprintf(ea, "@%s$%X(%s)",
7675            (pm&0x8000)?"-":"",
7776            (pm&0x8000)?-(signed short)pm:pm,
7877            regs[reg]);
7978         break;
8079   }
8180
82   *ea = buffer;
8381    return pc;
8482}
8583
8684
8785CPU_DISASSEMBLE( t11 )
8886{
89   char *ea1, *ea2;
87   char ea1[32], ea2[32];
9088   unsigned PC = pc;
9189   UINT16 op, lo, hi, addr;
9290    INT16 offset;
r11553r11554
115113         }
116114         break;
117115      case 0x0040:
118         pc = MakeEA (&ea1, lo, pc, 4);
116         pc = MakeEA (ea1, lo, pc, 4);
119117         sprintf (buffer, "JMP   %s", ea1);
120118         break;
121119      case 0x0080:
r11553r11554
157155         }
158156         break;
159157      case 0x00c0:
160         pc = MakeEA (&ea1, lo, pc, 4);
158         pc = MakeEA (ea1, lo, pc, 4);
161159         sprintf (buffer, "SWAB  %s", ea1);
162160         break;
163161      case 0x0100: case 0x0140: case 0x0180: case 0x01c0:
r11553r11554
190188         break;
191189      case 0x0800: case 0x0840: case 0x0880: case 0x08c0:
192190      case 0x0900: case 0x0940: case 0x0980: case 0x09c0:
193         pc = MakeEA (&ea1, lo, pc, 4);
191         pc = MakeEA (ea1, lo, pc, 4);
194192         if ( (hi & 7) == 7 )
195193            sprintf (buffer, "JSR   %s", ea1);
196194         else
r11553r11554
198196         flags = DASMFLAG_STEP_OVER;
199197         break;
200198      case 0x0a00:
201         pc = MakeEA (&ea1, lo, pc, 4);
199         pc = MakeEA (ea1, lo, pc, 4);
202200         sprintf (buffer, "CLR   %s", ea1);
203201         break;
204202      case 0x0a40:
205         pc = MakeEA (&ea1, lo, pc, 4);
203         pc = MakeEA (ea1, lo, pc, 4);
206204         sprintf (buffer, "COM   %s", ea1);
207205         break;
208206      case 0x0a80:
209         pc = MakeEA (&ea1, lo, pc, 4);
207         pc = MakeEA (ea1, lo, pc, 4);
210208         sprintf (buffer, "INC   %s", ea1);
211209         break;
212210      case 0x0ac0:
213         pc = MakeEA (&ea1, lo, pc, 4);
211         pc = MakeEA (ea1, lo, pc, 4);
214212         sprintf (buffer, "DEC   %s", ea1);
215213         break;
216214      case 0x0b00:
217         pc = MakeEA (&ea1, lo, pc, 4);
215         pc = MakeEA (ea1, lo, pc, 4);
218216         sprintf (buffer, "NEG   %s", ea1);
219217         break;
220218      case 0x0b40:
221         pc = MakeEA (&ea1, lo, pc, 4);
219         pc = MakeEA (ea1, lo, pc, 4);
222220         sprintf (buffer, "ADC   %s", ea1);
223221         break;
224222      case 0x0b80:
225         pc = MakeEA (&ea1, lo, pc, 4);
223         pc = MakeEA (ea1, lo, pc, 4);
226224         sprintf (buffer, "SBC   %s", ea1);
227225         break;
228226      case 0x0bc0:
229         pc = MakeEA (&ea1, lo, pc, 4);
227         pc = MakeEA (ea1, lo, pc, 4);
230228         sprintf (buffer, "TST   %s", ea1);
231229         break;
232230      case 0x0c00:
233         pc = MakeEA (&ea1, lo, pc, 4);
231         pc = MakeEA (ea1, lo, pc, 4);
234232         sprintf (buffer, "ROR   %s", ea1);
235233         break;
236234      case 0x0c40:
237         pc = MakeEA (&ea1, lo, pc, 4);
235         pc = MakeEA (ea1, lo, pc, 4);
238236         sprintf (buffer, "ROL   %s", ea1);
239237         break;
240238      case 0x0c80:
241         pc = MakeEA (&ea1, lo, pc, 4);
239         pc = MakeEA (ea1, lo, pc, 4);
242240         sprintf (buffer, "ASR   %s", ea1);
243241         break;
244242      case 0x0cc0:
245         pc = MakeEA (&ea1, lo, pc, 4);
243         pc = MakeEA (ea1, lo, pc, 4);
246244         sprintf (buffer, "ASL   %s", ea1);
247245         break;
248246/*      case 0x0d00:
249247            sprintf (buffer, "MARK  #$%X", lo);
250248            break;*/
251249      case 0x0dc0:
252         pc = MakeEA (&ea1, lo, pc, 4);
250         pc = MakeEA (ea1, lo, pc, 4);
253251         sprintf (buffer, "SXT   %s", ea1);
254252         break;
255253      case 0x1000: case 0x1040: case 0x1080: case 0x10c0: case 0x1100: case 0x1140: case 0x1180: case 0x11c0:
r11553r11554
260258      case 0x1a00: case 0x1a40: case 0x1a80: case 0x1ac0: case 0x1b00: case 0x1b40: case 0x1b80: case 0x1bc0:
261259      case 0x1c00: case 0x1c40: case 0x1c80: case 0x1cc0: case 0x1d00: case 0x1d40: case 0x1d80: case 0x1dc0:
262260      case 0x1e00: case 0x1e40: case 0x1e80: case 0x1ec0: case 0x1f00: case 0x1f40: case 0x1f80: case 0x1fc0:
263         pc = MakeEA (&ea1, hi, pc, 4);
264         pc = MakeEA (&ea2, lo, pc, 4);
261         pc = MakeEA (ea1, hi, pc, 4);
262         pc = MakeEA (ea2, lo, pc, 4);
265263         if (lo == 046)      /* MOV src,-(SP) */
266264            sprintf (buffer, "PUSH  %s", ea1);
267265         else
r11553r11554
278276      case 0x2a00: case 0x2a40: case 0x2a80: case 0x2ac0: case 0x2b00: case 0x2b40: case 0x2b80: case 0x2bc0:
279277      case 0x2c00: case 0x2c40: case 0x2c80: case 0x2cc0: case 0x2d00: case 0x2d40: case 0x2d80: case 0x2dc0:
280278      case 0x2e00: case 0x2e40: case 0x2e80: case 0x2ec0: case 0x2f00: case 0x2f40: case 0x2f80: case 0x2fc0:
281         pc = MakeEA (&ea1, hi, pc, 4);
282         pc = MakeEA (&ea2, lo, pc, 4);
279         pc = MakeEA (ea1, hi, pc, 4);
280         pc = MakeEA (ea2, lo, pc, 4);
283281         sprintf (buffer, "CMP   %s,%s", ea1, ea2);
284282         break;
285283      case 0x3000: case 0x3040: case 0x3080: case 0x30c0: case 0x3100: case 0x3140: case 0x3180: case 0x31c0:
r11553r11554
290288      case 0x3a00: case 0x3a40: case 0x3a80: case 0x3ac0: case 0x3b00: case 0x3b40: case 0x3b80: case 0x3bc0:
291289      case 0x3c00: case 0x3c40: case 0x3c80: case 0x3cc0: case 0x3d00: case 0x3d40: case 0x3d80: case 0x3dc0:
292290      case 0x3e00: case 0x3e40: case 0x3e80: case 0x3ec0: case 0x3f00: case 0x3f40: case 0x3f80: case 0x3fc0:
293         pc = MakeEA (&ea1, hi, pc, 4);
294         pc = MakeEA (&ea2, lo, pc, 4);
291         pc = MakeEA (ea1, hi, pc, 4);
292         pc = MakeEA (ea2, lo, pc, 4);
295293         sprintf (buffer, "BIT   %s,%s", ea1, ea2);
296294         break;
297295      case 0x4000: case 0x4040: case 0x4080: case 0x40c0: case 0x4100: case 0x4140: case 0x4180: case 0x41c0:
r11553r11554
302300      case 0x4a00: case 0x4a40: case 0x4a80: case 0x4ac0: case 0x4b00: case 0x4b40: case 0x4b80: case 0x4bc0:
303301      case 0x4c00: case 0x4c40: case 0x4c80: case 0x4cc0: case 0x4d00: case 0x4d40: case 0x4d80: case 0x4dc0:
304302      case 0x4e00: case 0x4e40: case 0x4e80: case 0x4ec0: case 0x4f00: case 0x4f40: case 0x4f80: case 0x4fc0:
305         pc = MakeEA (&ea1, hi, pc, 4);
306         pc = MakeEA (&ea2, lo, pc, 4);
303         pc = MakeEA (ea1, hi, pc, 4);
304         pc = MakeEA (ea2, lo, pc, 4);
307305         sprintf (buffer, "BIC   %s,%s", ea1, ea2);
308306         break;
309307      case 0x5000: case 0x5040: case 0x5080: case 0x50c0: case 0x5100: case 0x5140: case 0x5180: case 0x51c0:
r11553r11554
314312      case 0x5a00: case 0x5a40: case 0x5a80: case 0x5ac0: case 0x5b00: case 0x5b40: case 0x5b80: case 0x5bc0:
315313      case 0x5c00: case 0x5c40: case 0x5c80: case 0x5cc0: case 0x5d00: case 0x5d40: case 0x5d80: case 0x5dc0:
316314      case 0x5e00: case 0x5e40: case 0x5e80: case 0x5ec0: case 0x5f00: case 0x5f40: case 0x5f80: case 0x5fc0:
317         pc = MakeEA (&ea1, hi, pc, 4);
318         pc = MakeEA (&ea2, lo, pc, 4);
315         pc = MakeEA (ea1, hi, pc, 4);
316         pc = MakeEA (ea2, lo, pc, 4);
319317         sprintf (buffer, "BIS   %s,%s", ea1, ea2);
320318         break;
321319      case 0x6000: case 0x6040: case 0x6080: case 0x60c0: case 0x6100: case 0x6140: case 0x6180: case 0x61c0:
r11553r11554
326324      case 0x6a00: case 0x6a40: case 0x6a80: case 0x6ac0: case 0x6b00: case 0x6b40: case 0x6b80: case 0x6bc0:
327325      case 0x6c00: case 0x6c40: case 0x6c80: case 0x6cc0: case 0x6d00: case 0x6d40: case 0x6d80: case 0x6dc0:
328326      case 0x6e00: case 0x6e40: case 0x6e80: case 0x6ec0: case 0x6f00: case 0x6f40: case 0x6f80: case 0x6fc0:
329         pc = MakeEA (&ea1, hi, pc, 4);
330         pc = MakeEA (&ea2, lo, pc, 4);
327         pc = MakeEA (ea1, hi, pc, 4);
328         pc = MakeEA (ea2, lo, pc, 4);
331329         sprintf (buffer, "ADD   %s,%s", ea1, ea2);
332330         break;
333331
334332      case 0x7800: case 0x7840: case 0x7880: case 0x78c0: case 0x7900: case 0x7940: case 0x7980: case 0x79c0:
335         pc = MakeEA (&ea1, lo, pc, 4);
333         pc = MakeEA (ea1, lo, pc, 4);
336334         sprintf (buffer, "XOR   %s,%s", regs[hi & 7], ea1);
337335         break;
338336
r11553r11554
381379         break;
382380
383381      case 0x8a00:
384         pc = MakeEA (&ea1, lo, pc, 2);
382         pc = MakeEA (ea1, lo, pc, 2);
385383         sprintf (buffer, "CLRB  %s", ea1);
386384         break;
387385      case 0x8a40:
388         pc = MakeEA (&ea1, lo, pc, 2);
386         pc = MakeEA (ea1, lo, pc, 2);
389387         sprintf (buffer, "COMB  %s", ea1);
390388         break;
391389      case 0x8a80:
392         pc = MakeEA (&ea1, lo, pc, 2);
390         pc = MakeEA (ea1, lo, pc, 2);
393391         sprintf (buffer, "INCB  %s", ea1);
394392         break;
395393      case 0x8ac0:
396         pc = MakeEA (&ea1, lo, pc, 2);
394         pc = MakeEA (ea1, lo, pc, 2);
397395         sprintf (buffer, "DECB  %s", ea1);
398396         break;
399397      case 0x8b00:
400         pc = MakeEA (&ea1, lo, pc, 2);
398         pc = MakeEA (ea1, lo, pc, 2);
401399         sprintf (buffer, "NEGB  %s", ea1);
402400         break;
403401      case 0x8b40:
404         pc = MakeEA (&ea1, lo, pc, 2);
402         pc = MakeEA (ea1, lo, pc, 2);
405403         sprintf (buffer, "ADCB  %s", ea1);
406404         break;
407405      case 0x8b80:
408         pc = MakeEA (&ea1, lo, pc, 2);
406         pc = MakeEA (ea1, lo, pc, 2);
409407         sprintf (buffer, "SBCB  %s", ea1);
410408         break;
411409      case 0x8bc0:
412         pc = MakeEA (&ea1, lo, pc, 2);
410         pc = MakeEA (ea1, lo, pc, 2);
413411         sprintf (buffer, "TSTB  %s", ea1);
414412         break;
415413      case 0x8c00:
416         pc = MakeEA (&ea1, lo, pc, 2);
414         pc = MakeEA (ea1, lo, pc, 2);
417415         sprintf (buffer, "RORB  %s", ea1);
418416         break;
419417      case 0x8c40:
420         pc = MakeEA (&ea1, lo, pc, 2);
418         pc = MakeEA (ea1, lo, pc, 2);
421419         sprintf (buffer, "ROLB  %s", ea1);
422420         break;
423421      case 0x8c80:
424         pc = MakeEA (&ea1, lo, pc, 2);
422         pc = MakeEA (ea1, lo, pc, 2);
425423         sprintf (buffer, "ASRB  %s", ea1);
426424         break;
427425      case 0x8cc0:
428         pc = MakeEA (&ea1, lo, pc, 2);
426         pc = MakeEA (ea1, lo, pc, 2);
429427         sprintf (buffer, "ASLB  %s", ea1);
430428         break;
431429      case 0x8d00:
432         pc = MakeEA (&ea1, lo, pc, 2);
430         pc = MakeEA (ea1, lo, pc, 2);
433431         sprintf (buffer, "MTPS  %s", ea1);
434432         break;
435433      case 0x8dc0:
436         pc = MakeEA (&ea1, lo, pc, 2);
434         pc = MakeEA (ea1, lo, pc, 2);
437435         sprintf (buffer, "MFPS  %s", ea1);
438436         break;
439437      case 0x9000: case 0x9040: case 0x9080: case 0x90c0: case 0x9100: case 0x9140: case 0x9180: case 0x91c0:
r11553r11554
444442      case 0x9a00: case 0x9a40: case 0x9a80: case 0x9ac0: case 0x9b00: case 0x9b40: case 0x9b80: case 0x9bc0:
445443      case 0x9c00: case 0x9c40: case 0x9c80: case 0x9cc0: case 0x9d00: case 0x9d40: case 0x9d80: case 0x9dc0:
446444      case 0x9e00: case 0x9e40: case 0x9e80: case 0x9ec0: case 0x9f00: case 0x9f40: case 0x9f80: case 0x9fc0:
447         pc = MakeEA (&ea1, hi, pc, 2);
448         pc = MakeEA (&ea2, lo, pc, 2);
445         pc = MakeEA (ea1, hi, pc, 2);
446         pc = MakeEA (ea2, lo, pc, 2);
449447         sprintf (buffer, "MOVB  %s,%s", ea1, ea2);
450448         break;
451449      case 0xa000: case 0xa040: case 0xa080: case 0xa0c0: case 0xa100: case 0xa140: case 0xa180: case 0xa1c0:
r11553r11554
456454      case 0xaa00: case 0xaa40: case 0xaa80: case 0xaac0: case 0xab00: case 0xab40: case 0xab80: case 0xabc0:
457455      case 0xac00: case 0xac40: case 0xac80: case 0xacc0: case 0xad00: case 0xad40: case 0xad80: case 0xadc0:
458456      case 0xae00: case 0xae40: case 0xae80: case 0xaec0: case 0xaf00: case 0xaf40: case 0xaf80: case 0xafc0:
459         pc = MakeEA (&ea1, hi, pc, 2);
460         pc = MakeEA (&ea2, lo, pc, 2);
457         pc = MakeEA (ea1, hi, pc, 2);
458         pc = MakeEA (ea2, lo, pc, 2);
461459         sprintf (buffer, "CMPB  %s,%s", ea1, ea2);
462460         break;
463461      case 0xb000: case 0xb040: case 0xb080: case 0xb0c0: case 0xb100: case 0xb140: case 0xb180: case 0xb1c0:
r11553r11554
468466      case 0xba00: case 0xba40: case 0xba80: case 0xbac0: case 0xbb00: case 0xbb40: case 0xbb80: case 0xbbc0:
469467      case 0xbc00: case 0xbc40: case 0xbc80: case 0xbcc0: case 0xbd00: case 0xbd40: case 0xbd80: case 0xbdc0:
470468      case 0xbe00: case 0xbe40: case 0xbe80: case 0xbec0: case 0xbf00: case 0xbf40: case 0xbf80: case 0xbfc0:
471         pc = MakeEA (&ea1, hi, pc, 2);
472         pc = MakeEA (&ea2, lo, pc, 2);
469         pc = MakeEA (ea1, hi, pc, 2);
470         pc = MakeEA (ea2, lo, pc, 2);
473471         sprintf (buffer, "BITB  %s,%s", ea1, ea2);
474472         break;
475473      case 0xc000: case 0xc040: case 0xc080: case 0xc0c0: case 0xc100: case 0xc140: case 0xc180: case 0xc1c0:
r11553r11554
480478      case 0xca00: case 0xca40: case 0xca80: case 0xcac0: case 0xcb00: case 0xcb40: case 0xcb80: case 0xcbc0:
481479      case 0xcc00: case 0xcc40: case 0xcc80: case 0xccc0: case 0xcd00: case 0xcd40: case 0xcd80: case 0xcdc0:
482480      case 0xce00: case 0xce40: case 0xce80: case 0xcec0: case 0xcf00: case 0xcf40: case 0xcf80: case 0xcfc0:
483         pc = MakeEA (&ea1, hi, pc, 2);
484         pc = MakeEA (&ea2, lo, pc, 2);
481         pc = MakeEA (ea1, hi, pc, 2);
482         pc = MakeEA (ea2, lo, pc, 2);
485483         sprintf (buffer, "BICB  %s,%s", ea1, ea2);
486484         break;
487485      case 0xd000: case 0xd040: case 0xd080: case 0xd0c0: case 0xd100: case 0xd140: case 0xd180: case 0xd1c0:
r11553r11554
492490      case 0xda00: case 0xda40: case 0xda80: case 0xdac0: case 0xdb00: case 0xdb40: case 0xdb80: case 0xdbc0:
493491      case 0xdc00: case 0xdc40: case 0xdc80: case 0xdcc0: case 0xdd00: case 0xdd40: case 0xdd80: case 0xddc0:
494492      case 0xde00: case 0xde40: case 0xde80: case 0xdec0: case 0xdf00: case 0xdf40: case 0xdf80: case 0xdfc0:
495         pc = MakeEA (&ea1, hi, pc, 2);
496         pc = MakeEA (&ea2, lo, pc, 2);
493         pc = MakeEA (ea1, hi, pc, 2);
494         pc = MakeEA (ea2, lo, pc, 2);
497495         sprintf (buffer, "BISB  %s,%s", ea1, ea2);
498496         break;
499497      case 0xe000: case 0xe040: case 0xe080: case 0xe0c0: case 0xe100: case 0xe140: case 0xe180: case 0xe1c0:
r11553r11554
504502      case 0xea00: case 0xea40: case 0xea80: case 0xeac0: case 0xeb00: case 0xeb40: case 0xeb80: case 0xebc0:
505503      case 0xec00: case 0xec40: case 0xec80: case 0xecc0: case 0xed00: case 0xed40: case 0xed80: case 0xedc0:
506504      case 0xee00: case 0xee40: case 0xee80: case 0xeec0: case 0xef00: case 0xef40: case 0xef80: case 0xefc0:
507         pc = MakeEA (&ea1, hi, pc, 4);
508         pc = MakeEA (&ea2, lo, pc, 4);
505         pc = MakeEA (ea1, hi, pc, 4);
506         pc = MakeEA (ea2, lo, pc, 4);
509507         sprintf (buffer, "SUB   %s,%s", ea1, ea2);
510508         break;
511509

Previous 15994 Revisions Next


© 1998-2018 The MESS Team