Extend M680X support to HCS12X (#2898)

Signed-off-by: Naren Sirigere <[email protected]>
This commit is contained in:
Naren Sirigere
2026-05-02 09:04:08 +00:00
committed by GitHub
parent d4e5fa0162
commit 808aee0d22
16 changed files with 993 additions and 391 deletions
-1
View File
@@ -58,7 +58,6 @@ By default all are enabled.
- `CAPSTONE_TRICORE_SUPPORT`: Support TriCore.
- `CAPSTONE_X86_SUPPORT`: Support X86.
- `CAPSTONE_TMS320C64X_SUPPORT`: Support TMS320C64X.
- `CAPSTONE_M680X_SUPPORT`: Support M680X.
- `CAPSTONE_EVM_SUPPORT`: Support EVM.
- `CAPSTONE_WASM_SUPPORT`: Support Web Assembly.
- `CAPSTONE_BPF_SUPPORT`: Support BPF.
+25
View File
@@ -148,6 +148,7 @@ typedef struct insn_props {
#include "m6809.inc"
#include "hd6309.inc"
#include "rs08.inc"
#include "hcs12x.inc"
#include "insn_props.inc"
@@ -2020,6 +2021,11 @@ static const uint8_t g_rs08_reg_byte_size[23] = {
0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 1, 1, 0, 2, 0, 0, 0, 2, 2, 0, 0
};
static const uint8_t g_hcs12x_reg_byte_size[23] = {
// A B E F 0 D W CC DP MD HX H X Y S U V Q PC SPC T2 T3
0, 1, 1, 0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 0, 2, 2
};
// Table to check for a valid register nibble on the M6809 CPU
// used for TFR and EXG instruction.
static const bool m6809_tfr_reg_valid[16] = {
@@ -2157,6 +2163,16 @@ static const cpu_tables g_cpu_tables[] = {
&g_rs08_reg_byte_size[0],
NULL,
{ M680X_INS_INVLD, M680X_INS_INVLD } },
{ // M680X_CPU_TYPE_HCS12X
&g_cpu12_inst_page1_table[0],
{ NULL, NULL },
{ 0, 0 },
{ 0x18, 0x00, 0x00 },
{ &g_hcs12x_inst_page2_table[0], NULL, NULL },
{ ARR_SIZE(g_hcs12x_inst_page2_table), 0, 0 },
&g_hcs12x_reg_byte_size[0],
NULL,
{ M680X_INS_INVLD, M680X_INS_INVLD } },
};
static bool m680x_setup_internals(m680x_info *info, e_cpu_type cpu_type,
@@ -2221,6 +2237,9 @@ bool M680X_getInstruction(csh ud, const uint8_t *code, size_t code_len,
else if (handle->mode & CS_MODE_M680X_RS08)
cpu_type = M680X_CPU_TYPE_RS08;
else if (handle->mode & CS_MODE_M680X_HCS12X)
cpu_type = M680X_CPU_TYPE_HCS12X;
if (cpu_type != M680X_CPU_TYPE_INVALID &&
m680x_setup_internals(info, cpu_type, (uint16_t)address, code,
(uint16_t)code_len))
@@ -2291,6 +2310,12 @@ cs_err M680X_disassembler_init(cs_struct *ud)
return CS_ERR_MODE;
}
if (M680X_REG_ENDING != ARR_SIZE(g_hcs12x_reg_byte_size)) {
CS_ASSERT(M680X_REG_ENDING == ARR_SIZE(g_hcs12x_reg_byte_size));
return CS_ERR_MODE;
}
if (M680X_INS_ENDING != ARR_SIZE(g_insn_props)) {
CS_ASSERT(M680X_INS_ENDING == ARR_SIZE(g_insn_props));
+1
View File
@@ -21,6 +21,7 @@ typedef enum e_cpu_type {
// used on M68HC12/HCS12
M680X_CPU_TYPE_HCS08, // M680X Freescale HCS08 mode
M680X_CPU_TYPE_RS08, // M680X Freescale RSS08 mode
M680X_CPU_TYPE_HCS12X, // M680X Freescale HCS12X mode
M680X_CPU_TYPE_ENDING,
} e_cpu_type;
+49 -42
View File
@@ -28,49 +28,56 @@ static const char s_reg_names[][10] = {
static const char s_instruction_names[][6] = {
"invld", "aba", "abx", "aby", "adc", "adca", "adcb", "adcd",
"adcr", "add", "adda", "addb", "addd", "adde", "addf", "addr",
"addw", "aim", "ais", "aix", "and", "anda", "andb", "andcc",
"andd", "andr", "asl", "asla", "aslb", "asld", "asr", "asra",
"asrb", "asrd", "asrx", "band", "bcc", "bclr", "bcs", "beor",
"beq", "bge", "bgnd", "bgt", "bhcc", "bhcs", "bhi", "biand",
"bieor", "bih", "bil", "bior", "bit", "bita", "bitb", "bitd",
"bitmd", "ble", "bls", "blt", "bmc", "bmi", "bms", "bne",
"bor", "bpl", "brclr", "brset", "bra", "brn", "bset", "bsr",
"bvc", "bvs", "call", "cba", "cbeq", "cbeqa", "cbeqx", "clc",
"cli", "clr", "clra", "clrb", "clrd", "clre", "clrf", "clrh",
"clrw", "clrx", "clv", "cmp", "cmpa", "cmpb", "cmpd", "cmpe",
"addw", "addx", "addy", "aded", "adex", "adey", "aim", "ais",
"aix", "and", "anda", "andb", "andx", "andy", "andcc", "andd",
"andr", "asl", "asla", "aslb", "asld", "aslw", "aslx", "asly",
"asr", "asra", "asrb", "asrd", "asrw", "asrx", "asry", "band",
"bcc", "bclr", "bcs", "beor", "beq", "bge", "bgnd", "bgt",
"bhcc", "bhcs", "bhi", "biand", "bieor", "bih", "bil", "bior",
"bit", "bita", "bitb", "bitx", "bity", "bitd", "bitmd", "ble",
"bls", "blt", "bmc", "bmi", "bms", "bne", "bor", "bpl",
"brclr", "brset", "bra", "brn", "bset", "bsr", "btas", "bvc",
"bvs", "call", "cba", "cbeq", "cbeqa", "cbeqx", "clc", "cli",
"clr", "clra", "clrb", "clrd", "clre", "clrf", "clrh", "clrw",
"clrx", "clry", "clv", "cmp", "cmpa", "cmpb", "cmpd", "cmpe",
"cmpf", "cmpr", "cmps", "cmpu", "cmpw", "cmpx", "cmpy", "com",
"coma", "comb", "comd", "come", "comf", "comw", "comx", "cpd",
"cphx", "cps", "cpx", "cpy", "cwai", "daa", "dbeq", "dbne",
"dbnz", "dbnza", "dbnzx", "dec", "deca", "decb", "decd", "dece",
"decf", "decw", "decx", "des", "dex", "dey", "div", "divd",
"divq", "ediv", "edivs", "eim", "emacs", "emaxd", "emaxm", "emind",
"eminm", "emul", "emuls", "eor", "eora", "eorb", "eord", "eorr",
"etbl", "exg", "fdiv", "ibeq", "ibne", "idiv", "idivs", "illgl",
"inc", "inca", "incb", "incd", "ince", "incf", "incw", "incx",
"ins", "inx", "iny", "jmp", "jsr", "lbcc", "lbcs", "lbeq",
"lbge", "lbgt", "lbhi", "lble", "lbls", "lblt", "lbmi", "lbne",
"lbpl", "lbra", "lbrn", "lbsr", "lbvc", "lbvs", "lda", "ldaa",
"ldab", "ldb", "ldbt", "ldd", "lde", "ldf", "ldhx", "ldmd",
"ldq", "lds", "ldu", "ldw", "ldx", "ldy", "leas", "leau",
"leax", "leay", "lsl", "lsla", "lslb", "lsld", "lslx", "lsr",
"lsra", "lsrb", "lsrd", "lsrw", "lsrx", "maxa", "maxm", "mem",
"mina", "minm", "mov", "movb", "movw", "mul", "muld", "neg",
"nega", "negb", "negd", "negx", "nop", "nsa", "oim", "ora",
"oraa", "orab", "orb", "orcc", "ord", "orr", "psha", "pshb",
"pshc", "pshd", "pshh", "pshs", "pshsw", "pshu", "pshuw", "pshx",
"pshy", "pula", "pulb", "pulc", "puld", "pulh", "puls", "pulsw",
"pulu", "puluw", "pulx", "puly", "rev", "revw", "rol", "rola",
"rolb", "rold", "rolw", "rolx", "ror", "rora", "rorb", "rord",
"rorw", "rorx", "rsp", "rtc", "rti", "rts", "sba", "sbc",
"sbca", "sbcb", "sbcd", "sbcr", "sec", "sei", "sev", "sex",
"sexw", "sha", "sla", "slp", "sta", "staa", "stab", "stb",
"stbt", "std", "ste", "stf", "stop", "sthx", "stq", "sts",
"stu", "stw", "stx", "sty", "sub", "suba", "subb", "subd",
"sube", "subf", "subr", "subw", "swi", "swi2", "swi3", "sync",
"tab", "tap", "tax", "tba", "tbeq", "tbl", "tbne", "test",
"tfm", "tfr", "tim", "tpa", "tst", "tsta", "tstb", "tstd",
"tste", "tstf", "tstw", "tstx", "tsx", "tsy", "txa", "txs",
"tys", "wai", "wait", "wav", "wavr", "xgdx", "xgdy",
"coma", "comb", "comd", "come", "comf", "comw", "comx", "comy",
"cpd", "cped", "cpes", "cpex", "cpey", "cphx", "cps", "cpx",
"cpy", "cwai", "daa", "dbeq", "dbne", "dbnz", "dbnza", "dbnzx",
"dec", "deca", "decb", "decd", "dece", "decf", "decw", "decx",
"decy", "des", "dex", "dey", "div", "divd", "divq", "ediv",
"edivs", "eim", "emacs", "emaxd", "emaxm", "emind", "eminm", "emul",
"emuls", "eor", "eora", "eorb", "eord", "eorr", "eorx", "eory",
"etbl", "exg", "fdiv", "gldaa", "gldab", "gldd", "glds", "gldx",
"gldy", "gstaa", "gstab", "gstd", "gsts", "gstx", "gsty", "ibeq",
"ibne", "idiv", "idivs", "illgl", "inc", "inca", "incb", "incd",
"ince", "incf", "incw", "incx", "incy", "ins", "inx", "iny",
"jmp", "jsr", "lbcc", "lbcs", "lbeq", "lbge", "lbgt", "lbhi",
"lble", "lbls", "lblt", "lbmi", "lbne", "lbpl", "lbra", "lbrn",
"lbsr", "lbvc", "lbvs", "lda", "ldaa", "ldab", "ldb", "ldbt",
"ldd", "lde", "ldf", "ldhx", "ldmd", "ldq", "lds", "ldu",
"ldw", "ldx", "ldy", "leas", "leau", "leax", "leay", "lsl",
"lsla", "lslb", "lsld", "lslx", "lsr", "lsra", "lsrb", "lsrd",
"lsrw", "lsrx", "lsry", "maxa", "maxm", "mem", "mina", "minm",
"mov", "movb", "movw", "mul", "muld", "neg", "nega", "negb",
"negd", "negw", "negx", "negy", "nop", "nsa", "oim", "ora",
"oraa", "orab", "orb", "orcc", "ord", "orr", "orx", "ory",
"psha", "pshb", "pshc", "pshcw", "pshd", "pshh", "pshs", "pshsw",
"pshu", "pshuw", "pshx", "pshy", "pula", "pulb", "pulc", "pulcw",
"puld", "pulh", "puls", "pulsw", "pulu", "puluw", "pulx", "puly",
"rev", "revw", "rol", "rola", "rolb", "rold", "rolw", "rolx",
"roly", "ror", "rora", "rorb", "rord", "rorw", "rorx", "rory",
"rsp", "rtc", "rti", "rts", "sba", "sbc", "sbca", "sbcb",
"sbcd", "sbcr", "sbed", "sbex", "sbey", "sec", "sei", "sev",
"sex", "sexw", "sha", "sla", "slp", "sta", "staa", "stab",
"stb", "stbt", "std", "ste", "stf", "stop", "sthx", "stq",
"sts", "stu", "stw", "stx", "sty", "sub", "suba", "subb",
"subd", "sube", "subf", "subr", "subw", "subx", "suby", "swi",
"swi2", "swi3", "sync", "sys", "tab", "tap", "tax", "tba",
"tbeq", "tbl", "tbne", "test", "tfm", "tfr", "tim", "tpa",
"trap", "tst", "tsta", "tstb", "tstd", "tste", "tstf", "tstw",
"tstx", "tsty", "tsx", "tsy", "txa", "txs", "tys", "wai",
"wait", "wav", "wavr", "xgdx", "xgdy",
};
static const name_map s_group_names[] = {
+4 -2
View File
@@ -31,7 +31,8 @@ cs_err M680X_global_init(cs_struct *ud)
~(CS_MODE_M680X_6800 | CS_MODE_M680X_6801 | CS_MODE_M680X_6805 |
CS_MODE_M680X_6808 | CS_MODE_M680X_6809 | CS_MODE_M680X_6811 |
CS_MODE_M680X_6301 | CS_MODE_M680X_6309 | CS_MODE_M680X_CPU12 |
CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08)) {
CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08 |
CS_MODE_M680X_HCS12X)) {
// At least one mode is not supported by M680X
return CS_ERR_MODE;
}
@@ -40,7 +41,8 @@ cs_err M680X_global_init(cs_struct *ud)
(CS_MODE_M680X_6800 | CS_MODE_M680X_6801 | CS_MODE_M680X_6805 |
CS_MODE_M680X_6808 | CS_MODE_M680X_6809 | CS_MODE_M680X_6811 |
CS_MODE_M680X_6301 | CS_MODE_M680X_6309 | CS_MODE_M680X_CPU12 |
CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08))) {
CS_MODE_M680X_HCS08 | CS_MODE_M680X_RS08 |
CS_MODE_M680X_HCS12X))) {
// At least the cpu type has to be selected. No default.
return CS_ERR_MODE;
}
+271
View File
@@ -0,0 +1,271 @@
// Page 2 instructions for HCS12X
static const inst_pageX g_hcs12x_inst_page2_table[] = {
{ 0x00, M680X_INS_MOVW, imm16i12x_hid, inh_hid },
{ 0x01, M680X_INS_MOVW, exti12x_hid, inh_hid },
{ 0x02, M680X_INS_MOVW, idx12_hid, idx12_hid },
{ 0x03, M680X_INS_MOVW, imm16_hid, ext_hid },
{ 0x04, M680X_INS_MOVW, ext_hid, ext_hid },
{ 0x05, M680X_INS_MOVW, idx12_hid, ext_hid },
{ 0x06, M680X_INS_ABA, inh_hid, inh_hid },
{ 0x07, M680X_INS_DAA, inh_hid, inh_hid },
{ 0x08, M680X_INS_MOVB, imm8i12x_hid, inh_hid },
{ 0x09, M680X_INS_MOVB, exti12x_hid, inh_hid },
{ 0x0A, M680X_INS_MOVB, idx12_hid, idx12_hid },
{ 0x0B, M680X_INS_MOVB, imm16_hid, ext_hid },
{ 0x0C, M680X_INS_MOVB, ext_hid, ext_hid },
{ 0x0D, M680X_INS_MOVB, idx12_hid, ext_hid },
{ 0x0E, M680X_INS_TAB, inh_hid, inh_hid },
{ 0x0F, M680X_INS_TBA, inh_hid, inh_hid },
{ 0x10, M680X_INS_IDIV, inh_hid, inh_hid },
{ 0x11, M680X_INS_FDIV, inh_hid, inh_hid },
{ 0x12, M680X_INS_EMACS, ext_hid, inh_hid },
{ 0x13, M680X_INS_EMULS, inh_hid, inh_hid },
{ 0x14, M680X_INS_EDIVS, inh_hid, inh_hid },
{ 0x15, M680X_INS_IDIVS, inh_hid, inh_hid },
{ 0x16, M680X_INS_SBA, inh_hid, inh_hid },
{ 0x17, M680X_INS_CBA, inh_hid, inh_hid },
{ 0x18, M680X_INS_MAXA, idx12_hid, inh_hid },
{ 0x19, M680X_INS_MINA, idx12_hid, inh_hid },
{ 0x1A, M680X_INS_EMAXD, idx12_hid, inh_hid },
{ 0x1B, M680X_INS_EMIND, idx12_hid, inh_hid },
{ 0x1C, M680X_INS_MAXM, idx12_hid, inh_hid },
{ 0x1D, M680X_INS_MINM, idx12_hid, inh_hid },
{ 0x1E, M680X_INS_EMAXM, idx12_hid, inh_hid },
{ 0x1F, M680X_INS_EMINM, idx12_hid, inh_hid },
{ 0x20, M680X_INS_LBRA, rel16_hid, inh_hid },
{ 0x21, M680X_INS_LBRN, rel16_hid, inh_hid },
{ 0x22, M680X_INS_LBHI, rel16_hid, inh_hid },
{ 0x23, M680X_INS_LBLS, rel16_hid, inh_hid },
{ 0x24, M680X_INS_LBCC, rel16_hid, inh_hid },
{ 0x25, M680X_INS_LBCS, rel16_hid, inh_hid },
{ 0x26, M680X_INS_LBNE, rel16_hid, inh_hid },
{ 0x27, M680X_INS_LBEQ, rel16_hid, inh_hid },
{ 0x28, M680X_INS_LBVC, rel16_hid, inh_hid },
{ 0x29, M680X_INS_LBVS, rel16_hid, inh_hid },
{ 0x2A, M680X_INS_LBPL, rel16_hid, inh_hid },
{ 0x2B, M680X_INS_LBMI, rel16_hid, inh_hid },
{ 0x2C, M680X_INS_LBGE, rel16_hid, inh_hid },
{ 0x2D, M680X_INS_LBLT, rel16_hid, inh_hid },
{ 0x2E, M680X_INS_LBGT, rel16_hid, inh_hid },
{ 0x2F, M680X_INS_LBLE, rel16_hid, inh_hid },
{ 0x30, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x31, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x32, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x33, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x34, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x35, M680X_INS_BTAS, dir_hid, inh_hid },
{ 0x36, M680X_INS_BTAS, ext_hid, inh_hid },
{ 0x37, M680X_INS_BTAS, idx12_hid, inh_hid },
{ 0x38, M680X_INS_PULCW, inh_hid, inh_hid },
{ 0x39, M680X_INS_PSHCW, inh_hid, inh_hid },
{ 0x3A, M680X_INS_REV, inh_hid, inh_hid },
{ 0x3B, M680X_INS_REVW, inh_hid, inh_hid },
{ 0x3C, M680X_INS_WAV, inh_hid, inh_hid },
{ 0x3D, M680X_INS_TBL, idx12s_hid, inh_hid },
{ 0x3E, M680X_INS_STOP, inh_hid, inh_hid },
{ 0x3F, M680X_INS_ETBL, idx12s_hid, inh_hid },
{ 0x40, M680X_INS_NEGX, inh_hid, inh_hid },
{ 0x41, M680X_INS_COMX, inh_hid, inh_hid },
{ 0x42, M680X_INS_INCX, inh_hid, inh_hid },
{ 0x43, M680X_INS_DECX, inh_hid, inh_hid },
{ 0x44, M680X_INS_LSRX, inh_hid, inh_hid },
{ 0x45, M680X_INS_ROLX, inh_hid, inh_hid },
{ 0x46, M680X_INS_RORX, inh_hid, inh_hid },
{ 0x47, M680X_INS_ASRX, inh_hid, inh_hid },
{ 0x48, M680X_INS_ASLX, inh_hid, inh_hid },
{ 0x49, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4A, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4B, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4C, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4D, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4E, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x4F, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x50, M680X_INS_NEGY, inh_hid, inh_hid },
{ 0x51, M680X_INS_COMY, inh_hid, inh_hid },
{ 0x52, M680X_INS_INCY, inh_hid, inh_hid },
{ 0x53, M680X_INS_DECY, inh_hid, inh_hid },
{ 0x55, M680X_INS_ROLY, inh_hid, inh_hid },
{ 0x56, M680X_INS_RORY, inh_hid, inh_hid },
{ 0x57, M680X_INS_ASRY, inh_hid, inh_hid },
{ 0x58, M680X_INS_ASLY, inh_hid, inh_hid },
{ 0x59, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x5A, M680X_INS_GSTAA, dir_hid, inh_hid },
{ 0x5B, M680X_INS_GSTAB, dir_hid, inh_hid },
{ 0x5C, M680X_INS_GSTD, dir_hid, inh_hid },
{ 0x5C, M680X_INS_GSTY, dir_hid, inh_hid },
{ 0x5E, M680X_INS_GSTX, dir_hid, inh_hid },
{ 0x5F, M680X_INS_GSTS, dir_hid, inh_hid },
{ 0x60, M680X_INS_NEGW, idx12_hid, inh_hid },
{ 0x61, M680X_INS_COMW, idx12_hid, inh_hid },
{ 0x62, M680X_INS_INCW, idx12_hid, inh_hid },
{ 0x63, M680X_INS_DECW, idx12_hid, inh_hid },
{ 0x64, M680X_INS_LSRW, idx12_hid, inh_hid },
{ 0x65, M680X_INS_ROLW, idx12_hid, inh_hid },
{ 0x66, M680X_INS_RORW, idx12_hid, inh_hid },
{ 0x67, M680X_INS_ASRW, idx12_hid, inh_hid },
{ 0x68, M680X_INS_ASLW, idx12_hid, inh_hid },
{ 0x69, M680X_INS_CLRW, idx12_hid, inh_hid },
{ 0x6A, M680X_INS_GSTAA, idx12_hid, inh_hid },
{ 0x6B, M680X_INS_GSTAB, idx12_hid, inh_hid },
{ 0x6C, M680X_INS_GSTD, idx12_hid, inh_hid },
{ 0x6D, M680X_INS_GSTY, idx12_hid, inh_hid },
{ 0x6E, M680X_INS_GSTX, idx12_hid, inh_hid },
{ 0x6F, M680X_INS_GSTS, idx12_hid, inh_hid },
{ 0x70, M680X_INS_NEGW, ext_hid, inh_hid },
{ 0x71, M680X_INS_COMW, ext_hid, inh_hid },
{ 0x72, M680X_INS_INCW, ext_hid, inh_hid },
{ 0x73, M680X_INS_DECW, ext_hid, inh_hid },
{ 0x75, M680X_INS_ROLW, ext_hid, inh_hid },
{ 0x76, M680X_INS_RORW, ext_hid, inh_hid },
{ 0x77, M680X_INS_ASRW, ext_hid, inh_hid },
{ 0x78, M680X_INS_ASLW, ext_hid, inh_hid },
{ 0x79, M680X_INS_CLRW, ext_hid, inh_hid },
{ 0x7A, M680X_INS_GSTAA, ext_hid, inh_hid },
{ 0x7B, M680X_INS_GSTAB, ext_hid, inh_hid },
{ 0x7C, M680X_INS_GSTD, ext_hid, inh_hid },
{ 0x7D, M680X_INS_GSTY, idx12_hid, inh_hid },
{ 0x7E, M680X_INS_GSTX, ext_hid, inh_hid },
{ 0x7F, M680X_INS_GSTS, ext_hid, inh_hid },
{ 0x80, M680X_INS_SUBX, imm16_hid, inh_hid },
{ 0x81, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x82, M680X_INS_SBEX, imm16_hid, inh_hid },
{ 0x83, M680X_INS_SBED, imm16_hid, inh_hid },
{ 0x84, M680X_INS_ANDX, imm8_hid, inh_hid },
{ 0x85, M680X_INS_BITX, imm8_hid, inh_hid },
{ 0x86, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x87, M680X_INS_CLRX, inh_hid, inh_hid },
{ 0x88, M680X_INS_EORX, imm8_hid, inh_hid },
{ 0x89, M680X_INS_ADEX, imm8_hid, inh_hid },
{ 0x8A, M680X_INS_ORX, imm16_hid, inh_hid },
{ 0x8B, M680X_INS_ADDX, imm8_hid, inh_hid },
{ 0x8C, M680X_INS_CPED, imm8_hid, inh_hid },
{ 0x8D, M680X_INS_CPEY, imm8_hid, inh_hid },
{ 0x8E, M680X_INS_CPEX, imm8_hid, inh_hid },
{ 0x8F, M680X_INS_CPES, imm8_hid, inh_hid },
{ 0x90, M680X_INS_SUBX, dir_hid, inh_hid },
{ 0x91, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0x92, M680X_INS_SBEX, dir_hid, inh_hid },
{ 0x93, M680X_INS_SBED, dir_hid, inh_hid },
{ 0x94, M680X_INS_ANDX, dir_hid, inh_hid },
{ 0x95, M680X_INS_BITX, dir_hid, inh_hid },
{ 0x96, M680X_INS_GLDAA, dir_hid, inh_hid },
{ 0x97, M680X_INS_TSTX, inh_hid, inh_hid },
{ 0x98, M680X_INS_EORX, dir_hid, inh_hid },
{ 0x99, M680X_INS_ADEX, dir_hid, inh_hid },
{ 0x9A, M680X_INS_ORX, dir_hid, inh_hid },
{ 0x9B, M680X_INS_ADDX, dir_hid, inh_hid },
{ 0x9C, M680X_INS_CPED, dir_hid, inh_hid },
{ 0x9D, M680X_INS_CPEY, dir_hid, inh_hid },
{ 0x9F, M680X_INS_CPES, dir_hid, inh_hid },
{ 0xA0, M680X_INS_SUBX, idx12_hid, inh_hid },
{ 0xA1, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xA2, M680X_INS_SBEX, idx12_hid, inh_hid },
{ 0xA3, M680X_INS_SBED, idx12_hid, inh_hid },
{ 0xA4, M680X_INS_ANDX, idx12_hid, inh_hid },
{ 0xA5, M680X_INS_BITX, idx12_hid, inh_hid },
{ 0xA6, M680X_INS_GLDAA, idx12_hid, inh_hid },
{ 0xA7, M680X_INS_SYS, inh_hid, inh_hid },
{ 0xA8, M680X_INS_EORX, idx12_hid, inh_hid },
{ 0xA9, M680X_INS_ADEX, idx12_hid, inh_hid },
{ 0xAA, M680X_INS_ORX, idx12_hid, inh_hid },
{ 0xAB, M680X_INS_ADDX, idx12_hid, inh_hid },
{ 0xAC, M680X_INS_CPED, idx12_hid, inh_hid },
{ 0xAD, M680X_INS_CPEY, idx12_hid, inh_hid },
{ 0xAE, M680X_INS_CPEX, idx12_hid, inh_hid },
{ 0xAF, M680X_INS_CPES, idx12_hid, inh_hid },
{ 0xB0, M680X_INS_SUBX, ext_hid, inh_hid },
{ 0xB1, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xB2, M680X_INS_SBEX, ext_hid, inh_hid },
{ 0xB3, M680X_INS_SBED, ext_hid, inh_hid },
{ 0xB4, M680X_INS_ANDX, ext_hid, inh_hid },
{ 0xB5, M680X_INS_BITX, ext_hid, inh_hid },
{ 0xB6, M680X_INS_GLDAA, ext_hid, inh_hid },
{ 0xB7, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xB8, M680X_INS_EORX, ext_hid, inh_hid },
{ 0xB9, M680X_INS_ADEX, ext_hid, inh_hid },
{ 0xBA, M680X_INS_ORX, ext_hid, inh_hid },
{ 0xBB, M680X_INS_ADDX, ext_hid, inh_hid },
{ 0xBC, M680X_INS_CPED, ext_hid, inh_hid },
{ 0xBD, M680X_INS_CPEY, ext_hid, inh_hid },
{ 0xBE, M680X_INS_CPEX, ext_hid, inh_hid },
{ 0xBF, M680X_INS_CPES, ext_hid, inh_hid },
{ 0xC0, M680X_INS_SUBY, imm16_hid, inh_hid },
{ 0xC1, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xC2, M680X_INS_SBEY, ext_hid, inh_hid },
{ 0xC3, M680X_INS_ADED, imm8_hid, inh_hid },
{ 0xC4, M680X_INS_ANDY, imm8_hid, inh_hid },
{ 0xC5, M680X_INS_BITY, imm8_hid, inh_hid },
{ 0xC6, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xC7, M680X_INS_CLRY, inh_hid, inh_hid },
{ 0xC8, M680X_INS_EORY, imm8_hid, inh_hid },
{ 0xC9, M680X_INS_ADEY, imm8_hid, inh_hid },
{ 0xCA, M680X_INS_ORY, imm16_hid, inh_hid },
{ 0xCB, M680X_INS_ADDY, imm8_hid, inh_hid },
{ 0xCC, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xCD, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xCE, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xCF, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xD0, M680X_INS_SUBY, dir_hid, inh_hid },
{ 0xD1, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xD2, M680X_INS_SBEY, inh_hid, inh_hid },
{ 0xD3, M680X_INS_ADED, dir_hid, inh_hid },
{ 0xD4, M680X_INS_ANDY, dir_hid, inh_hid },
{ 0xD5, M680X_INS_BITY, dir_hid, inh_hid },
{ 0xD6, M680X_INS_GLDAB, dir_hid, inh_hid },
{ 0xD7, M680X_INS_TSTY, inh_hid, inh_hid },
{ 0xD8, M680X_INS_EORY, dir_hid, inh_hid },
{ 0xD9, M680X_INS_ADEY, dir_hid, inh_hid },
{ 0xDA, M680X_INS_ORY, dir_hid, inh_hid },
{ 0xDB, M680X_INS_ADDY, dir_hid, inh_hid },
{ 0xDC, M680X_INS_GLDD, dir_hid, inh_hid },
{ 0xDD, M680X_INS_GLDY, dir_hid, inh_hid },
{ 0xDE, M680X_INS_GLDX, dir_hid, inh_hid },
{ 0xDF, M680X_INS_GLDS, dir_hid, inh_hid },
{ 0xE0, M680X_INS_SUBY, idx12_hid, inh_hid },
{ 0xE1, M680X_INS_TRAP, inh_hid, inh_hid },
{ 0xE2, M680X_INS_SBEY, inh_hid, inh_hid },
{ 0xE3, M680X_INS_ADED, idx12_hid, inh_hid },
{ 0xE4, M680X_INS_ANDY, idx12_hid, inh_hid },
{ 0xE5, M680X_INS_BITY, idx12_hid, inh_hid },
{ 0xE6, M680X_INS_GLDAB, idx12_hid, inh_hid },
{ 0xE7, M680X_INS_TSTW, idx12_hid, inh_hid },
{ 0xE8, M680X_INS_EORY, idx12_hid, inh_hid },
{ 0xE9, M680X_INS_ADEY, idx12_hid, inh_hid },
{ 0xEA, M680X_INS_ORY, idx12_hid, inh_hid },
{ 0xEB, M680X_INS_ADDY, idx12_hid, inh_hid },
{ 0xEC, M680X_INS_GLDD, idx12_hid, inh_hid },
{ 0xED, M680X_INS_GLDY, idx12_hid, inh_hid },
{ 0xEE, M680X_INS_GLDX, idx12_hid, inh_hid },
{ 0xEF, M680X_INS_GLDS, idx12_hid, inh_hid },
{ 0xF0, M680X_INS_SUBY, ext_hid, inh_hid },
{ 0xF1, M680X_INS_TRAP, ext_hid, inh_hid },
{ 0xF2, M680X_INS_SBEY, ext_hid, inh_hid },
{ 0xF3, M680X_INS_ADED, ext_hid, inh_hid },
{ 0xF4, M680X_INS_ANDY, ext_hid, inh_hid },
{ 0xF5, M680X_INS_BITY, ext_hid, inh_hid },
{ 0xF6, M680X_INS_GLDAB, ext_hid, inh_hid },
{ 0xF7, M680X_INS_TSTW, ext_hid, inh_hid },
{ 0xF8, M680X_INS_EORY, ext_hid, inh_hid },
{ 0xF9, M680X_INS_ADEY, ext_hid, inh_hid },
{ 0xFA, M680X_INS_ORY, ext_hid, inh_hid },
{ 0xFB, M680X_INS_ADDY, ext_hid, inh_hid },
{ 0xFC, M680X_INS_GLDD, ext_hid, inh_hid },
{ 0xFD, M680X_INS_GLDY, ext_hid, inh_hid },
{ 0xFE, M680X_INS_GLDX, ext_hid, inh_hid },
{ 0xFF, M680X_INS_GLDS, ext_hid, inh_hid },
};
+54 -1
View File
@@ -21,12 +21,19 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_F, NOR, true, false }, // ADDF
{ NOG, rmmm, NOR, NOR, true, false }, // ADDR
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // ADDW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // ADDX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ADDY
{ NOG, mmmm, M680X_REG_A, M680X_REG_B, true, false }, // ADED
{ NOG, mmmm, M680X_REG_A, M680X_REG_X, true, false }, // ADEX
{ NOG, mmmm, M680X_REG_A, M680X_REG_Y, true, false }, // ADEY
{ NOG, rmmm, NOR, NOR, true, false }, // AIM
{ NOG, mrrr, M680X_REG_S, NOR, false, false }, // AIS
{ NOG, mrrr, M680X_REG_HX, NOR, false, false }, // AIX
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // AND
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ANDA
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ANDB
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // ANDX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ANDY
{ NOG, mrrr, M680X_REG_CC, NOR, true, false }, // ANDCC
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ANDD
{ NOG, rmmm, NOR, NOR, true, false }, // ANDR
@@ -34,11 +41,16 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ASLA
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ASLB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ASLD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // ASLW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // ASLX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ASLY
{ NOG, mrrr, NOR, NOR, true, false }, // ASR
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ASRA
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ASRB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ASRD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // ASRW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // ASRX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ASRY
{ NOG, mrrr, NOR, NOR, false, false }, // BAND
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BCC
{ NOG, mrrr, NOR, NOR, true, false }, // BCLR
@@ -61,6 +73,8 @@ static const insn_props g_insn_props[] = {
{ NOG, rrrr, M680X_REG_B, NOR, true, false }, // BITB
{ NOG, rrrr, M680X_REG_D, NOR, true, false }, // BITD
{ NOG, rrrr, M680X_REG_MD, NOR, true, false }, // BITMD
{ NOG, rrrr, M680X_REG_X, NOR, true, false }, // BITX
{ NOG, rrrr, M680X_REG_Y, NOR, true, false }, // BITY
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLE
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLS
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BLT
@@ -76,6 +90,7 @@ static const insn_props g_insn_props[] = {
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BRN never branches
{ NOG, mrrr, NOR, NOR, true, false }, // BSET
{ M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // BSR
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, true }, // BTAS
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BVC
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BVS
{ M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // CALL
@@ -94,6 +109,7 @@ static const insn_props g_insn_props[] = {
{ NOG, wrrr, M680X_REG_H, NOR, true, false }, // CLRH
{ NOG, wrrr, M680X_REG_W, NOR, true, false }, // CLRW
{ NOG, wrrr, M680X_REG_X, NOR, true, false }, // CLRX
{ NOG, wrrr, M680X_REG_Y, NOR, true, false }, // CLRY
{ NOG, uuuu, NOR, NOR, true, false }, // CLV
{ NOG, rrrr, M680X_REG_A, NOR, true, false }, // CMP
{ NOG, rrrr, M680X_REG_A, NOR, true, false }, // CMPA
@@ -115,7 +131,12 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_F, NOR, true, false }, // COMF
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // COMW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // COMX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // COMY
{ NOG, rrrr, M680X_REG_D, NOR, true, false }, // CPD
{ NOG, rrrr, M680X_REG_D, NOR, true, false }, // CPED
{ NOG, rrrr, M680X_REG_S, NOR, true, false }, // CPES
{ NOG, rrrr, M680X_REG_X, NOR, true, false }, // CPEX
{ NOG, rrrr, M680X_REG_Y, NOR, true, false }, // CPEY
{ NOG, rrrr, M680X_REG_HX, NOR, true, false }, // CPHX
{ NOG, rrrr, M680X_REG_S, NOR, true, false }, // CPS
{ NOG, rrrr, M680X_REG_X, NOR, true, false }, // CPX
@@ -135,6 +156,7 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_F, NOR, true, false }, // DECF
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // DECW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // DECX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // DECY
{ NOG, mrrr, M680X_REG_S, NOR, false, false }, // DES
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // DEX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // DEY
@@ -156,9 +178,23 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // EORB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // EORD
{ NOG, rmmm, NOR, NOR, true, false }, // EORR
{ NOG, mmmm, M680X_REG_X, NOR, true, false }, // EORX
{ NOG, mmmm, M680X_REG_Y, NOR, true, false }, // EORY
{ NOG, rmmm, NOR, NOR, true, true }, // ETBL
{ NOG, mmmm, NOR, NOR, false, false }, // EXG
{ NOG, mmmm, NOR, NOR, true, true }, // FDIV
{ NOG, mmmm, M680X_REG_A, NOR, true, true }, // GLDAA
{ NOG, mmmm, M680X_REG_B, NOR, true, true }, // GLDAB
{ NOG, mmmm, M680X_REG_D, NOR, true, true }, // GLDD
{ NOG, mmmm, M680X_REG_S, NOR, true, true }, // GLDS
{ NOG, mmmm, M680X_REG_X, NOR, true, true }, // GLDX
{ NOG, mmmm, M680X_REG_Y, NOR, true, true }, // GLDY
{ NOG, rrrr, M680X_REG_A, NOR, true, true }, // GSTAA
{ NOG, rrrr, M680X_REG_B, NOR, true, true }, // GSTAB
{ NOG, rrrr, M680X_REG_D, NOR, true, true }, // GSTD
{ NOG, rrrr, M680X_REG_S, NOR, true, true }, // GSTS
{ NOG, rrrr, M680X_REG_X, NOR, true, true }, // GSTX
{ NOG, rrrr, M680X_REG_Y, NOR, true, true }, // GSTY
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // IBEQ
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // IBNE
{ NOG, mmmm, NOR, NOR, true, true }, // IDIV
@@ -172,6 +208,7 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_F, NOR, true, false }, // INCF
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // INCW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // INCX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // INCY
{ NOG, mrrr, M680X_REG_S, NOR, false, false }, // INS
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // INX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // INY
@@ -225,6 +262,7 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // LSRD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // LSRW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // LSRX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // LSRY
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // MAXA
{ NOG, mrrr, NOR, NOR, true, true }, // MAXM
{ NOG, mmrr, NOR, NOR, true, true }, // MEM
@@ -239,7 +277,9 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // NEGA
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // NEGB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // NEGD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // NEGW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // NEGX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // NEGY
{ NOG, uuuu, NOR, NOR, false, false }, // NOP
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // NSA
{ NOG, rmmm, NOR, NOR, true, false }, // OIM
@@ -250,9 +290,12 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_CC, NOR, true, false }, // ORCC
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ORD
{ NOG, rmmm, NOR, NOR, true, false }, // ORR
{ NOG, rmmm, NOR, NOR, true, false }, // ORX
{ NOG, rmmm, NOR, NOR, true, false }, // ORY
{ NOG, rmmm, M680X_REG_A, NOR, false, true }, // PSHA
{ NOG, rmmm, M680X_REG_B, NOR, false, true }, // PSHB
{ NOG, rmmm, M680X_REG_CC, NOR, false, true }, // PSHC
{ NOG, rmmm, M680X_REG_CC, NOR, false, true }, // PSHCW
{ NOG, rmmm, M680X_REG_D, NOR, false, true }, // PSHD
{ NOG, rmmm, M680X_REG_H, NOR, false, true }, // PSHH
{ NOG, mrrr, M680X_REG_S, NOR, false, false }, // PSHS
@@ -264,6 +307,7 @@ static const insn_props g_insn_props[] = {
{ NOG, wmmm, M680X_REG_A, NOR, false, true }, // PULA
{ NOG, wmmm, M680X_REG_B, NOR, false, true }, // PULB
{ NOG, wmmm, M680X_REG_CC, NOR, false, true }, // PULC
{ NOG, wmmm, M680X_REG_CC, NOR, false, true }, // PULCW
{ NOG, wmmm, M680X_REG_D, NOR, false, true }, // PULD
{ NOG, wmmm, M680X_REG_H, NOR, false, true }, // PULH
{ NOG, mwww, M680X_REG_S, NOR, false, false }, // PULS
@@ -280,12 +324,14 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ROLD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // ROLW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // ROLX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // ROLY
{ NOG, mrrr, NOR, NOR, true, false }, // ROR
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // RORA
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // RORB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // RORD
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // RORW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // RORX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // RORY
{ NOG, wrrr, M680X_REG_S, NOR, false, false }, // RSP
{ M680X_GRP_RET, mwww, NOR, NOR, false, true }, // RTC
{ M680X_GRP_IRET, mwww, NOR, NOR, false, true }, // RTI
@@ -296,6 +342,9 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // SBCB
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // SBCD
{ NOG, rmmm, NOR, NOR, true, false }, // SBCR
{ NOG, mmmm, M680X_REG_D, NOR, true, false }, // SBED
{ NOG, mmmm, M680X_REG_X, NOR, true, false }, // SBEX
{ NOG, mmmm, M680X_REG_Y, NOR, true, false }, // SBEY
{ NOG, uuuu, NOR, NOR, true, false }, // SEC
{ NOG, uuuu, NOR, NOR, true, false }, // SEI
{ NOG, uuuu, NOR, NOR, true, false }, // SEV
@@ -328,10 +377,13 @@ static const insn_props g_insn_props[] = {
{ NOG, mrrr, M680X_REG_F, NOR, true, false }, // SUBF
{ NOG, rmmm, NOR, NOR, true, false }, // SUBR
{ NOG, mrrr, M680X_REG_W, NOR, true, false }, // SUBW
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // SUBX
{ NOG, mrrr, M680X_REG_Y, NOR, true, false }, // SUBY
{ M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI
{ M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI2
{ M680X_GRP_INT, mmrr, NOR, NOR, true, true }, // SWI3
{ NOG, uuuu, NOR, NOR, false, false }, // SYNC
{ NOG, muuu, M680X_REG_PC, NOR, false, false }, // SYS
{ NOG, rwww, M680X_REG_A, M680X_REG_B, true, false }, // TAB
{ NOG, rwww, M680X_REG_A, M680X_REG_CC, false, false }, // TAP
{ NOG, rwww, M680X_REG_A, M680X_REG_X, false, false }, // TAX
@@ -344,6 +396,7 @@ static const insn_props g_insn_props[] = {
{ NOG, rwww, NOR, NOR, false, false }, // TFR
{ NOG, rrrr, NOR, NOR, true, false }, // TIM
{ NOG, rwww, M680X_REG_CC, M680X_REG_A, false, false }, // TPA
{ NOG, uuuu, NOR, NOR, false, false }, // TRAP
{ NOG, rrrr, NOR, NOR, true, false }, // TST
{ NOG, rrrr, M680X_REG_A, NOR, true, false }, // TSTA
{ NOG, rrrr, M680X_REG_B, NOR, true, false }, // TSTB
@@ -352,6 +405,7 @@ static const insn_props g_insn_props[] = {
{ NOG, rrrr, M680X_REG_F, NOR, true, false }, // TSTF
{ NOG, rrrr, M680X_REG_W, NOR, true, false }, // TSTW
{ NOG, rrrr, M680X_REG_X, NOR, true, false }, // TSTX
{ NOG, rrrr, M680X_REG_Y, NOR, true, false }, // TSTY
{ NOG, rwww, M680X_REG_S, M680X_REG_HX, false, false }, // TSX
{ NOG, rwww, M680X_REG_S, M680X_REG_Y, false, false }, // TSY
{ NOG, rwww, M680X_REG_X, M680X_REG_A, false, false }, // TXA
@@ -366,4 +420,3 @@ static const insn_props g_insn_props[] = {
};
#undef NOR
#undef NOG
+2
View File
@@ -99,6 +99,7 @@ __all__ = [
"CS_MODE_M680X_CPU12",
"CS_MODE_M680X_HCS08",
"CS_MODE_M680X_RS08",
"CS_MODE_M680X_HCS12X",
"CS_MODE_BPF_CLASSIC",
"CS_MODE_BPF_EXTENDED",
"CS_MODE_RISCV32",
@@ -393,6 +394,7 @@ CS_MODE_M680X_6811 = 1 << 8 # M680X M68HC11 mode
CS_MODE_M680X_CPU12 = 1 << 9 # M680X CPU12 mode
CS_MODE_M680X_HCS08 = 1 << 10 # M680X HCS08 mode
CS_MODE_M680X_RS08 = 1 << 11 # M680X RS08 mode
CS_MODE_M680X_HCS12X = 1 << 12 # M680X HCS12X mode
CS_MODE_BPF_CLASSIC = 0 # Classic BPF mode (default)
CS_MODE_BPF_EXTENDED = 1 << 0 # Extended BPF mode
CS_MODE_RISCV32 = 1 << 0 # RISCV32 mode
+397 -343
View File
@@ -73,346 +73,400 @@ M680X_INS_ADDE = 13
M680X_INS_ADDF = 14
M680X_INS_ADDR = 15
M680X_INS_ADDW = 16
M680X_INS_AIM = 17
M680X_INS_AIS = 18
M680X_INS_AIX = 19
M680X_INS_AND = 20
M680X_INS_ANDA = 21
M680X_INS_ANDB = 22
M680X_INS_ANDCC = 23
M680X_INS_ANDD = 24
M680X_INS_ANDR = 25
M680X_INS_ASL = 26
M680X_INS_ASLA = 27
M680X_INS_ASLB = 28
M680X_INS_ASLD = 29
M680X_INS_ASR = 30
M680X_INS_ASRA = 31
M680X_INS_ASRB = 32
M680X_INS_ASRD = 33
M680X_INS_ASRX = 34
M680X_INS_BAND = 35
M680X_INS_BCC = 36
M680X_INS_BCLR = 37
M680X_INS_BCS = 38
M680X_INS_BEOR = 39
M680X_INS_BEQ = 40
M680X_INS_BGE = 41
M680X_INS_BGND = 42
M680X_INS_BGT = 43
M680X_INS_BHCC = 44
M680X_INS_BHCS = 45
M680X_INS_BHI = 46
M680X_INS_BIAND = 47
M680X_INS_BIEOR = 48
M680X_INS_BIH = 49
M680X_INS_BIL = 50
M680X_INS_BIOR = 51
M680X_INS_BIT = 52
M680X_INS_BITA = 53
M680X_INS_BITB = 54
M680X_INS_BITD = 55
M680X_INS_BITMD = 56
M680X_INS_BLE = 57
M680X_INS_BLS = 58
M680X_INS_BLT = 59
M680X_INS_BMC = 60
M680X_INS_BMI = 61
M680X_INS_BMS = 62
M680X_INS_BNE = 63
M680X_INS_BOR = 64
M680X_INS_BPL = 65
M680X_INS_BRCLR = 66
M680X_INS_BRSET = 67
M680X_INS_BRA = 68
M680X_INS_BRN = 69
M680X_INS_BSET = 70
M680X_INS_BSR = 71
M680X_INS_BVC = 72
M680X_INS_BVS = 73
M680X_INS_CALL = 74
M680X_INS_CBA = 75
M680X_INS_CBEQ = 76
M680X_INS_CBEQA = 77
M680X_INS_CBEQX = 78
M680X_INS_CLC = 79
M680X_INS_CLI = 80
M680X_INS_CLR = 81
M680X_INS_CLRA = 82
M680X_INS_CLRB = 83
M680X_INS_CLRD = 84
M680X_INS_CLRE = 85
M680X_INS_CLRF = 86
M680X_INS_CLRH = 87
M680X_INS_CLRW = 88
M680X_INS_CLRX = 89
M680X_INS_CLV = 90
M680X_INS_CMP = 91
M680X_INS_CMPA = 92
M680X_INS_CMPB = 93
M680X_INS_CMPD = 94
M680X_INS_CMPE = 95
M680X_INS_CMPF = 96
M680X_INS_CMPR = 97
M680X_INS_CMPS = 98
M680X_INS_CMPU = 99
M680X_INS_CMPW = 100
M680X_INS_CMPX = 101
M680X_INS_CMPY = 102
M680X_INS_COM = 103
M680X_INS_COMA = 104
M680X_INS_COMB = 105
M680X_INS_COMD = 106
M680X_INS_COME = 107
M680X_INS_COMF = 108
M680X_INS_COMW = 109
M680X_INS_COMX = 110
M680X_INS_CPD = 111
M680X_INS_CPHX = 112
M680X_INS_CPS = 113
M680X_INS_CPX = 114
M680X_INS_CPY = 115
M680X_INS_CWAI = 116
M680X_INS_DAA = 117
M680X_INS_DBEQ = 118
M680X_INS_DBNE = 119
M680X_INS_DBNZ = 120
M680X_INS_DBNZA = 121
M680X_INS_DBNZX = 122
M680X_INS_DEC = 123
M680X_INS_DECA = 124
M680X_INS_DECB = 125
M680X_INS_DECD = 126
M680X_INS_DECE = 127
M680X_INS_DECF = 128
M680X_INS_DECW = 129
M680X_INS_DECX = 130
M680X_INS_DES = 131
M680X_INS_DEX = 132
M680X_INS_DEY = 133
M680X_INS_DIV = 134
M680X_INS_DIVD = 135
M680X_INS_DIVQ = 136
M680X_INS_EDIV = 137
M680X_INS_EDIVS = 138
M680X_INS_EIM = 139
M680X_INS_EMACS = 140
M680X_INS_EMAXD = 141
M680X_INS_EMAXM = 142
M680X_INS_EMIND = 143
M680X_INS_EMINM = 144
M680X_INS_EMUL = 145
M680X_INS_EMULS = 146
M680X_INS_EOR = 147
M680X_INS_EORA = 148
M680X_INS_EORB = 149
M680X_INS_EORD = 150
M680X_INS_EORR = 151
M680X_INS_ETBL = 152
M680X_INS_EXG = 153
M680X_INS_FDIV = 154
M680X_INS_IBEQ = 155
M680X_INS_IBNE = 156
M680X_INS_IDIV = 157
M680X_INS_IDIVS = 158
M680X_INS_ILLGL = 159
M680X_INS_INC = 160
M680X_INS_INCA = 161
M680X_INS_INCB = 162
M680X_INS_INCD = 163
M680X_INS_INCE = 164
M680X_INS_INCF = 165
M680X_INS_INCW = 166
M680X_INS_INCX = 167
M680X_INS_INS = 168
M680X_INS_INX = 169
M680X_INS_INY = 170
M680X_INS_JMP = 171
M680X_INS_JSR = 172
M680X_INS_LBCC = 173
M680X_INS_LBCS = 174
M680X_INS_LBEQ = 175
M680X_INS_LBGE = 176
M680X_INS_LBGT = 177
M680X_INS_LBHI = 178
M680X_INS_LBLE = 179
M680X_INS_LBLS = 180
M680X_INS_LBLT = 181
M680X_INS_LBMI = 182
M680X_INS_LBNE = 183
M680X_INS_LBPL = 184
M680X_INS_LBRA = 185
M680X_INS_LBRN = 186
M680X_INS_LBSR = 187
M680X_INS_LBVC = 188
M680X_INS_LBVS = 189
M680X_INS_LDA = 190
M680X_INS_LDAA = 191
M680X_INS_LDAB = 192
M680X_INS_LDB = 193
M680X_INS_LDBT = 194
M680X_INS_LDD = 195
M680X_INS_LDE = 196
M680X_INS_LDF = 197
M680X_INS_LDHX = 198
M680X_INS_LDMD = 199
M680X_INS_LDQ = 200
M680X_INS_LDS = 201
M680X_INS_LDU = 202
M680X_INS_LDW = 203
M680X_INS_LDX = 204
M680X_INS_LDY = 205
M680X_INS_LEAS = 206
M680X_INS_LEAU = 207
M680X_INS_LEAX = 208
M680X_INS_LEAY = 209
M680X_INS_LSL = 210
M680X_INS_LSLA = 211
M680X_INS_LSLB = 212
M680X_INS_LSLD = 213
M680X_INS_LSLX = 214
M680X_INS_LSR = 215
M680X_INS_LSRA = 216
M680X_INS_LSRB = 217
M680X_INS_LSRD = 218
M680X_INS_LSRW = 219
M680X_INS_LSRX = 220
M680X_INS_MAXA = 221
M680X_INS_MAXM = 222
M680X_INS_MEM = 223
M680X_INS_MINA = 224
M680X_INS_MINM = 225
M680X_INS_MOV = 226
M680X_INS_MOVB = 227
M680X_INS_MOVW = 228
M680X_INS_MUL = 229
M680X_INS_MULD = 230
M680X_INS_NEG = 231
M680X_INS_NEGA = 232
M680X_INS_NEGB = 233
M680X_INS_NEGD = 234
M680X_INS_NEGX = 235
M680X_INS_NOP = 236
M680X_INS_NSA = 237
M680X_INS_OIM = 238
M680X_INS_ORA = 239
M680X_INS_ORAA = 240
M680X_INS_ORAB = 241
M680X_INS_ORB = 242
M680X_INS_ORCC = 243
M680X_INS_ORD = 244
M680X_INS_ORR = 245
M680X_INS_PSHA = 246
M680X_INS_PSHB = 247
M680X_INS_PSHC = 248
M680X_INS_PSHD = 249
M680X_INS_PSHH = 250
M680X_INS_PSHS = 251
M680X_INS_PSHSW = 252
M680X_INS_PSHU = 253
M680X_INS_PSHUW = 254
M680X_INS_PSHX = 255
M680X_INS_PSHY = 256
M680X_INS_PULA = 257
M680X_INS_PULB = 258
M680X_INS_PULC = 259
M680X_INS_PULD = 260
M680X_INS_PULH = 261
M680X_INS_PULS = 262
M680X_INS_PULSW = 263
M680X_INS_PULU = 264
M680X_INS_PULUW = 265
M680X_INS_PULX = 266
M680X_INS_PULY = 267
M680X_INS_REV = 268
M680X_INS_REVW = 269
M680X_INS_ROL = 270
M680X_INS_ROLA = 271
M680X_INS_ROLB = 272
M680X_INS_ROLD = 273
M680X_INS_ROLW = 274
M680X_INS_ROLX = 275
M680X_INS_ROR = 276
M680X_INS_RORA = 277
M680X_INS_RORB = 278
M680X_INS_RORD = 279
M680X_INS_RORW = 280
M680X_INS_RORX = 281
M680X_INS_RSP = 282
M680X_INS_RTC = 283
M680X_INS_RTI = 284
M680X_INS_RTS = 285
M680X_INS_SBA = 286
M680X_INS_SBC = 287
M680X_INS_SBCA = 288
M680X_INS_SBCB = 289
M680X_INS_SBCD = 290
M680X_INS_SBCR = 291
M680X_INS_SEC = 292
M680X_INS_SEI = 293
M680X_INS_SEV = 294
M680X_INS_SEX = 295
M680X_INS_SEXW = 296
M680X_INS_SHA = 297
M680X_INS_SLA = 298
M680X_INS_SLP = 299
M680X_INS_STA = 300
M680X_INS_STAA = 301
M680X_INS_STAB = 302
M680X_INS_STB = 303
M680X_INS_STBT = 304
M680X_INS_STD = 305
M680X_INS_STE = 306
M680X_INS_STF = 307
M680X_INS_STOP = 308
M680X_INS_STHX = 309
M680X_INS_STQ = 310
M680X_INS_STS = 311
M680X_INS_STU = 312
M680X_INS_STW = 313
M680X_INS_STX = 314
M680X_INS_STY = 315
M680X_INS_SUB = 316
M680X_INS_SUBA = 317
M680X_INS_SUBB = 318
M680X_INS_SUBD = 319
M680X_INS_SUBE = 320
M680X_INS_SUBF = 321
M680X_INS_SUBR = 322
M680X_INS_SUBW = 323
M680X_INS_SWI = 324
M680X_INS_SWI2 = 325
M680X_INS_SWI3 = 326
M680X_INS_SYNC = 327
M680X_INS_TAB = 328
M680X_INS_TAP = 329
M680X_INS_TAX = 330
M680X_INS_TBA = 331
M680X_INS_TBEQ = 332
M680X_INS_TBL = 333
M680X_INS_TBNE = 334
M680X_INS_TEST = 335
M680X_INS_TFM = 336
M680X_INS_TFR = 337
M680X_INS_TIM = 338
M680X_INS_TPA = 339
M680X_INS_TST = 340
M680X_INS_TSTA = 341
M680X_INS_TSTB = 342
M680X_INS_TSTD = 343
M680X_INS_TSTE = 344
M680X_INS_TSTF = 345
M680X_INS_TSTW = 346
M680X_INS_TSTX = 347
M680X_INS_TSX = 348
M680X_INS_TSY = 349
M680X_INS_TXA = 350
M680X_INS_TXS = 351
M680X_INS_TYS = 352
M680X_INS_WAI = 353
M680X_INS_WAIT = 354
M680X_INS_WAV = 355
M680X_INS_WAVR = 356
M680X_INS_XGDX = 357
M680X_INS_XGDY = 358
M680X_INS_ENDING = 359
M680X_INS_ADDX = 17
M680X_INS_ADDY = 18
M680X_INS_ADED = 19
M680X_INS_ADEX = 20
M680X_INS_ADEY = 21
M680X_INS_AIM = 22
M680X_INS_AIS = 23
M680X_INS_AIX = 24
M680X_INS_AND = 25
M680X_INS_ANDA = 26
M680X_INS_ANDB = 27
M680X_INS_ANDX = 28
M680X_INS_ANDY = 29
M680X_INS_ANDCC = 30
M680X_INS_ANDD = 31
M680X_INS_ANDR = 32
M680X_INS_ASL = 33
M680X_INS_ASLA = 34
M680X_INS_ASLB = 35
M680X_INS_ASLD = 36
M680X_INS_ASLW = 37
M680X_INS_ASLX = 38
M680X_INS_ASLY = 39
M680X_INS_ASR = 40
M680X_INS_ASRA = 41
M680X_INS_ASRB = 42
M680X_INS_ASRD = 43
M680X_INS_ASRW = 44
M680X_INS_ASRX = 45
M680X_INS_ASRY = 46
M680X_INS_BAND = 47
M680X_INS_BCC = 48
M680X_INS_BCLR = 49
M680X_INS_BCS = 50
M680X_INS_BEOR = 51
M680X_INS_BEQ = 52
M680X_INS_BGE = 53
M680X_INS_BGND = 54
M680X_INS_BGT = 55
M680X_INS_BHCC = 56
M680X_INS_BHCS = 57
M680X_INS_BHI = 58
M680X_INS_BIAND = 59
M680X_INS_BIEOR = 60
M680X_INS_BIH = 61
M680X_INS_BIL = 62
M680X_INS_BIOR = 63
M680X_INS_BIT = 64
M680X_INS_BITA = 65
M680X_INS_BITB = 66
M680X_INS_BITD = 67
M680X_INS_BITMD = 68
M680X_INS_BITX = 69
M680X_INS_BITY = 70
M680X_INS_BLE = 71
M680X_INS_BLS = 72
M680X_INS_BLT = 73
M680X_INS_BMC = 74
M680X_INS_BMI = 75
M680X_INS_BMS = 76
M680X_INS_BNE = 77
M680X_INS_BOR = 78
M680X_INS_BPL = 79
M680X_INS_BRCLR = 80
M680X_INS_BRSET = 81
M680X_INS_BRA = 82
M680X_INS_BRN = 83
M680X_INS_BSET = 84
M680X_INS_BSR = 85
M680X_INS_BTAS = 86
M680X_INS_BVC = 87
M680X_INS_BVS = 88
M680X_INS_CALL = 89
M680X_INS_CBA = 90
M680X_INS_CBEQ = 91
M680X_INS_CBEQA = 92
M680X_INS_CBEQX = 93
M680X_INS_CLC = 94
M680X_INS_CLI = 95
M680X_INS_CLR = 96
M680X_INS_CLRA = 97
M680X_INS_CLRB = 98
M680X_INS_CLRD = 99
M680X_INS_CLRE = 100
M680X_INS_CLRF = 101
M680X_INS_CLRH = 102
M680X_INS_CLRW = 103
M680X_INS_CLRX = 104
M680X_INS_CLRY = 105
M680X_INS_CLV = 106
M680X_INS_CMP = 107
M680X_INS_CMPA = 108
M680X_INS_CMPB = 109
M680X_INS_CMPD = 110
M680X_INS_CMPE = 111
M680X_INS_CMPF = 112
M680X_INS_CMPR = 113
M680X_INS_CMPS = 114
M680X_INS_CMPU = 115
M680X_INS_CMPW = 116
M680X_INS_CMPX = 117
M680X_INS_CMPY = 118
M680X_INS_COM = 119
M680X_INS_COMA = 120
M680X_INS_COMB = 121
M680X_INS_COMD = 122
M680X_INS_COME = 123
M680X_INS_COMF = 124
M680X_INS_COMW = 125
M680X_INS_COMX = 126
M680X_INS_COMY = 127
M680X_INS_CPD = 128
M680X_INS_CPED = 129
M680X_INS_CPES = 130
M680X_INS_CPEX = 131
M680X_INS_CPEY = 132
M680X_INS_CPHX = 133
M680X_INS_CPS = 134
M680X_INS_CPX = 135
M680X_INS_CPY = 136
M680X_INS_CWAI = 137
M680X_INS_DAA = 138
M680X_INS_DBEQ = 139
M680X_INS_DBNE = 140
M680X_INS_DBNZ = 141
M680X_INS_DBNZA = 142
M680X_INS_DBNZX = 143
M680X_INS_DEC = 144
M680X_INS_DECA = 145
M680X_INS_DECB = 146
M680X_INS_DECD = 147
M680X_INS_DECE = 148
M680X_INS_DECF = 149
M680X_INS_DECW = 150
M680X_INS_DECX = 151
M680X_INS_DECY = 152
M680X_INS_DES = 153
M680X_INS_DEX = 154
M680X_INS_DEY = 155
M680X_INS_DIV = 156
M680X_INS_DIVD = 157
M680X_INS_DIVQ = 158
M680X_INS_EDIV = 159
M680X_INS_EDIVS = 160
M680X_INS_EIM = 161
M680X_INS_EMACS = 162
M680X_INS_EMAXD = 163
M680X_INS_EMAXM = 164
M680X_INS_EMIND = 165
M680X_INS_EMINM = 166
M680X_INS_EMUL = 167
M680X_INS_EMULS = 168
M680X_INS_EOR = 169
M680X_INS_EORA = 170
M680X_INS_EORB = 171
M680X_INS_EORD = 172
M680X_INS_EORR = 173
M680X_INS_EORX = 174
M680X_INS_EORY = 175
M680X_INS_ETBL = 176
M680X_INS_EXG = 177
M680X_INS_FDIV = 178
M680X_INS_GLDAA = 179
M680X_INS_GLDAB = 180
M680X_INS_GLDD = 181
M680X_INS_GLDS = 182
M680X_INS_GLDX = 183
M680X_INS_GLDY = 184
M680X_INS_GSTAA = 185
M680X_INS_GSTAB = 186
M680X_INS_GSTD = 187
M680X_INS_GSTS = 188
M680X_INS_GSTX = 189
M680X_INS_GSTY = 190
M680X_INS_IBEQ = 191
M680X_INS_IBNE = 192
M680X_INS_IDIV = 193
M680X_INS_IDIVS = 194
M680X_INS_ILLGL = 195
M680X_INS_INC = 196
M680X_INS_INCA = 197
M680X_INS_INCB = 198
M680X_INS_INCD = 199
M680X_INS_INCE = 200
M680X_INS_INCF = 201
M680X_INS_INCW = 202
M680X_INS_INCX = 203
M680X_INS_INCY = 204
M680X_INS_INS = 205
M680X_INS_INX = 206
M680X_INS_INY = 207
M680X_INS_JMP = 208
M680X_INS_JSR = 209
M680X_INS_LBCC = 210
M680X_INS_LBCS = 211
M680X_INS_LBEQ = 212
M680X_INS_LBGE = 213
M680X_INS_LBGT = 214
M680X_INS_LBHI = 215
M680X_INS_LBLE = 216
M680X_INS_LBLS = 217
M680X_INS_LBLT = 218
M680X_INS_LBMI = 219
M680X_INS_LBNE = 220
M680X_INS_LBPL = 221
M680X_INS_LBRA = 222
M680X_INS_LBRN = 223
M680X_INS_LBSR = 224
M680X_INS_LBVC = 225
M680X_INS_LBVS = 226
M680X_INS_LDA = 227
M680X_INS_LDAA = 228
M680X_INS_LDAB = 229
M680X_INS_LDB = 230
M680X_INS_LDBT = 231
M680X_INS_LDD = 232
M680X_INS_LDE = 233
M680X_INS_LDF = 234
M680X_INS_LDHX = 235
M680X_INS_LDMD = 236
M680X_INS_LDQ = 237
M680X_INS_LDS = 238
M680X_INS_LDU = 239
M680X_INS_LDW = 240
M680X_INS_LDX = 241
M680X_INS_LDY = 242
M680X_INS_LEAS = 243
M680X_INS_LEAU = 244
M680X_INS_LEAX = 245
M680X_INS_LEAY = 246
M680X_INS_LSL = 247
M680X_INS_LSLA = 248
M680X_INS_LSLB = 249
M680X_INS_LSLD = 250
M680X_INS_LSLX = 251
M680X_INS_LSR = 252
M680X_INS_LSRA = 253
M680X_INS_LSRB = 254
M680X_INS_LSRD = 255
M680X_INS_LSRW = 256
M680X_INS_LSRX = 257
M680X_INS_LSRY = 258
M680X_INS_MAXA = 259
M680X_INS_MAXM = 260
M680X_INS_MEM = 261
M680X_INS_MINA = 262
M680X_INS_MINM = 263
M680X_INS_MOV = 264
M680X_INS_MOVB = 265
M680X_INS_MOVW = 266
M680X_INS_MUL = 267
M680X_INS_MULD = 268
M680X_INS_NEG = 269
M680X_INS_NEGA = 270
M680X_INS_NEGB = 271
M680X_INS_NEGD = 272
M680X_INS_NEGW = 273
M680X_INS_NEGX = 274
M680X_INS_NEGY = 275
M680X_INS_NOP = 276
M680X_INS_NSA = 277
M680X_INS_OIM = 278
M680X_INS_ORA = 279
M680X_INS_ORAA = 280
M680X_INS_ORAB = 281
M680X_INS_ORB = 282
M680X_INS_ORCC = 283
M680X_INS_ORD = 284
M680X_INS_ORR = 285
M680X_INS_ORX = 286
M680X_INS_ORY = 287
M680X_INS_PSHA = 288
M680X_INS_PSHB = 289
M680X_INS_PSHC = 290
M680X_INS_PSHCW = 291
M680X_INS_PSHD = 292
M680X_INS_PSHH = 293
M680X_INS_PSHS = 294
M680X_INS_PSHSW = 295
M680X_INS_PSHU = 296
M680X_INS_PSHUW = 297
M680X_INS_PSHX = 298
M680X_INS_PSHY = 299
M680X_INS_PULA = 300
M680X_INS_PULB = 301
M680X_INS_PULC = 302
M680X_INS_PULCW = 303
M680X_INS_PULD = 304
M680X_INS_PULH = 305
M680X_INS_PULS = 306
M680X_INS_PULSW = 307
M680X_INS_PULU = 308
M680X_INS_PULUW = 309
M680X_INS_PULX = 310
M680X_INS_PULY = 311
M680X_INS_REV = 312
M680X_INS_REVW = 313
M680X_INS_ROL = 314
M680X_INS_ROLA = 315
M680X_INS_ROLB = 316
M680X_INS_ROLD = 317
M680X_INS_ROLW = 318
M680X_INS_ROLX = 319
M680X_INS_ROLY = 320
M680X_INS_ROR = 321
M680X_INS_RORA = 322
M680X_INS_RORB = 323
M680X_INS_RORD = 324
M680X_INS_RORW = 325
M680X_INS_RORX = 326
M680X_INS_RORY = 327
M680X_INS_RSP = 328
M680X_INS_RTC = 329
M680X_INS_RTI = 330
M680X_INS_RTS = 331
M680X_INS_SBA = 332
M680X_INS_SBC = 333
M680X_INS_SBCA = 334
M680X_INS_SBCB = 335
M680X_INS_SBCD = 336
M680X_INS_SBCR = 337
M680X_INS_SBED = 338
M680X_INS_SBEX = 339
M680X_INS_SBEY = 340
M680X_INS_SEC = 341
M680X_INS_SEI = 342
M680X_INS_SEV = 343
M680X_INS_SEX = 344
M680X_INS_SEXW = 345
M680X_INS_SHA = 346
M680X_INS_SLA = 347
M680X_INS_SLP = 348
M680X_INS_STA = 349
M680X_INS_STAA = 350
M680X_INS_STAB = 351
M680X_INS_STB = 352
M680X_INS_STBT = 353
M680X_INS_STD = 354
M680X_INS_STE = 355
M680X_INS_STF = 356
M680X_INS_STOP = 357
M680X_INS_STHX = 358
M680X_INS_STQ = 359
M680X_INS_STS = 360
M680X_INS_STU = 361
M680X_INS_STW = 362
M680X_INS_STX = 363
M680X_INS_STY = 364
M680X_INS_SUB = 365
M680X_INS_SUBA = 366
M680X_INS_SUBB = 367
M680X_INS_SUBD = 368
M680X_INS_SUBE = 369
M680X_INS_SUBF = 370
M680X_INS_SUBR = 371
M680X_INS_SUBW = 372
M680X_INS_SUBX = 373
M680X_INS_SUBY = 374
M680X_INS_SWI = 375
M680X_INS_SWI2 = 376
M680X_INS_SWI3 = 377
M680X_INS_SYNC = 378
M680X_INS_SYS = 379
M680X_INS_TAB = 380
M680X_INS_TAP = 381
M680X_INS_TAX = 382
M680X_INS_TBA = 383
M680X_INS_TBEQ = 384
M680X_INS_TBL = 385
M680X_INS_TBNE = 386
M680X_INS_TEST = 387
M680X_INS_TFM = 388
M680X_INS_TFR = 389
M680X_INS_TIM = 390
M680X_INS_TPA = 391
M680X_INS_TRAP = 392
M680X_INS_TST = 393
M680X_INS_TSTA = 394
M680X_INS_TSTB = 395
M680X_INS_TSTD = 396
M680X_INS_TSTE = 397
M680X_INS_TSTF = 398
M680X_INS_TSTW = 399
M680X_INS_TSTX = 400
M680X_INS_TSTY = 401
M680X_INS_TSX = 402
M680X_INS_TSY = 403
M680X_INS_TXA = 404
M680X_INS_TXS = 405
M680X_INS_TYS = 406
M680X_INS_WAI = 407
M680X_INS_WAIT = 408
M680X_INS_WAV = 409
M680X_INS_WAVR = 410
M680X_INS_XGDX = 411
M680X_INS_XGDY = 412
M680X_INS_ENDING = 413
+1 -1
View File
@@ -185,7 +185,7 @@ typedef struct cs_arch_config {
CS_MODE_M680X_6805 | CS_MODE_M680X_6808 | \
CS_MODE_M680X_6809 | CS_MODE_M680X_6811 | \
CS_MODE_M680X_CPU12 | CS_MODE_M680X_HCS08 | \
CS_MODE_M680X_RS08), \
CS_MODE_M680X_RS08 | CS_MODE_M680X_HCS12X), \
}
#define CS_ARCH_CONFIG_EVM \
{ \
+1
View File
@@ -440,6 +440,7 @@ static struct {
{ "hd6309", "m680x, HD6309", CS_ARCH_M680X, CS_MODE_M680X_6309 },
{ "hcs08", "m680x, HCS08", CS_ARCH_M680X, CS_MODE_M680X_HCS08 },
{ "rs08", "m680x, RS08", CS_ARCH_M680X, CS_MODE_M680X_RS08 },
{ "hcs12x", "m680x, HCS12X", CS_ARCH_M680X, CS_MODE_M680X_HCS12X },
{ "evm", "ethereum virtual machine", CS_ARCH_EVM, 0 },
{ "wasm", "web assembly", CS_ARCH_WASM, 0 },
+1
View File
@@ -207,6 +207,7 @@ typedef enum cs_mode {
///< used on M68HC12/HCS12
CS_MODE_M680X_HCS08 = 1 << 10, ///< M680X Freescale/NXP HCS08 mode
CS_MODE_M680X_RS08 = 1 << 11, ///< M680X Freescale/NXP RS08 mode
CS_MODE_M680X_HCS12X = 1 << 12, ///< M680X Freescale/NXP HCS12X mode
CS_MODE_BPF_CLASSIC = 0, ///< Classic BPF mode (default)
CS_MODE_BPF_EXTENDED = 1 << 0, ///< Extended BPF mode
CS_MODE_RISCV32 = 1 << 0, ///< RISCV RV32G
+54
View File
@@ -193,12 +193,19 @@ typedef enum m680x_insn {
M680X_INS_ADDF,
M680X_INS_ADDR,
M680X_INS_ADDW,
M680X_INS_ADDX, ///< HCS12X
M680X_INS_ADDY, ///< HCS12X
M680X_INS_ADED, ///< HCS12X
M680X_INS_ADEX, ///< HCS12X
M680X_INS_ADEY, ///< HCS12X
M680X_INS_AIM,
M680X_INS_AIS,
M680X_INS_AIX,
M680X_INS_AND,
M680X_INS_ANDA,
M680X_INS_ANDB,
M680X_INS_ANDX, ///< HCS12X
M680X_INS_ANDY, ///< HCS12X
M680X_INS_ANDCC,
M680X_INS_ANDD,
M680X_INS_ANDR,
@@ -206,11 +213,16 @@ typedef enum m680x_insn {
M680X_INS_ASLA,
M680X_INS_ASLB,
M680X_INS_ASLD, ///< or LSLD
M680X_INS_ASLW, ///< HCS12X
M680X_INS_ASLX, ///< HCS12X
M680X_INS_ASLY, ///< HCS12X
M680X_INS_ASR,
M680X_INS_ASRA,
M680X_INS_ASRB,
M680X_INS_ASRD,
M680X_INS_ASRW, ///< HCS12X
M680X_INS_ASRX,
M680X_INS_ASRY, ///< HCS12X
M680X_INS_BAND,
M680X_INS_BCC, ///< or BHS
M680X_INS_BCLR,
@@ -233,6 +245,8 @@ typedef enum m680x_insn {
M680X_INS_BITB,
M680X_INS_BITD,
M680X_INS_BITMD,
M680X_INS_BITX, ///< HCS12X
M680X_INS_BITY, ///< HCS12X
M680X_INS_BLE,
M680X_INS_BLS,
M680X_INS_BLT,
@@ -248,6 +262,7 @@ typedef enum m680x_insn {
M680X_INS_BRN,
M680X_INS_BSET,
M680X_INS_BSR,
M680X_INS_BTAS, ///< HCS12X
M680X_INS_BVC,
M680X_INS_BVS,
M680X_INS_CALL,
@@ -266,6 +281,7 @@ typedef enum m680x_insn {
M680X_INS_CLRH,
M680X_INS_CLRW,
M680X_INS_CLRX,
M680X_INS_CLRY,
M680X_INS_CLV, ///< M6800/1/2/3
M680X_INS_CMP,
M680X_INS_CMPA,
@@ -287,7 +303,12 @@ typedef enum m680x_insn {
M680X_INS_COMF,
M680X_INS_COMW,
M680X_INS_COMX,
M680X_INS_COMY,
M680X_INS_CPD,
M680X_INS_CPED, ///< HCS12X
M680X_INS_CPES, ///< HCS12X
M680X_INS_CPEX, ///< HCS12X
M680X_INS_CPEY, ///< HCS12X
M680X_INS_CPHX,
M680X_INS_CPS,
M680X_INS_CPX, ///< M6800/1/2/3
@@ -307,6 +328,7 @@ typedef enum m680x_insn {
M680X_INS_DECF,
M680X_INS_DECW,
M680X_INS_DECX,
M680X_INS_DECY,
M680X_INS_DES, ///< M6800/1/2/3
M680X_INS_DEX, ///< M6800/1/2/3
M680X_INS_DEY,
@@ -328,9 +350,23 @@ typedef enum m680x_insn {
M680X_INS_EORB,
M680X_INS_EORD,
M680X_INS_EORR,
M680X_INS_EORX, ///< HCS12X
M680X_INS_EORY, ///< HCS12X
M680X_INS_ETBL,
M680X_INS_EXG,
M680X_INS_FDIV,
M680X_INS_GLDAA, ///< HCS12X
M680X_INS_GLDAB, ///< HCS12X
M680X_INS_GLDD, ///< HCS12X
M680X_INS_GLDS, ///< HCS12X
M680X_INS_GLDX, ///< HCS12X
M680X_INS_GLDY, ///< HCS12X
M680X_INS_GSTAA, ///< HCS12X
M680X_INS_GSTAB, ///< HCS12X
M680X_INS_GSTD, ///< HCS12X
M680X_INS_GSTS, ///< HCS12X
M680X_INS_GSTX, ///< HCS12X
M680X_INS_GSTY, ///< HCS12X
M680X_INS_IBEQ,
M680X_INS_IBNE,
M680X_INS_IDIV,
@@ -344,6 +380,7 @@ typedef enum m680x_insn {
M680X_INS_INCF,
M680X_INS_INCW,
M680X_INS_INCX,
M680X_INS_INCY,
M680X_INS_INS, ///< M6800/1/2/3
M680X_INS_INX, ///< M6800/1/2/3
M680X_INS_INY,
@@ -397,6 +434,7 @@ typedef enum m680x_insn {
M680X_INS_LSRD, ///< or ASRD
M680X_INS_LSRW,
M680X_INS_LSRX,
M680X_INS_LSRY,
M680X_INS_MAXA,
M680X_INS_MAXM,
M680X_INS_MEM,
@@ -411,7 +449,9 @@ typedef enum m680x_insn {
M680X_INS_NEGA,
M680X_INS_NEGB,
M680X_INS_NEGD,
M680X_INS_NEGW, ///< HCS12X
M680X_INS_NEGX,
M680X_INS_NEGY, ///< HCS12X
M680X_INS_NOP,
M680X_INS_NSA,
M680X_INS_OIM,
@@ -422,9 +462,12 @@ typedef enum m680x_insn {
M680X_INS_ORCC,
M680X_INS_ORD,
M680X_INS_ORR,
M680X_INS_ORX, ///< HCS12X
M680X_INS_ORY, ///< HCS12X
M680X_INS_PSHA, ///< M6800/1/2/3
M680X_INS_PSHB, ///< M6800/1/2/3
M680X_INS_PSHC,
M680X_INS_PSHCW, ///< HCS12X
M680X_INS_PSHD,
M680X_INS_PSHH,
M680X_INS_PSHS,
@@ -436,6 +479,7 @@ typedef enum m680x_insn {
M680X_INS_PULA, ///< M6800/1/2/3
M680X_INS_PULB, ///< M6800/1/2/3
M680X_INS_PULC,
M680X_INS_PULCW, ///< HCS12X
M680X_INS_PULD,
M680X_INS_PULH,
M680X_INS_PULS,
@@ -452,12 +496,14 @@ typedef enum m680x_insn {
M680X_INS_ROLD,
M680X_INS_ROLW,
M680X_INS_ROLX,
M680X_INS_ROLY,
M680X_INS_ROR,
M680X_INS_RORA,
M680X_INS_RORB,
M680X_INS_RORD,
M680X_INS_RORW,
M680X_INS_RORX,
M680X_INS_RORY,
M680X_INS_RSP,
M680X_INS_RTC,
M680X_INS_RTI,
@@ -468,6 +514,9 @@ typedef enum m680x_insn {
M680X_INS_SBCB,
M680X_INS_SBCD,
M680X_INS_SBCR,
M680X_INS_SBED, ///< HCS12X
M680X_INS_SBEX, ///< HCS12X
M680X_INS_SBEY, ///< HCS12X
M680X_INS_SEC,
M680X_INS_SEI,
M680X_INS_SEV,
@@ -500,10 +549,13 @@ typedef enum m680x_insn {
M680X_INS_SUBF,
M680X_INS_SUBR,
M680X_INS_SUBW,
M680X_INS_SUBX, ///< HCS12X
M680X_INS_SUBY, ///< HCS12X
M680X_INS_SWI,
M680X_INS_SWI2,
M680X_INS_SWI3,
M680X_INS_SYNC,
M680X_INS_SYS, ///< HCS12X
M680X_INS_TAB, ///< M6800/1/2/3
M680X_INS_TAP, ///< M6800/1/2/3
M680X_INS_TAX,
@@ -516,6 +568,7 @@ typedef enum m680x_insn {
M680X_INS_TFR,
M680X_INS_TIM,
M680X_INS_TPA, ///< M6800/1/2/3
M680X_INS_TRAP,
M680X_INS_TST,
M680X_INS_TSTA,
M680X_INS_TSTB,
@@ -524,6 +577,7 @@ typedef enum m680x_insn {
M680X_INS_TSTF,
M680X_INS_TSTW,
M680X_INS_TSTX,
M680X_INS_TSTY,
M680X_INS_TSX, ///< M6800/1/2/3
M680X_INS_TSY,
M680X_INS_TXA,
+1
View File
@@ -95,6 +95,7 @@ static const cs_enum_id_map test_mode_map[] = {
{ .str = "CS_MODE_M680X_6811", .val = CS_MODE_M680X_6811 },
{ .str = "CS_MODE_M680X_CPU12", .val = CS_MODE_M680X_CPU12 },
{ .str = "CS_MODE_M680X_HCS08", .val = CS_MODE_M680X_HCS08 },
{ .str = "CS_MODE_M680X_HCS12X", .val = CS_MODE_M680X_HCS12X },
{ .str = "CS_MODE_M680X_RS08", .val = CS_MODE_M680X_RS08 },
{ .str = "CS_MODE_M68K_000", .val = CS_MODE_M68K_000 },
{ .str = "CS_MODE_M68K_010", .val = CS_MODE_M68K_010 },
+2
View File
@@ -108,6 +108,8 @@ struct platform platforms[] = {
{ //item 43
CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_HCS08, "M680X_M6808", "hcs08" },
{ CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_RS08, "M680X_RS08", "rs08" },
{ CS_ARCH_M680X, (cs_mode)CS_MODE_M680X_HCS12X, "M680X_HCS12X",
"hcs12x" },
{ //item 44
CS_ARCH_RISCV, CS_MODE_RISCV32, "RISCV", "riscv32" },
{ //item 45
+130 -1
View File
@@ -3502,4 +3502,133 @@ test_cases:
access: CS_AC_WRITE
size: 1
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, a ]
regs_read: [ cc, a ]
-
input:
bytes: [ 0x18, 0x92, 0xDD, 0x18, 0xB6, 0x12, 0x34, 0x18, 0x39, 0x18, 0x35, 0x12, 0x18, 0x42, 0x18, 0xA7, 0x18, 0xC0, 0x11, 0x11, 0x18, 0xC2, 0x11, 0x11, 0x18, 0x8A, 0x11, 0x11 ]
arch: "m680x"
options: [ CS_OPT_DETAIL, CS_MODE_M680X_HCS12X ]
address: 0x1000
expected:
insns:
-
asm_text: "sbex $dd"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: x
access: CS_AC_READ_WRITE
size: 2
-
type: M680X_OP_DIRECT
direct_addr: 0x00DD
direct_addr_set: true
access: CS_AC_READ_WRITE
size: 2
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, x ]
-
asm_text: "gldaa $1234"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: a
access: CS_AC_READ_WRITE
size: 1
-
type: M680X_OP_EXTENDED
ext_address: 0x1234
access: CS_AC_READ_WRITE
size: 1
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, a ]
regs_write: [ cc,a ]
-
asm_text: "pshcw"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: cc
access: CS_AC_READ
size: 1
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc ]
-
asm_text: "btas $12"
details:
m680x:
operands:
-
type: M680X_OP_DIRECT
direct_addr: 0x0012
direct_addr_set: true
size: 1
-
asm_text: "incx"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: x
access: CS_AC_READ_WRITE
size: 2
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, x ]
regs_write: [ cc, x ]
-
asm_text: "sys"
-
asm_text: "suby #4369"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: y
access: CS_AC_READ_WRITE
size: 2
-
type: M680X_OP_IMMEDIATE
imm: 0x1111
access: CS_AC_READ
size: 2
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, y ]
regs_write: [ cc, y ]
-
asm_text: "sbey $1111"
details:
m680x:
operands:
-
type: M680X_OP_REGISTER
reg: y
access: CS_AC_READ_WRITE
size: 2
-
type: M680X_OP_EXTENDED
ext_address: 0x1111
access: CS_AC_READ_WRITE
size: 2
flags: [M680X_FIRST_OP_IN_MNEM]
regs_read: [ cc, y ]
regs_write: [ cc, y ]
-
asm_text: "orx #17"
details:
m680x:
operands:
-
type: M680X_OP_IMMEDIATE
imm: 0x11
access: CS_AC_READ
size: 1
regs_read: [ cc ]
regs_write: [ cc ]