Go to the documentation of this file.
4 #ifdef CAPSTONE_HAS_M680X
10 #include "../../MCInst.h"
11 #include "../../SStream.h"
12 #include "../../MCRegisterInfo.h"
13 #include "../../utils.h"
20 "<invalid>",
"a",
"b",
"e",
"f",
"0",
"d",
"w",
"cc",
"dp",
"md",
21 "hx",
"h",
"x",
"y",
"s",
"u",
"v",
"q",
"pc",
"tmp2",
"tmp3",
25 "invld",
"aba",
"abx",
"aby",
"adc",
"adca",
"adcb",
"adcd",
"adcr",
26 "add",
"adda",
"addb",
"addd",
"adde",
"addf",
"addr",
"addw",
27 "aim",
"ais",
"aix",
"and",
"anda",
"andb",
"andcc",
"andd",
"andr",
28 "asl",
"asla",
"aslb",
"asld",
29 "asr",
"asra",
"asrb",
"asrd",
"asrx",
31 "bcc",
"bclr",
"bcs",
"beor",
"beq",
"bge",
"bgnd",
"bgt",
"bhcc",
33 "biand",
"bieor",
"bih",
"bil",
34 "bior",
"bit",
"bita",
"bitb",
"bitd",
"bitmd",
"ble",
"bls",
"blt",
37 "bne",
"bor",
"bpl",
"brclr",
"brset",
"bra",
"brn",
"bset",
"bsr",
39 "call",
"cba",
"cbeq",
"cbeqa",
"cbeqx",
"clc",
"cli",
40 "clr",
"clra",
"clrb",
"clrd",
"clre",
"clrf",
"clrh",
"clrw",
"clrx",
42 "cmpa",
"cmpb",
"cmpd",
"cmpe",
"cmpf",
"cmpr",
"cmps",
"cmpu",
"cmpw",
44 "com",
"coma",
"comb",
"comd",
"come",
"comf",
"comw",
"comx",
"cpd",
45 "cphx",
"cps",
"cpx",
"cpy",
46 "cwai",
"daa",
"dbeq",
"dbne",
"dbnz",
"dbnza",
"dbnzx",
47 "dec",
"deca",
"decb",
"decd",
"dece",
"decf",
"decw",
48 "decx",
"des",
"dex",
"dey",
49 "div",
"divd",
"divq",
"ediv",
"edivs",
"eim",
"emacs",
"emaxd",
50 "emaxm",
"emind",
"eminm",
"emul",
"emuls",
51 "eor",
"eora",
"eorb",
"eord",
"eorr",
"etbl",
52 "exg",
"fdiv",
"ibeq",
"ibne",
"idiv",
"idivs",
"illgl",
53 "inc",
"inca",
"incb",
"incd",
"ince",
"incf",
"incw",
"incx",
56 "lbcc",
"lbcs",
"lbeq",
"lbge",
"lbgt",
"lbhi",
"lble",
"lbls",
"lblt",
57 "lbmi",
"lbne",
"lbpl",
"lbra",
"lbrn",
"lbsr",
"lbvc",
"lbvs",
58 "lda",
"ldaa",
"ldab",
"ldb",
"ldbt",
"ldd",
"lde",
"ldf",
"ldhx",
60 "ldq",
"lds",
"ldu",
"ldw",
"ldx",
"ldy",
61 "leas",
"leau",
"leax",
"leay",
62 "lsl",
"lsla",
"lslb",
"lsld",
"lslx",
63 "lsr",
"lsra",
"lsrb",
"lsrd",
"lsrw",
"lsrx",
64 "maxa",
"maxm",
"mem",
"mina",
"minm",
"mov",
"movb",
"movw",
"mul",
66 "neg",
"nega",
"negb",
"negd",
"negx",
67 "nop",
"nsa",
"oim",
"ora",
"oraa",
"orab",
"orb",
"orcc",
"ord",
"orr",
68 "psha",
"pshb",
"pshc",
"pshd",
"pshh",
"pshs",
"pshsw",
"pshu",
69 "pshuw",
"pshx",
"pshy",
70 "pula",
"pulb",
"pulc",
"puld",
"pulh",
"puls",
"pulsw",
"pulu",
71 "puluw",
"pulx",
"puly",
"rev",
"revw",
72 "rol",
"rola",
"rolb",
"rold",
"rolw",
"rolx",
73 "ror",
"rora",
"rorb",
"rord",
"rorw",
"rorx",
74 "rsp",
"rtc",
"rti",
"rts",
"sba",
"sbc",
"sbca",
"sbcb",
"sbcd",
76 "sec",
"sei",
"sev",
"sex",
"sexw",
"slp",
"sta",
"staa",
"stab",
"stb",
77 "stbt",
"std",
"ste",
"stf",
"stop",
"sthx",
78 "stq",
"sts",
"stu",
"stw",
"stx",
"sty",
79 "sub",
"suba",
"subb",
"subd",
"sube",
"subf",
"subr",
"subw",
80 "swi",
"swi2",
"swi3",
81 "sync",
"tab",
"tap",
"tax",
"tba",
"tbeq",
"tbl",
"tbne",
"test",
84 "tst",
"tsta",
"tstb",
"tstd",
"tste",
"tstf",
"tstw",
"tstx",
85 "tsx",
"tsy",
"txa",
"txs",
"tys",
"wai",
"wait",
"wav",
"wavr",
103 #ifndef CAPSTONE_DIET
111 #ifndef CAPSTONE_DIET
134 static const char s_inc_dec[][3] = {
"--",
"-",
"",
"+",
"++" };
136 if (!
op->idx.inc_dec)
141 const char *prePostfix =
"";
144 prePostfix = (
op->idx.inc_dec < 0) ?
"-" :
"+";
145 else if (
op->idx.inc_dec >= -2 && (
op->idx.inc_dec <= 2)) {
146 prePostfix = (
char *)s_inc_dec[
op->idx.inc_dec + 2];
158 printRegName(MI->
csh, O,
op->reg);
168 get_unsigned(
op->imm,
op->size));
179 printRegName(MI->
csh, O,
op->idx.offset_reg);
180 else if (
op->idx.offset_bits > 0) {
186 else if (
op->idx.inc_dec != 0 &&
193 printIncDec(
false, O, info,
op);
195 printRegName(MI->
csh, O,
op->idx.base_reg);
198 (
op->idx.offset_bits > 0))
201 printIncDec(
true, O, info,
op);
217 if (
op->ext.indirect)
220 if (
op->ext.address < 256) {
238 bool indexed =
false;
255 return (indexed && (
count >= 1)) ?
";" :
",";
263 int suppress_operands = 0;
264 const char *delimiter = getDelimiter(info, m680x);
279 printInstructionName(MI->
csh, O, info->
insn);
289 if (
i >= suppress_operands) {
290 printOperand(MI, O, info, &m680x->
operands[
i]);
300 #ifndef CAPSTONE_DIET
313 #ifndef CAPSTONE_DIET
327 #ifndef CAPSTONE_DIET
336 #ifndef CAPSTONE_DIET
339 fprintf(
stderr,
"Internal error: Size mismatch in enum "
340 "m680x_reg and s_reg_names\n");
346 fprintf(
stderr,
"Internal error: Size mismatch in enum "
347 "m680x_insn and s_instruction_names\n");
353 fprintf(
stderr,
"Internal error: Size mismatch in enum "
354 "m680x_group_type and s_group_names\n");
@ M680X_GRP_PRIV
= CS_GRP_PRIVILEDGE; not used
const char * M680X_reg_name(csh handle, unsigned int reg)
@ M680X_OP_CONSTANT
Used e.g. for a bit index or page number.
cs_opt_value imm_unsigned
@ M680X_OP_EXTENDED
= Extended addressing operand.
static const char * s_instruction_names[]
cs_err M680X_instprinter_init(cs_struct *ud)
@ M680X_OP_DIRECT
= Direct addressing operand.
@ M680X_OP_IMMEDIATE
= Immediate operand.
@ M680X_GRP_JUMP
= CS_GRP_INVALID
#define M680X_FIRST_OP_IN_MNEM
uint8_t op_count
number of operands for the instruction or 0
@ M680X_GRP_IRET
= CS_GRP_IRET
@ M680X_GRP_BRAREL
= CS_GRP_BRANCH_RELATIVE
const char * id2name(const name_map *map, int max, const unsigned int id)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
#define M680X_IDX_POST_INC_DEC
int32_t imm
immediate value for IMM operand
@ M680X_REG_PC
M6800/1/2/3/9, M6301/9.
static const char * s_reg_names[]
@ M680X_GRP_INT
= CS_GRP_INT
uint8_t flags
See: M680X instruction flags.
The M680X instruction and it's operands.
@ M680X_GRP_CALL
= CS_GRP_CALL
#define M680X_IDX_INDIRECT
const char * M680X_group_name(csh handle, unsigned int id)
#define M680X_IDX_NO_COMMA
cs_m680x_op operands[M680X_OPERAND_COUNT]
operands for this insn.
#define M680X_SECOND_OP_IN_MNEM
const char * M680X_insn_name(csh handle, unsigned int id)
@ M680X_OP_RELATIVE
= Relative addressing operand.
@ M680X_OP_INDEXED
= Indexed addressing operand.
void SStream_concat(SStream *ss, const char *fmt,...)
void M680X_printInst(MCInst *MI, struct SStream *O, void *Info)
@ M680X_OP_REGISTER
= Register operand.
@ M680X_GRP_RET
= CS_GRP_RET
@ M680X_REG_ENDING
<– mark the end of the list of registers
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:17