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
;
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
, "%02Xh", ops
[k
++]);
607 ops
[k
] = readb(a
); a
++;
608 ops
[k
+1] = readb(a
); a
++;
609 j
+= snprintf(mnemonic
+ j
, 255-j
,"%04Xh",
610 ((ops
[k
+1] << 8) | ops
[k
]));
615 ops
[k
] = readb(a
); a
++;
616 j
+= snprintf(mnemonic
+ j
, 255-j
,"%+d", (n8
)(ops
[k
++]));
623 mnemonic
[j
++] = pattern
[i
++];
627 switch (operand_count
[ops
[0]]) {
629 snprintf(ops_str
,sizeof(ops_str
),"%02X ", ops
[0]);
632 snprintf(ops_str
,sizeof(ops_str
),"%02X %02X ", ops
[0], ops
[1]);
635 snprintf(ops_str
,sizeof(ops_str
),"%02X %02X %02X", ops
[0], ops
[1], ops
[2]);
638 rb
->lcd_putsxyf(0,0,"%04X %s %-16.16s", opaddr
, ops_str
, mnemonic
);