1*9a0e4156SSadaf Ebrahimi #include <stdio.h>
2*9a0e4156SSadaf Ebrahimi #include <stdlib.h>
3*9a0e4156SSadaf Ebrahimi
4*9a0e4156SSadaf Ebrahimi #include <capstone/capstone.h>
5*9a0e4156SSadaf Ebrahimi
6*9a0e4156SSadaf Ebrahimi void print_string_hex(char *comment, unsigned char *str, size_t len);
7*9a0e4156SSadaf Ebrahimi
get_am_name(mos65xx_address_mode mode)8*9a0e4156SSadaf Ebrahimi static const char *get_am_name(mos65xx_address_mode mode)
9*9a0e4156SSadaf Ebrahimi {
10*9a0e4156SSadaf Ebrahimi switch(mode) {
11*9a0e4156SSadaf Ebrahimi default:
12*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_NONE:
13*9a0e4156SSadaf Ebrahimi return "No address mode";
14*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_IMP:
15*9a0e4156SSadaf Ebrahimi return "implied addressing (no addressing mode)";
16*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ACC:
17*9a0e4156SSadaf Ebrahimi return "accumulator addressing";
18*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ABS:
19*9a0e4156SSadaf Ebrahimi return "absolute addressing";
20*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ZP:
21*9a0e4156SSadaf Ebrahimi return "zeropage addressing";
22*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_IMM:
23*9a0e4156SSadaf Ebrahimi return "8 Bit immediate value";
24*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ABSX:
25*9a0e4156SSadaf Ebrahimi return "indexed absolute addressing by the X index register";
26*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ABSY:
27*9a0e4156SSadaf Ebrahimi return "indexed absolute addressing by the Y index register";
28*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_INDX:
29*9a0e4156SSadaf Ebrahimi return "indexed indirect addressing by the X index register";
30*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_INDY:
31*9a0e4156SSadaf Ebrahimi return "indirect indexed addressing by the Y index register";
32*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ZPX:
33*9a0e4156SSadaf Ebrahimi return "indexed zeropage addressing by the X index register";
34*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_ZPY:
35*9a0e4156SSadaf Ebrahimi return "indexed zeropage addressing by the Y index register";
36*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_REL:
37*9a0e4156SSadaf Ebrahimi return "relative addressing used by branches";
38*9a0e4156SSadaf Ebrahimi case MOS65XX_AM_IND:
39*9a0e4156SSadaf Ebrahimi return "absolute indirect addressing";
40*9a0e4156SSadaf Ebrahimi }
41*9a0e4156SSadaf Ebrahimi }
42*9a0e4156SSadaf Ebrahimi
43*9a0e4156SSadaf Ebrahimi
print_insn_detail_mos65xx(csh handle,cs_insn * ins)44*9a0e4156SSadaf Ebrahimi void print_insn_detail_mos65xx(csh handle, cs_insn *ins)
45*9a0e4156SSadaf Ebrahimi {
46*9a0e4156SSadaf Ebrahimi int i;
47*9a0e4156SSadaf Ebrahimi cs_mos65xx *mos65xx;
48*9a0e4156SSadaf Ebrahimi
49*9a0e4156SSadaf Ebrahimi // detail can be NULL on "data" instruction if SKIPDATA option is turned ON
50*9a0e4156SSadaf Ebrahimi if (ins->detail == NULL)
51*9a0e4156SSadaf Ebrahimi return;
52*9a0e4156SSadaf Ebrahimi
53*9a0e4156SSadaf Ebrahimi mos65xx = &(ins->detail->mos65xx);
54*9a0e4156SSadaf Ebrahimi printf("\taddress mode: %s\n", get_am_name(mos65xx->am));
55*9a0e4156SSadaf Ebrahimi printf("\tmodifies flags: %s\n", mos65xx->modifies_flags ? "true": "false");
56*9a0e4156SSadaf Ebrahimi
57*9a0e4156SSadaf Ebrahimi if (mos65xx->op_count)
58*9a0e4156SSadaf Ebrahimi printf("\top_count: %u\n", mos65xx->op_count);
59*9a0e4156SSadaf Ebrahimi
60*9a0e4156SSadaf Ebrahimi for (i = 0; i < mos65xx->op_count; i++) {
61*9a0e4156SSadaf Ebrahimi cs_mos65xx_op *op = &(mos65xx->operands[i]);
62*9a0e4156SSadaf Ebrahimi switch((int)op->type) {
63*9a0e4156SSadaf Ebrahimi default:
64*9a0e4156SSadaf Ebrahimi break;
65*9a0e4156SSadaf Ebrahimi case MOS65XX_OP_REG:
66*9a0e4156SSadaf Ebrahimi printf("\t\toperands[%u].type: REG = %s\n", i, cs_reg_name(handle, op->reg));
67*9a0e4156SSadaf Ebrahimi break;
68*9a0e4156SSadaf Ebrahimi case MOS65XX_OP_IMM:
69*9a0e4156SSadaf Ebrahimi printf("\t\toperands[%u].type: IMM = 0x%x\n", i, op->imm);
70*9a0e4156SSadaf Ebrahimi break;
71*9a0e4156SSadaf Ebrahimi case MOS65XX_OP_MEM:
72*9a0e4156SSadaf Ebrahimi printf("\t\toperands[%u].type: MEM = 0x%x\n", i, op->mem);
73*9a0e4156SSadaf Ebrahimi break;
74*9a0e4156SSadaf Ebrahimi }
75*9a0e4156SSadaf Ebrahimi }
76*9a0e4156SSadaf Ebrahimi }
77