5 #include "rockmacros.h"
15 static char *mnemonic_table
[256] =
275 static char *cb_mnemonic_table
[256] =
535 static byte operand_count
[256] =
537 1, 3, 1, 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 1, 2, 1,
538 1, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
539 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
540 2, 3, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1,
541 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
542 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
543 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
544 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
545 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
546 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
547 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
548 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
549 1, 1, 3, 3, 3, 1, 2, 1, 1, 1, 3, 2, 3, 3, 2, 1,
550 1, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 3, 1, 2, 1,
551 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1,
552 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 1, 1, 2, 1
556 /* replace with a real interactive debugger eventually... */
560 rcvar_t debug_exports
[] =
562 RCV_BOOL("trace", &debug_trace
),
566 void debug_disassemble(addr a
, int c
)
572 static char mnemonic
[256];
573 static char *pattern
;
574 char meow
[500],buf
[300];
575 if(!debug_trace
) return;
581 code
= ops
[k
++] = readb(a
); a
++;
584 pattern
= mnemonic_table
[code
];
586 pattern
= "***INVALID***";
590 code
= ops
[k
++] = readb(a
); a
++;
591 pattern
= cb_mnemonic_table
[code
];
596 if (pattern
[i
] == '%')
598 switch (pattern
[++i
])
602 ops
[k
] = readb(a
); a
++;
603 j
+= snprintf(mnemonic
+ j
,255-j
,
608 ops
[k
] = readb(a
); a
++;
609 ops
[k
+1] = readb(a
); a
++;
610 j
+= snprintf(mnemonic
+ j
, 255-j
,"%04Xh",
611 ((ops
[k
+1] << 8) | ops
[k
]));
616 ops
[k
] = readb(a
); a
++;
617 j
+= snprintf(mnemonic
+ j
, 255-j
,"%+d",
625 mnemonic
[j
++] = pattern
[i
++];
629 snprintf(buf
,299,"%04X ", opaddr
);
631 switch (operand_count
[ops
[0]]) {
633 snprintf(buf
,299,"%02X ", ops
[0]);
637 snprintf(buf
,299,"%02X %02X ", ops
[0], ops
[1]);
641 snprintf(buf
,299,"%02X %02X %02X ", ops
[0], ops
[1], ops
[2]);
645 snprintf(buf
,"%-16.16s", mnemonic
);
647 rb
->lcd_putsxy(0,0,meow
);