Merge commit '802798ce3c8baa4697120580f87bc1ee377306d3' as 'external/capstone'
This commit is contained in:
+2367
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,17 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
|
||||
|
||||
#ifndef CS_M680XDISASSEMBLER_H
|
||||
#define CS_M680XDISASSEMBLER_H
|
||||
|
||||
#include "../../MCInst.h"
|
||||
|
||||
bool M680X_getInstruction(csh ud, const uint8_t *code, size_t code_len,
|
||||
MCInst *instr, uint16_t *size, uint64_t address,
|
||||
void *info);
|
||||
void M680X_get_insn_id(cs_struct *h, cs_insn *insn, unsigned int id);
|
||||
void M680X_reg_access(const cs_insn *insn, cs_regs regs_read,
|
||||
uint8_t *regs_read_count, cs_regs regs_write,
|
||||
uint8_t *regs_write_count);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
|
||||
|
||||
#ifndef CS_M680XDISASSEMBLERINTERNALS_H
|
||||
#define CS_M680XDISASSEMBLERINTERNALS_H
|
||||
|
||||
#include "../../MCInst.h"
|
||||
#include "../../include/capstone/m680x.h"
|
||||
|
||||
typedef enum e_cpu_type {
|
||||
M680X_CPU_TYPE_INVALID,
|
||||
M680X_CPU_TYPE_6301, // M680X Hitachi HD6301,HD6303 mode
|
||||
M680X_CPU_TYPE_6309, // M680X Hitachi HD6309 mode
|
||||
M680X_CPU_TYPE_6800, // M680X Motorola 6800,6802 mode
|
||||
M680X_CPU_TYPE_6801, // M680X Motorola 6801,6803 mode
|
||||
M680X_CPU_TYPE_6805, // M680X Motorola/Freescale M68HC05 mode
|
||||
M680X_CPU_TYPE_6808, // M680X Motorola/Freescale M68HC08 mode
|
||||
M680X_CPU_TYPE_6809, // M680X Motorola 6809 mode
|
||||
M680X_CPU_TYPE_6811, // M680X Motorola/Freescale M68HC11 mode
|
||||
M680X_CPU_TYPE_CPU12, // M680X Motorola/Freescale CPU12 mode
|
||||
// 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;
|
||||
|
||||
struct inst_page1;
|
||||
struct inst_pageX;
|
||||
|
||||
typedef struct {
|
||||
const struct inst_page1 *inst_page1_table;
|
||||
const struct inst_pageX *inst_overlay_table[2];
|
||||
size_t overlay_table_size[2];
|
||||
uint8_t pageX_prefix[3];
|
||||
const struct inst_pageX *inst_pageX_table[3];
|
||||
size_t pageX_table_size[3];
|
||||
const uint8_t *reg_byte_size;
|
||||
const bool *tfr_reg_valid;
|
||||
m680x_insn insn_cc_not_modified[2];
|
||||
} cpu_tables;
|
||||
|
||||
/* Private, For internal use only */
|
||||
typedef struct m680x_info {
|
||||
const uint8_t *code; // code buffer
|
||||
uint32_t size; // byte size of code
|
||||
uint16_t offset; // address offset of first byte in code buffer
|
||||
e_cpu_type cpu_type; // The CPU type to be used for disassembling
|
||||
cs_m680x m680x; // M680X specific properties
|
||||
const cpu_tables *cpu;
|
||||
m680x_insn insn; // Instruction ID
|
||||
uint8_t insn_size; // byte size of instruction
|
||||
} m680x_info;
|
||||
|
||||
extern cs_err M680X_disassembler_init(cs_struct *ud);
|
||||
extern cs_err M680X_instprinter_init(cs_struct *ud);
|
||||
|
||||
#endif
|
||||
+350
@@ -0,0 +1,350 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
|
||||
|
||||
#ifdef CAPSTONE_HAS_M680X
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <capstone/platform.h>
|
||||
|
||||
#include "../../cs_priv.h"
|
||||
#include "../../MCInst.h"
|
||||
#include "../../SStream.h"
|
||||
#include "../../MCRegisterInfo.h"
|
||||
#include "../../Mapping.h"
|
||||
#include "../../MCInstPrinter.h"
|
||||
#include "../../utils.h"
|
||||
#include "M680XInstPrinter.h"
|
||||
#include "M680XDisassembler.h"
|
||||
#include "M680XDisassemblerInternals.h"
|
||||
|
||||
#ifndef CAPSTONE_DIET
|
||||
static const char s_reg_names[][10] = {
|
||||
"<invalid>", "a", "b", "e", "f", "0", "d", "w",
|
||||
"cc", "dp", "md", "hx", "h", "x", "y", "s",
|
||||
"u", "v", "q", "pc", "spc", "tmp2", "tmp3",
|
||||
};
|
||||
|
||||
static const char s_instruction_names[][6] = {
|
||||
"invld", "aba", "abx", "aby", "adc", "adca", "adcb", "adcd",
|
||||
"adcr", "add", "adda", "addb", "addd", "adde", "addf", "addr",
|
||||
"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", "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[] = {
|
||||
{ M680X_GRP_INVALID, "<invalid>" },
|
||||
{ M680X_GRP_JUMP, "jump" },
|
||||
{ M680X_GRP_CALL, "call" },
|
||||
{ M680X_GRP_RET, "return" },
|
||||
{ M680X_GRP_INT, "interrupt" },
|
||||
{ M680X_GRP_IRET, "interrupt_return" },
|
||||
{ M680X_GRP_PRIV, "privileged" },
|
||||
{ M680X_GRP_BRAREL, "branch_relative" },
|
||||
};
|
||||
#endif
|
||||
|
||||
static void printRegName(cs_struct *handle, SStream *OS, unsigned int reg)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
SStream_concat0(OS, handle->reg_name((csh)handle, reg));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void printInstructionName(cs_struct *handle, SStream *OS,
|
||||
unsigned int insn)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
SStream_concat0(OS, handle->insn_name((csh)handle, insn));
|
||||
#endif
|
||||
}
|
||||
|
||||
static uint32_t get_unsigned(int32_t value, int byte_size)
|
||||
{
|
||||
switch (byte_size) {
|
||||
case 1:
|
||||
return (uint32_t)(value & 0xff);
|
||||
|
||||
case 2:
|
||||
return (uint32_t)(value & 0xffff);
|
||||
|
||||
default:
|
||||
case 4:
|
||||
return (uint32_t)value;
|
||||
}
|
||||
}
|
||||
|
||||
static void printIncDec(bool isPost, SStream *O, m680x_info *info,
|
||||
cs_m680x_op *op)
|
||||
{
|
||||
static const char s_inc_dec[][3] = { "--", "-", "", "+", "++" };
|
||||
|
||||
if (!op->idx.inc_dec)
|
||||
return;
|
||||
|
||||
if ((!isPost && !(op->idx.flags & M680X_IDX_POST_INC_DEC)) ||
|
||||
(isPost && (op->idx.flags & M680X_IDX_POST_INC_DEC))) {
|
||||
const char *prePostfix = "";
|
||||
|
||||
if (info->cpu_type == M680X_CPU_TYPE_CPU12)
|
||||
prePostfix = (op->idx.inc_dec < 0) ? "-" : "+";
|
||||
else if (op->idx.inc_dec >= -2 && (op->idx.inc_dec <= 2)) {
|
||||
prePostfix = (char *)s_inc_dec[op->idx.inc_dec + 2];
|
||||
}
|
||||
|
||||
SStream_concat0(O, prePostfix);
|
||||
}
|
||||
}
|
||||
|
||||
static void printOperand(MCInst *MI, SStream *O, m680x_info *info,
|
||||
cs_m680x_op *op)
|
||||
{
|
||||
switch (op->type) {
|
||||
case M680X_OP_REGISTER:
|
||||
printRegName(MI->csh, O, op->reg);
|
||||
break;
|
||||
|
||||
case M680X_OP_CONSTANT:
|
||||
SStream_concat(O, "%u", op->const_val);
|
||||
break;
|
||||
|
||||
case M680X_OP_IMMEDIATE:
|
||||
if (MI->csh->imm_unsigned)
|
||||
SStream_concat(O, "#%u",
|
||||
get_unsigned(op->imm, op->size));
|
||||
else
|
||||
SStream_concat(O, "#%d", op->imm);
|
||||
|
||||
break;
|
||||
|
||||
case M680X_OP_INDEXED:
|
||||
if (op->idx.flags & M680X_IDX_INDIRECT)
|
||||
SStream_concat0(O, "[");
|
||||
|
||||
if (op->idx.offset_reg != M680X_REG_INVALID)
|
||||
printRegName(MI->csh, O, op->idx.offset_reg);
|
||||
else if (op->idx.offset_bits > 0) {
|
||||
if (op->idx.base_reg == M680X_REG_PC)
|
||||
SStream_concat(O, "$%04x", op->idx.offset_addr);
|
||||
else
|
||||
SStream_concat(O, "%d", op->idx.offset);
|
||||
} else if (op->idx.inc_dec != 0 &&
|
||||
info->cpu_type == M680X_CPU_TYPE_CPU12)
|
||||
SStream_concat(O, "%d", abs(op->idx.inc_dec));
|
||||
|
||||
if (!(op->idx.flags & M680X_IDX_NO_COMMA))
|
||||
SStream_concat(O, ", ");
|
||||
|
||||
printIncDec(false, O, info, op);
|
||||
|
||||
printRegName(MI->csh, O, op->idx.base_reg);
|
||||
|
||||
if (op->idx.base_reg == M680X_REG_PC &&
|
||||
(op->idx.offset_bits > 0))
|
||||
SStream_concat(O, "r");
|
||||
|
||||
printIncDec(true, O, info, op);
|
||||
|
||||
if (op->idx.flags & M680X_IDX_INDIRECT)
|
||||
SStream_concat(O, "]");
|
||||
|
||||
break;
|
||||
|
||||
case M680X_OP_RELATIVE:
|
||||
SStream_concat(O, "$%04x", op->rel.address);
|
||||
break;
|
||||
|
||||
case M680X_OP_DIRECT:
|
||||
SStream_concat(O, "$%02x", op->direct_addr);
|
||||
break;
|
||||
|
||||
case M680X_OP_EXTENDED:
|
||||
if (op->ext.indirect)
|
||||
SStream_concat(O, "[$%04x]", op->ext.address);
|
||||
else {
|
||||
if (op->ext.address < 256) {
|
||||
SStream_concat(O, ">$%04x", op->ext.address);
|
||||
} else {
|
||||
SStream_concat(O, "$%04x", op->ext.address);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
SStream_concat0(O, "<invalid_operand>");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static const char *getDelimiter(m680x_info *info, cs_m680x *m680x)
|
||||
{
|
||||
bool indexed = false;
|
||||
int count = 0;
|
||||
int i;
|
||||
|
||||
if (info->insn == M680X_INS_TFM)
|
||||
return ", ";
|
||||
|
||||
if (m680x->op_count > 1) {
|
||||
for (i = 0; i < m680x->op_count; ++i) {
|
||||
if (m680x->operands[i].type == M680X_OP_INDEXED)
|
||||
indexed = true;
|
||||
|
||||
if (m680x->operands[i].type != M680X_OP_REGISTER)
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return (indexed && (count >= 1)) ? "; " : ", ";
|
||||
};
|
||||
|
||||
void M680X_printInst(MCInst *MI, SStream *O, void *PrinterInfo)
|
||||
{
|
||||
m680x_info *info = (m680x_info *)PrinterInfo;
|
||||
cs_m680x *m680x = &info->m680x;
|
||||
cs_detail *detail = MI->flat_insn->detail;
|
||||
int suppress_operands = 0;
|
||||
const char *delimiter = getDelimiter(info, m680x);
|
||||
int i;
|
||||
|
||||
if (detail != NULL)
|
||||
memcpy(&detail->m680x, m680x, sizeof(cs_m680x));
|
||||
|
||||
if (info->insn == M680X_INS_INVLD || info->insn == M680X_INS_ILLGL) {
|
||||
if (m680x->op_count)
|
||||
SStream_concat(O, "fcb $%02x", m680x->operands[0].imm);
|
||||
else
|
||||
SStream_concat0(O, "fcb $<unknown>");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
printInstructionName(MI->csh, O, info->insn);
|
||||
SStream_concat0(O, " ");
|
||||
|
||||
if ((m680x->flags & M680X_FIRST_OP_IN_MNEM) != 0)
|
||||
suppress_operands++;
|
||||
|
||||
if ((m680x->flags & M680X_SECOND_OP_IN_MNEM) != 0)
|
||||
suppress_operands++;
|
||||
|
||||
for (i = 0; i < m680x->op_count; ++i) {
|
||||
if (i >= suppress_operands) {
|
||||
printOperand(MI, O, info, &m680x->operands[i]);
|
||||
|
||||
if ((i + 1) != m680x->op_count)
|
||||
SStream_concat0(O, delimiter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char *M680X_reg_name(csh handle, unsigned int reg)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
|
||||
if (reg >= ARR_SIZE(s_reg_names))
|
||||
return NULL;
|
||||
|
||||
return s_reg_names[(int)reg];
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *M680X_insn_name(csh handle, unsigned int id)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
|
||||
if (id >= ARR_SIZE(s_instruction_names))
|
||||
return NULL;
|
||||
else
|
||||
return s_instruction_names[(int)id];
|
||||
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *M680X_group_name(csh handle, unsigned int id)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
return id2name(s_group_names, ARR_SIZE(s_group_names), id);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
cs_err M680X_instprinter_init(cs_struct *ud)
|
||||
{
|
||||
#ifndef CAPSTONE_DIET
|
||||
|
||||
if (M680X_REG_ENDING != ARR_SIZE(s_reg_names)) {
|
||||
CS_ASSERT(M680X_REG_ENDING == ARR_SIZE(s_reg_names));
|
||||
return CS_ERR_MODE;
|
||||
}
|
||||
|
||||
if (M680X_INS_ENDING != ARR_SIZE(s_instruction_names)) {
|
||||
CS_ASSERT(M680X_INS_ENDING == ARR_SIZE(s_instruction_names));
|
||||
return CS_ERR_MODE;
|
||||
}
|
||||
|
||||
if (M680X_GRP_ENDING != ARR_SIZE(s_group_names)) {
|
||||
CS_ASSERT(M680X_GRP_ENDING == ARR_SIZE(s_group_names));
|
||||
return CS_ERR_MODE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return CS_ERR_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
|
||||
|
||||
#ifndef CS_M680XINSTPRINTER_H
|
||||
#define CS_M680XINSTPRINTER_H
|
||||
|
||||
#include "capstone/capstone.h"
|
||||
#include "../../MCRegisterInfo.h"
|
||||
#include "../../MCInst.h"
|
||||
|
||||
struct SStream;
|
||||
|
||||
void M680X_init(MCRegisterInfo *MRI);
|
||||
|
||||
void M680X_printInst(MCInst *MI, struct SStream *O, void *Info);
|
||||
const char *M680X_reg_name(csh handle, unsigned int reg);
|
||||
const char *M680X_insn_name(csh handle, unsigned int id);
|
||||
const char *M680X_group_name(csh handle, unsigned int id);
|
||||
void M680X_post_printer(csh handle, cs_insn *flat_insn, char *insn_asm,
|
||||
MCInst *mci);
|
||||
|
||||
#endif
|
||||
+78
@@ -0,0 +1,78 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* M680X Backend by Wolfgang Schwotzer <wolfgang.schwotzer@gmx.net> 2017 */
|
||||
|
||||
#ifdef CAPSTONE_HAS_M680X
|
||||
|
||||
#include "../../utils.h"
|
||||
#include "../../MCRegisterInfo.h"
|
||||
#include "M680XDisassembler.h"
|
||||
#include "M680XDisassemblerInternals.h"
|
||||
#include "M680XInstPrinter.h"
|
||||
#include "M680XModule.h"
|
||||
|
||||
cs_err M680X_global_init(cs_struct *ud)
|
||||
{
|
||||
m680x_info *info;
|
||||
cs_err errcode;
|
||||
|
||||
/* Do some validation checks */
|
||||
errcode = M680X_disassembler_init(ud);
|
||||
|
||||
if (errcode != CS_ERR_OK)
|
||||
return errcode;
|
||||
|
||||
errcode = M680X_instprinter_init(ud);
|
||||
|
||||
if (errcode != CS_ERR_OK)
|
||||
return errcode;
|
||||
|
||||
// verify if requested mode is valid
|
||||
if (ud->mode &
|
||||
~(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_HCS12X)) {
|
||||
// At least one mode is not supported by M680X
|
||||
return CS_ERR_MODE;
|
||||
}
|
||||
|
||||
if (!(ud->mode &
|
||||
(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_HCS12X))) {
|
||||
// At least the cpu type has to be selected. No default.
|
||||
return CS_ERR_MODE;
|
||||
}
|
||||
|
||||
info = cs_mem_malloc(sizeof(m680x_info));
|
||||
|
||||
if (!info)
|
||||
return CS_ERR_MEM;
|
||||
|
||||
ud->printer = M680X_printInst;
|
||||
ud->printer_info = info;
|
||||
ud->getinsn_info = NULL;
|
||||
ud->disasm = M680X_getInstruction;
|
||||
ud->reg_name = M680X_reg_name;
|
||||
ud->insn_id = M680X_get_insn_id;
|
||||
ud->insn_name = M680X_insn_name;
|
||||
ud->group_name = M680X_group_name;
|
||||
ud->skipdata_size = 1;
|
||||
ud->post_printer = NULL;
|
||||
#ifndef CAPSTONE_DIET
|
||||
ud->reg_access = M680X_reg_access;
|
||||
#endif
|
||||
|
||||
return CS_ERR_OK;
|
||||
}
|
||||
|
||||
cs_err M680X_option(cs_struct *handle, cs_opt_type type, size_t value)
|
||||
{
|
||||
//TODO
|
||||
return CS_ERR_OK;
|
||||
}
|
||||
|
||||
#endif
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/* Capstone Disassembly Engine */
|
||||
/* By Travis Finkenauer <tmfinken@gmail.com>, 2018 */
|
||||
|
||||
#ifndef CS_M680X_MODULE_H
|
||||
#define CS_M680X_MODULE_H
|
||||
|
||||
#include "../../utils.h"
|
||||
|
||||
cs_err M680X_global_init(cs_struct *ud);
|
||||
cs_err M680X_option(cs_struct *handle, cs_opt_type type, size_t value);
|
||||
|
||||
#endif
|
||||
+335
@@ -0,0 +1,335 @@
|
||||
|
||||
// CPU12 instructions on PAGE1
|
||||
static const inst_page1 g_cpu12_inst_page1_table[256] = {
|
||||
// 0x0x
|
||||
{ M680X_INS_BGND, inh_hid, inh_hid },
|
||||
{ M680X_INS_MEM, inh_hid, inh_hid },
|
||||
{ M680X_INS_INY, inh_hid, inh_hid },
|
||||
{ M680X_INS_DEY, inh_hid, inh_hid },
|
||||
{ M680X_INS_DBEQ, loop_hid, inh_hid }, // or DBNE/IBEQ/IBNE/TBEQ/TBNE
|
||||
{ M680X_INS_JMP, idx12_hid, inh_hid },
|
||||
{ M680X_INS_JMP, ext_hid, inh_hid },
|
||||
{ M680X_INS_BSR, rel8_hid, inh_hid },
|
||||
{ M680X_INS_INX, inh_hid, inh_hid },
|
||||
{ M680X_INS_DEX, inh_hid, inh_hid },
|
||||
{ M680X_INS_RTC, inh_hid, inh_hid },
|
||||
{ M680X_INS_RTI, inh_hid, inh_hid },
|
||||
{ M680X_INS_BSET, idx12_hid, imm8_hid },
|
||||
{ M680X_INS_BCLR, idx12_hid, imm8_hid },
|
||||
{ M680X_INS_BRSET, idx12_hid, imm8rel_hid },
|
||||
{ M680X_INS_BRCLR, idx12_hid, imm8rel_hid },
|
||||
// 0x1x
|
||||
{ M680X_INS_ANDCC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_EDIV, inh_hid, inh_hid },
|
||||
{ M680X_INS_MUL, inh_hid, inh_hid },
|
||||
{ M680X_INS_EMUL, inh_hid, inh_hid },
|
||||
{ M680X_INS_ORCC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idx12_hid, inh_hid },
|
||||
{ M680X_INS_JSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_JSR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LEAY, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LEAX, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LEAS, idx12_hid, inh_hid },
|
||||
{ M680X_INS_BSET, ext_hid, imm8_hid },
|
||||
{ M680X_INS_BCLR, ext_hid, imm8_hid },
|
||||
{ M680X_INS_BRSET, ext_hid, imm8rel_hid },
|
||||
{ M680X_INS_BRCLR, ext_hid, imm8rel_hid },
|
||||
// 0x2x, relative branch instructions
|
||||
{ M680X_INS_BRA, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BRN, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BHI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BNE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BEQ, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BPL, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLE, rel8_hid, inh_hid },
|
||||
// 0x3x
|
||||
{ M680X_INS_PULX, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULY, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULA, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULB, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHX, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHY, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHA, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHB, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULC, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHC, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULD, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHD, inh_hid, inh_hid },
|
||||
{ M680X_INS_WAVR, inh_hid, inh_hid },
|
||||
{ M680X_INS_RTS, inh_hid, inh_hid },
|
||||
{ M680X_INS_WAI, inh_hid, inh_hid },
|
||||
{ M680X_INS_SWI, inh_hid, inh_hid },
|
||||
// 0x4x
|
||||
{ M680X_INS_NEGA, inh_hid, inh_hid },
|
||||
{ M680X_INS_COMA, inh_hid, inh_hid },
|
||||
{ M680X_INS_INCA, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_RORA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRD, inh_hid, inh_hid },
|
||||
{ M680X_INS_CALL, ext_hid, index_hid },
|
||||
{ M680X_INS_CALL, idx12_hid, index_hid },
|
||||
{ M680X_INS_BSET, dir_hid, imm8_hid },
|
||||
{ M680X_INS_BCLR, dir_hid, imm8_hid },
|
||||
{ M680X_INS_BRSET, dir_hid, imm8rel_hid },
|
||||
{ M680X_INS_BRCLR, dir_hid, imm8rel_hid },
|
||||
// 0x5x
|
||||
{ M680X_INS_NEGB, inh_hid, inh_hid },
|
||||
{ M680X_INS_COMB, inh_hid, inh_hid },
|
||||
{ M680X_INS_INCB, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECB, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_RORB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASLD, inh_hid, inh_hid },
|
||||
{ M680X_INS_STAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_STAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_STD, dir_hid, inh_hid },
|
||||
{ M680X_INS_STY, dir_hid, inh_hid },
|
||||
{ M680X_INS_STX, dir_hid, inh_hid },
|
||||
{ M680X_INS_STS, dir_hid, inh_hid },
|
||||
// 0x6x
|
||||
{ M680X_INS_NEG, idx12_hid, inh_hid },
|
||||
{ M680X_INS_COM, idx12_hid, inh_hid },
|
||||
{ M680X_INS_INC, idx12_hid, inh_hid },
|
||||
{ M680X_INS_DEC, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LSR, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ROL, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ROR, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ASR, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ASL, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CLR, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STAA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STAB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STD, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STY, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STX, idx12_hid, inh_hid },
|
||||
{ M680X_INS_STS, idx12_hid, inh_hid },
|
||||
// 0x7x
|
||||
{ M680X_INS_NEG, ext_hid, inh_hid },
|
||||
{ M680X_INS_COM, ext_hid, inh_hid },
|
||||
{ M680X_INS_INC, ext_hid, inh_hid },
|
||||
{ M680X_INS_DEC, ext_hid, inh_hid },
|
||||
{ M680X_INS_LSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ROL, ext_hid, inh_hid },
|
||||
{ M680X_INS_ROR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ASR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ASL, ext_hid, inh_hid },
|
||||
{ M680X_INS_CLR, ext_hid, inh_hid },
|
||||
{ M680X_INS_STAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_STAB, ext_hid, inh_hid },
|
||||
{ M680X_INS_STD, ext_hid, inh_hid },
|
||||
{ M680X_INS_STY, ext_hid, inh_hid },
|
||||
{ M680X_INS_STX, ext_hid, inh_hid },
|
||||
{ M680X_INS_STS, ext_hid, inh_hid },
|
||||
// 0x8x
|
||||
{ M680X_INS_SUBA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CLRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_EORA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CPD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_CPY, imm16_hid, inh_hid },
|
||||
{ M680X_INS_CPX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_CPS, imm16_hid, inh_hid },
|
||||
// 0x9x
|
||||
{ M680X_INS_SUBA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, dir_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITA, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_TSTA, inh_hid, inh_hid },
|
||||
{ M680X_INS_EORA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPD, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPY, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPX, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPS, dir_hid, inh_hid },
|
||||
// 0xAx
|
||||
{ M680X_INS_SUBA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_BITA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_NOP, inh_hid, inh_hid },
|
||||
{ M680X_INS_EORA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CPD, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CPY, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CPX, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CPS, idx12_hid, inh_hid },
|
||||
// 0xBx
|
||||
{ M680X_INS_SUBA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, ext_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITA, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_TFR, rr12_hid, inh_hid }, // or EXG
|
||||
{ M680X_INS_EORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPD, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPY, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPX, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPS, ext_hid, inh_hid },
|
||||
// 0xCx
|
||||
{ M680X_INS_SUBB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CLRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_EORB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_LDY, imm16_hid, inh_hid },
|
||||
{ M680X_INS_LDX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_LDS, imm16_hid, inh_hid },
|
||||
// 0xDx
|
||||
{ M680X_INS_SUBB, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, dir_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITB, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_TSTB, inh_hid, inh_hid },
|
||||
{ M680X_INS_EORB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDD, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDY, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDX, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDS, dir_hid, inh_hid },
|
||||
// 0xEx
|
||||
{ M680X_INS_SUBB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_BITB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_TST, idx12_hid, inh_hid },
|
||||
{ M680X_INS_EORB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDD, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDY, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idx12_hid, inh_hid },
|
||||
{ M680X_INS_LDS, idx12_hid, inh_hid },
|
||||
// 0xFx
|
||||
{ M680X_INS_SUBA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, ext_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITA, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_TST, ext_hid, inh_hid },
|
||||
{ M680X_INS_EORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDD, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDY, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDX, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDS, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// CPU12 instructions on PAGE2
|
||||
static const inst_pageX g_cpu12_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, imm8_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 },
|
||||
{ 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 },
|
||||
};
|
||||
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
|
||||
// Additional instructions only supported on HCS08
|
||||
static const inst_pageX g_hcs08_inst_overlay_table[] = {
|
||||
{ 0x32, M680X_INS_LDHX, ext_hid, inh_hid },
|
||||
{ 0x3e, M680X_INS_CPHX, ext_hid, inh_hid },
|
||||
{ 0x82, M680X_INS_BGND, inh_hid, inh_hid },
|
||||
{ 0x96, M680X_INS_STHX, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// HCS08 PAGE2 instructions (prefix 0x9E)
|
||||
static const inst_pageX g_hcs08_inst_page2_table[] = {
|
||||
{ 0x60, M680X_INS_NEG, idxS_hid, inh_hid },
|
||||
{ 0x61, M680X_INS_CBEQ, idxS_hid,rel8_hid },
|
||||
{ 0x63, M680X_INS_COM, idxS_hid, inh_hid },
|
||||
{ 0x64, M680X_INS_LSR, idxS_hid, inh_hid },
|
||||
{ 0x66, M680X_INS_ROR, idxS_hid, inh_hid },
|
||||
{ 0x67, M680X_INS_ASR, idxS_hid, inh_hid },
|
||||
{ 0x68, M680X_INS_LSL, idxS_hid, inh_hid },
|
||||
{ 0x69, M680X_INS_ROL, idxS_hid, inh_hid },
|
||||
{ 0x6a, M680X_INS_DEC, idxS_hid, inh_hid },
|
||||
{ 0x6b, M680X_INS_DBNZ, idxS_hid,rel8_hid },
|
||||
{ 0x6c, M680X_INS_INC, idxS_hid, inh_hid },
|
||||
{ 0x6d, M680X_INS_TST, idxS_hid, inh_hid },
|
||||
{ 0x6f, M680X_INS_CLR, idxS_hid, inh_hid },
|
||||
{ 0xae, M680X_INS_LDHX, idxX0_hid, inh_hid },
|
||||
{ 0xbe, M680X_INS_LDHX, idxX16_hid, inh_hid },
|
||||
{ 0xce, M680X_INS_LDHX, idxX_hid, inh_hid },
|
||||
{ 0xd0, M680X_INS_SUB, idxS16_hid, inh_hid },
|
||||
{ 0xd1, M680X_INS_CMP, idxS16_hid, inh_hid },
|
||||
{ 0xd2, M680X_INS_SBC, idxS16_hid, inh_hid },
|
||||
{ 0xd3, M680X_INS_CPX, idxS16_hid, inh_hid },
|
||||
{ 0xd4, M680X_INS_AND, idxS16_hid, inh_hid },
|
||||
{ 0xd5, M680X_INS_BIT, idxS16_hid, inh_hid },
|
||||
{ 0xd6, M680X_INS_LDA, idxS16_hid, inh_hid },
|
||||
{ 0xd7, M680X_INS_STA, idxS16_hid, inh_hid },
|
||||
{ 0xd8, M680X_INS_EOR, idxS16_hid, inh_hid },
|
||||
{ 0xd9, M680X_INS_ADC, idxS16_hid, inh_hid },
|
||||
{ 0xda, M680X_INS_ORA, idxS16_hid, inh_hid },
|
||||
{ 0xdb, M680X_INS_ADD, idxS16_hid, inh_hid },
|
||||
{ 0xde, M680X_INS_LDX, idxS16_hid, inh_hid },
|
||||
{ 0xdf, M680X_INS_STX, idxS16_hid, inh_hid },
|
||||
{ 0xe0, M680X_INS_SUB, idxS_hid, inh_hid },
|
||||
{ 0xe1, M680X_INS_CMP, idxS_hid, inh_hid },
|
||||
{ 0xe2, M680X_INS_SBC, idxS_hid, inh_hid },
|
||||
{ 0xe3, M680X_INS_CPX, idxS_hid, inh_hid },
|
||||
{ 0xe4, M680X_INS_AND, idxS_hid, inh_hid },
|
||||
{ 0xe5, M680X_INS_BIT, idxS_hid, inh_hid },
|
||||
{ 0xe6, M680X_INS_LDA, idxS_hid, inh_hid },
|
||||
{ 0xe7, M680X_INS_STA, idxS_hid, inh_hid },
|
||||
{ 0xe8, M680X_INS_EOR, idxS_hid, inh_hid },
|
||||
{ 0xe9, M680X_INS_ADC, idxS_hid, inh_hid },
|
||||
{ 0xea, M680X_INS_ORA, idxS_hid, inh_hid },
|
||||
{ 0xeb, M680X_INS_ADD, idxS_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDX, idxS_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STX, idxS_hid, inh_hid },
|
||||
{ 0xf3, M680X_INS_CPHX, idxS_hid, inh_hid },
|
||||
{ 0xfe, M680X_INS_LDHX, idxS_hid, inh_hid },
|
||||
{ 0xff, M680X_INS_STHX, idxS_hid, inh_hid },
|
||||
};
|
||||
|
||||
+271
@@ -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 },
|
||||
};
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
|
||||
// Additional instructions only supported on HD6301/3
|
||||
static const inst_pageX g_hd6301_inst_overlay_table[] = {
|
||||
{ 0x18, M680X_INS_XGDX, inh_hid, inh_hid },
|
||||
{ 0x1a, M680X_INS_SLP, inh_hid, inh_hid },
|
||||
{ 0x61, M680X_INS_AIM, imm8_hid, idxX_hid },
|
||||
{ 0x62, M680X_INS_OIM, imm8_hid, idxX_hid },
|
||||
{ 0x65, M680X_INS_EIM, imm8_hid, idxX_hid },
|
||||
{ 0x6B, M680X_INS_TIM, imm8_hid, idxX_hid },
|
||||
{ 0x71, M680X_INS_AIM, imm8_hid, dir_hid },
|
||||
{ 0x72, M680X_INS_OIM, imm8_hid, dir_hid },
|
||||
{ 0x75, M680X_INS_EIM, imm8_hid, dir_hid },
|
||||
{ 0x7B, M680X_INS_TIM, imm8_hid, dir_hid },
|
||||
};
|
||||
|
||||
+259
@@ -0,0 +1,259 @@
|
||||
|
||||
// The following array has to be sorted by increasing
|
||||
// opcodes. Otherwise the binary_search will fail.
|
||||
//
|
||||
// Additional instructions only supported on HD6309 PAGE1
|
||||
static const inst_pageX g_hd6309_inst_overlay_table[] = {
|
||||
{ 0x01, M680X_INS_OIM, imm8_hid, dir_hid },
|
||||
{ 0x02, M680X_INS_AIM, imm8_hid, dir_hid },
|
||||
{ 0x05, M680X_INS_EIM, imm8_hid, dir_hid },
|
||||
{ 0x0B, M680X_INS_TIM, imm8_hid, dir_hid },
|
||||
{ 0x14, M680X_INS_SEXW, inh_hid, inh_hid },
|
||||
{ 0x61, M680X_INS_OIM, imm8_hid, idx09_hid },
|
||||
{ 0x62, M680X_INS_AIM, imm8_hid, idx09_hid },
|
||||
{ 0x65, M680X_INS_EIM, imm8_hid, idx09_hid },
|
||||
{ 0x6B, M680X_INS_TIM, imm8_hid, idx09_hid },
|
||||
{ 0x71, M680X_INS_OIM, imm8_hid, ext_hid },
|
||||
{ 0x72, M680X_INS_AIM, imm8_hid, ext_hid },
|
||||
{ 0x75, M680X_INS_EIM, imm8_hid, ext_hid },
|
||||
{ 0x7B, M680X_INS_TIM, imm8_hid, ext_hid },
|
||||
{ 0xCD, M680X_INS_LDQ, imm32_hid, inh_hid },
|
||||
};
|
||||
|
||||
// The following array has to be sorted by increasing
|
||||
// opcodes. Otherwise the binary_search will fail.
|
||||
//
|
||||
// HD6309 PAGE2 instructions (with prefix 0x10)
|
||||
static const inst_pageX g_hd6309_inst_page2_table[] = {
|
||||
// 0x2x, relative long branch instructions
|
||||
{ 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 },
|
||||
// 0x3x
|
||||
{ 0x30, M680X_INS_ADDR, rr09_hid, inh_hid },
|
||||
{ 0x31, M680X_INS_ADCR, rr09_hid, inh_hid },
|
||||
{ 0x32, M680X_INS_SUBR, rr09_hid, inh_hid },
|
||||
{ 0x33, M680X_INS_SBCR, rr09_hid, inh_hid },
|
||||
{ 0x34, M680X_INS_ANDR, rr09_hid, inh_hid },
|
||||
{ 0x35, M680X_INS_ORR, rr09_hid, inh_hid },
|
||||
{ 0x36, M680X_INS_EORR, rr09_hid, inh_hid },
|
||||
{ 0x37, M680X_INS_CMPR, rr09_hid, inh_hid },
|
||||
{ 0x38, M680X_INS_PSHSW, inh_hid, inh_hid },
|
||||
{ 0x39, M680X_INS_PULSW, inh_hid, inh_hid },
|
||||
{ 0x3a, M680X_INS_PSHUW, inh_hid, inh_hid },
|
||||
{ 0x3b, M680X_INS_PULUW, inh_hid, inh_hid },
|
||||
{ 0x3f, M680X_INS_SWI2, inh_hid, inh_hid },
|
||||
// 0x4x, Register D instructions
|
||||
{ 0x40, M680X_INS_NEGD, inh_hid, inh_hid },
|
||||
{ 0x43, M680X_INS_COMD, inh_hid, inh_hid },
|
||||
{ 0x44, M680X_INS_LSRD, inh_hid, inh_hid },
|
||||
{ 0x46, M680X_INS_RORD, inh_hid, inh_hid },
|
||||
{ 0x47, M680X_INS_ASRD, inh_hid, inh_hid },
|
||||
{ 0x48, M680X_INS_LSLD, inh_hid, inh_hid },
|
||||
{ 0x49, M680X_INS_ROLD, inh_hid, inh_hid },
|
||||
{ 0x4a, M680X_INS_DECD, inh_hid, inh_hid },
|
||||
{ 0x4c, M680X_INS_INCD, inh_hid, inh_hid },
|
||||
{ 0x4d, M680X_INS_TSTD, inh_hid, inh_hid },
|
||||
{ 0x4f, M680X_INS_CLRD, inh_hid, inh_hid },
|
||||
// 0x5x, Register W instructions
|
||||
{ 0x53, M680X_INS_COMW, inh_hid, inh_hid },
|
||||
{ 0x54, M680X_INS_LSRW, inh_hid, inh_hid },
|
||||
{ 0x56, M680X_INS_RORW, inh_hid, inh_hid },
|
||||
{ 0x59, M680X_INS_ROLW, inh_hid, inh_hid },
|
||||
{ 0x5a, M680X_INS_DECW, inh_hid, inh_hid },
|
||||
{ 0x5c, M680X_INS_INCW, inh_hid, inh_hid },
|
||||
{ 0x5d, M680X_INS_TSTW, inh_hid, inh_hid },
|
||||
{ 0x5f, M680X_INS_CLRW, inh_hid, inh_hid },
|
||||
// 0x8x, immediate instructionY with register D,W,Y
|
||||
{ 0x80, M680X_INS_SUBW, imm16_hid, inh_hid },
|
||||
{ 0x81, M680X_INS_CMPW, imm16_hid, inh_hid },
|
||||
{ 0x82, M680X_INS_SBCD, imm16_hid, inh_hid },
|
||||
{ 0x83, M680X_INS_CMPD, imm16_hid, inh_hid },
|
||||
{ 0x84, M680X_INS_ANDD, imm16_hid, inh_hid },
|
||||
{ 0x85, M680X_INS_BITD, imm16_hid, inh_hid },
|
||||
{ 0x86, M680X_INS_LDW, imm16_hid, inh_hid },
|
||||
{ 0x88, M680X_INS_EORD, imm16_hid, inh_hid },
|
||||
{ 0x89, M680X_INS_ADCD, imm16_hid, inh_hid },
|
||||
{ 0x8a, M680X_INS_ORD, imm16_hid, inh_hid },
|
||||
{ 0x8b, M680X_INS_ADDW, imm16_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CMPY, imm16_hid, inh_hid },
|
||||
{ 0x8e, M680X_INS_LDY, imm16_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register D,W,Y
|
||||
{ 0x90, M680X_INS_SUBW, dir_hid, inh_hid },
|
||||
{ 0x91, M680X_INS_CMPW, dir_hid, inh_hid },
|
||||
{ 0x92, M680X_INS_SBCD, dir_hid, inh_hid },
|
||||
{ 0x93, M680X_INS_CMPD, dir_hid, inh_hid },
|
||||
{ 0x94, M680X_INS_ANDD, dir_hid, inh_hid },
|
||||
{ 0x95, M680X_INS_BITD, dir_hid, inh_hid },
|
||||
{ 0x96, M680X_INS_LDW, dir_hid, inh_hid },
|
||||
{ 0x97, M680X_INS_STW, dir_hid, inh_hid },
|
||||
{ 0x98, M680X_INS_EORD, dir_hid, inh_hid },
|
||||
{ 0x99, M680X_INS_ADCD, dir_hid, inh_hid },
|
||||
{ 0x9a, M680X_INS_ORD, dir_hid, inh_hid },
|
||||
{ 0x9b, M680X_INS_ADDW, dir_hid, inh_hid },
|
||||
{ 0x9c, M680X_INS_CMPY, dir_hid, inh_hid },
|
||||
{ 0x9e, M680X_INS_LDY, dir_hid, inh_hid },
|
||||
{ 0x9f, M680X_INS_STY, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with register D,W,Y
|
||||
{ 0xa0, M680X_INS_SUBW, idx09_hid, inh_hid },
|
||||
{ 0xa1, M680X_INS_CMPW, idx09_hid, inh_hid },
|
||||
{ 0xa2, M680X_INS_SBCD, idx09_hid, inh_hid },
|
||||
{ 0xa3, M680X_INS_CMPD, idx09_hid, inh_hid },
|
||||
{ 0xa4, M680X_INS_ANDD, idx09_hid, inh_hid },
|
||||
{ 0xa5, M680X_INS_BITD, idx09_hid, inh_hid },
|
||||
{ 0xa6, M680X_INS_LDW, idx09_hid, inh_hid },
|
||||
{ 0xa7, M680X_INS_STW, idx09_hid, inh_hid },
|
||||
{ 0xa8, M680X_INS_EORD, idx09_hid, inh_hid },
|
||||
{ 0xa9, M680X_INS_ADCD, idx09_hid, inh_hid },
|
||||
{ 0xaa, M680X_INS_ORD, idx09_hid, inh_hid },
|
||||
{ 0xab, M680X_INS_ADDW, idx09_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CMPY, idx09_hid, inh_hid },
|
||||
{ 0xae, M680X_INS_LDY, idx09_hid, inh_hid },
|
||||
{ 0xaf, M680X_INS_STY, idx09_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register D,W,Y
|
||||
{ 0xb0, M680X_INS_SUBW, ext_hid, inh_hid },
|
||||
{ 0xb1, M680X_INS_CMPW, ext_hid, inh_hid },
|
||||
{ 0xb2, M680X_INS_SBCD, ext_hid, inh_hid },
|
||||
{ 0xb3, M680X_INS_CMPD, ext_hid, inh_hid },
|
||||
{ 0xb4, M680X_INS_ANDD, ext_hid, inh_hid },
|
||||
{ 0xb5, M680X_INS_BITD, ext_hid, inh_hid },
|
||||
{ 0xb6, M680X_INS_LDW, ext_hid, inh_hid },
|
||||
{ 0xb7, M680X_INS_STW, ext_hid, inh_hid },
|
||||
{ 0xb8, M680X_INS_EORD, ext_hid, inh_hid },
|
||||
{ 0xb9, M680X_INS_ADCD, ext_hid, inh_hid },
|
||||
{ 0xba, M680X_INS_ORD, ext_hid, inh_hid },
|
||||
{ 0xbb, M680X_INS_ADDW, ext_hid, inh_hid },
|
||||
{ 0xbc, M680X_INS_CMPY, ext_hid, inh_hid },
|
||||
{ 0xbe, M680X_INS_LDY, ext_hid, inh_hid },
|
||||
{ 0xbf, M680X_INS_STY, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register S
|
||||
{ 0xce, M680X_INS_LDS, imm16_hid, inh_hid },
|
||||
// 0xDx, direct instructions with register S,Q
|
||||
{ 0xdc, M680X_INS_LDQ, dir_hid, inh_hid },
|
||||
{ 0xdd, M680X_INS_STQ, dir_hid, inh_hid },
|
||||
{ 0xde, M680X_INS_LDS, dir_hid, inh_hid },
|
||||
{ 0xdf, M680X_INS_STS, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instructions with register S,Q
|
||||
{ 0xec, M680X_INS_LDQ, idx09_hid, inh_hid },
|
||||
{ 0xed, M680X_INS_STQ, idx09_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDS, idx09_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STS, idx09_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register S,Q
|
||||
{ 0xfc, M680X_INS_LDQ, ext_hid, inh_hid },
|
||||
{ 0xfd, M680X_INS_STQ, ext_hid, inh_hid },
|
||||
{ 0xfe, M680X_INS_LDS, ext_hid, inh_hid },
|
||||
{ 0xff, M680X_INS_STS, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// The following array has to be sorted by increasing
|
||||
// opcodes. Otherwise the binary_search will fail.
|
||||
//
|
||||
// HD6309 PAGE3 instructions (with prefix 0x11)
|
||||
static const inst_pageX g_hd6309_inst_page3_table[] = {
|
||||
{ 0x30, M680X_INS_BAND, bitmv_hid, inh_hid },
|
||||
{ 0x31, M680X_INS_BIAND, bitmv_hid, inh_hid },
|
||||
{ 0x32, M680X_INS_BOR, bitmv_hid, inh_hid },
|
||||
{ 0x33, M680X_INS_BIOR, bitmv_hid, inh_hid },
|
||||
{ 0x34, M680X_INS_BEOR, bitmv_hid, inh_hid },
|
||||
{ 0x35, M680X_INS_BIEOR, bitmv_hid, inh_hid },
|
||||
{ 0x36, M680X_INS_LDBT, bitmv_hid, inh_hid },
|
||||
{ 0x37, M680X_INS_STBT, bitmv_hid, inh_hid },
|
||||
{ 0x38, M680X_INS_TFM, tfm_hid, inh_hid },
|
||||
{ 0x39, M680X_INS_TFM, tfm_hid, inh_hid },
|
||||
{ 0x3a, M680X_INS_TFM, tfm_hid, inh_hid },
|
||||
{ 0x3b, M680X_INS_TFM, tfm_hid, inh_hid },
|
||||
{ 0x3c, M680X_INS_BITMD, imm8_hid, inh_hid },
|
||||
{ 0x3d, M680X_INS_LDMD, imm8_hid, inh_hid },
|
||||
{ 0x3f, M680X_INS_SWI3, inh_hid, inh_hid },
|
||||
// 0x4x, Register E instructions
|
||||
{ 0x43, M680X_INS_COME, inh_hid, inh_hid },
|
||||
{ 0x4a, M680X_INS_DECE, inh_hid, inh_hid },
|
||||
{ 0x4c, M680X_INS_INCE, inh_hid, inh_hid },
|
||||
{ 0x4d, M680X_INS_TSTE, inh_hid, inh_hid },
|
||||
{ 0x4f, M680X_INS_CLRE, inh_hid, inh_hid },
|
||||
// 0x5x, Register F instructions
|
||||
{ 0x53, M680X_INS_COMF, inh_hid, inh_hid },
|
||||
{ 0x5a, M680X_INS_DECF, inh_hid, inh_hid },
|
||||
{ 0x5c, M680X_INS_INCF, inh_hid, inh_hid },
|
||||
{ 0x5d, M680X_INS_TSTF, inh_hid, inh_hid },
|
||||
{ 0x5f, M680X_INS_CLRF, inh_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with register U,S,E
|
||||
{ 0x80, M680X_INS_SUBE, imm8_hid, inh_hid },
|
||||
{ 0x81, M680X_INS_CMPE, imm8_hid, inh_hid },
|
||||
{ 0x83, M680X_INS_CMPU, imm16_hid, inh_hid },
|
||||
{ 0x86, M680X_INS_LDE, imm8_hid, inh_hid },
|
||||
{ 0x8b, M680X_INS_ADDE, imm8_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CMPS, imm16_hid, inh_hid },
|
||||
{ 0x8d, M680X_INS_DIVD, imm8_hid, inh_hid },
|
||||
{ 0x8e, M680X_INS_DIVQ, imm16_hid, inh_hid },
|
||||
{ 0x8f, M680X_INS_MULD, imm16_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register U,S,E,Q
|
||||
{ 0x90, M680X_INS_SUBE, dir_hid, inh_hid },
|
||||
{ 0x91, M680X_INS_CMPE, dir_hid, inh_hid },
|
||||
{ 0x93, M680X_INS_CMPU, dir_hid, inh_hid },
|
||||
{ 0x96, M680X_INS_LDE, dir_hid, inh_hid },
|
||||
{ 0x97, M680X_INS_STE, dir_hid, inh_hid },
|
||||
{ 0x9b, M680X_INS_ADDE, dir_hid, inh_hid },
|
||||
{ 0x9c, M680X_INS_CMPS, dir_hid, inh_hid },
|
||||
{ 0x9d, M680X_INS_DIVD, dir_hid, inh_hid },
|
||||
{ 0x9e, M680X_INS_DIVQ, dir_hid, inh_hid },
|
||||
{ 0x9f, M680X_INS_MULD, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with register U,S,D,Q
|
||||
{ 0xa0, M680X_INS_SUBE, idx09_hid, inh_hid },
|
||||
{ 0xa1, M680X_INS_CMPE, idx09_hid, inh_hid },
|
||||
{ 0xa3, M680X_INS_CMPU, idx09_hid, inh_hid },
|
||||
{ 0xa6, M680X_INS_LDE, idx09_hid, inh_hid },
|
||||
{ 0xa7, M680X_INS_STE, idx09_hid, inh_hid },
|
||||
{ 0xab, M680X_INS_ADDE, idx09_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CMPS, idx09_hid, inh_hid },
|
||||
{ 0xad, M680X_INS_DIVD, idx09_hid, inh_hid },
|
||||
{ 0xae, M680X_INS_DIVQ, idx09_hid, inh_hid },
|
||||
{ 0xaf, M680X_INS_MULD, idx09_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register U,S,D,Q
|
||||
{ 0xb0, M680X_INS_SUBE, ext_hid, inh_hid },
|
||||
{ 0xb1, M680X_INS_CMPE, ext_hid, inh_hid },
|
||||
{ 0xb3, M680X_INS_CMPU, ext_hid, inh_hid },
|
||||
{ 0xb6, M680X_INS_LDE, ext_hid, inh_hid },
|
||||
{ 0xb7, M680X_INS_STE, ext_hid, inh_hid },
|
||||
{ 0xbb, M680X_INS_ADDE, ext_hid, inh_hid },
|
||||
{ 0xbc, M680X_INS_CMPS, ext_hid, inh_hid },
|
||||
{ 0xbd, M680X_INS_DIVD, ext_hid, inh_hid },
|
||||
{ 0xbe, M680X_INS_DIVQ, ext_hid, inh_hid },
|
||||
{ 0xbf, M680X_INS_MULD, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register F
|
||||
{ 0xc0, M680X_INS_SUBF, imm8_hid, inh_hid },
|
||||
{ 0xc1, M680X_INS_CMPF, imm8_hid, inh_hid },
|
||||
{ 0xc6, M680X_INS_LDF, imm8_hid, inh_hid },
|
||||
{ 0xcb, M680X_INS_ADDF, imm8_hid, inh_hid },
|
||||
// 0xDx, direct instructions with register F
|
||||
{ 0xd0, M680X_INS_SUBF, dir_hid, inh_hid },
|
||||
{ 0xd1, M680X_INS_CMPF, dir_hid, inh_hid },
|
||||
{ 0xd6, M680X_INS_LDF, dir_hid, inh_hid },
|
||||
{ 0xd7, M680X_INS_STF, dir_hid, inh_hid },
|
||||
{ 0xdb, M680X_INS_ADDF, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instructions with register F
|
||||
{ 0xe0, M680X_INS_SUBF, idx09_hid, inh_hid },
|
||||
{ 0xe1, M680X_INS_CMPF, idx09_hid, inh_hid },
|
||||
{ 0xe6, M680X_INS_LDF, idx09_hid, inh_hid },
|
||||
{ 0xe7, M680X_INS_STF, idx09_hid, inh_hid },
|
||||
{ 0xeb, M680X_INS_ADDF, idx09_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register F
|
||||
{ 0xf0, M680X_INS_SUBF, ext_hid, inh_hid },
|
||||
{ 0xf1, M680X_INS_CMPF, ext_hid, inh_hid },
|
||||
{ 0xf6, M680X_INS_LDF, ext_hid, inh_hid },
|
||||
{ 0xf7, M680X_INS_STF, ext_hid, inh_hid },
|
||||
{ 0xfb, M680X_INS_ADDF, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
+422
@@ -0,0 +1,422 @@
|
||||
|
||||
// These temporary defines keep the following table short and handy.
|
||||
#define NOG M680X_GRP_INVALID
|
||||
#define NOR M680X_REG_INVALID
|
||||
|
||||
static const insn_props g_insn_props[] = {
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // INVLD
|
||||
{ NOG, rmmm, M680X_REG_B, M680X_REG_A, true, false }, // ABA
|
||||
{ NOG, rmmm, M680X_REG_B, M680X_REG_X, false, false }, // ABX
|
||||
{ NOG, rmmm, M680X_REG_B, M680X_REG_Y, false, false }, // ABY
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ADC
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ADCA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ADCB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ADCD
|
||||
{ NOG, rmmm, NOR, NOR, true, false }, // ADCR
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ADD
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ADDA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ADDB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // ADDD
|
||||
{ NOG, mrrr, M680X_REG_E, NOR, true, false }, // ADDE
|
||||
{ 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
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // ASL
|
||||
{ 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
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BCS
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // BEOR
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BEQ
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BGE
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // BGND
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BGT
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BHCC
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BHCS
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BHI
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // BIAND
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // BIEOR
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BIH
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BIL
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // BIOR
|
||||
{ NOG, rrrr, M680X_REG_A, NOR, true, false }, // BIT
|
||||
{ NOG, rrrr, M680X_REG_A, NOR, true, false }, // BITA
|
||||
{ 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
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BMC
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BMI
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BMS
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BNE
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // BOR
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BPL
|
||||
{ M680X_GRP_JUMP, rruu, NOR, NOR, false, false }, // BRCLR
|
||||
{ M680X_GRP_JUMP, rruu, NOR, NOR, false, false }, // BRSET
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // BRA
|
||||
{ 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
|
||||
{ NOG, rrrr, M680X_REG_B, M680X_REG_A, true, false }, // CBA
|
||||
{ M680X_GRP_JUMP, rruu, M680X_REG_A, NOR, false, false }, // CBEQ
|
||||
{ M680X_GRP_JUMP, rruu, M680X_REG_A, NOR, false, false }, // CBEQA
|
||||
{ M680X_GRP_JUMP, rruu, M680X_REG_X, NOR, false, false }, // CBEQX
|
||||
{ NOG, uuuu, NOR, NOR, true, false }, // CLC
|
||||
{ NOG, uuuu, NOR, NOR, true, false }, // CLI
|
||||
{ NOG, wrrr, NOR, NOR, true, false }, // CLR
|
||||
{ NOG, wrrr, M680X_REG_A, NOR, true, false }, // CLRA
|
||||
{ NOG, wrrr, M680X_REG_B, NOR, true, false }, // CLRB
|
||||
{ NOG, wrrr, M680X_REG_D, NOR, true, false }, // CLRD
|
||||
{ NOG, wrrr, M680X_REG_E, NOR, true, false }, // CLRE
|
||||
{ NOG, wrrr, M680X_REG_F, NOR, true, false }, // CLRF
|
||||
{ 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
|
||||
{ NOG, rrrr, M680X_REG_B, NOR, true, false }, // CMPB
|
||||
{ NOG, rrrr, M680X_REG_D, NOR, true, false }, // CMPD
|
||||
{ NOG, rrrr, M680X_REG_E, NOR, true, false }, // CMPE
|
||||
{ NOG, rrrr, M680X_REG_F, NOR, true, false }, // CMPF
|
||||
{ NOG, rrrr, NOR, NOR, true, false }, // CMPR
|
||||
{ NOG, rrrr, M680X_REG_S, NOR, true, false }, // CMPS
|
||||
{ NOG, rrrr, M680X_REG_U, NOR, true, false }, // CMPU
|
||||
{ NOG, rrrr, M680X_REG_W, NOR, true, false }, // CMPW
|
||||
{ NOG, rrrr, M680X_REG_X, NOR, true, false }, // CMPX
|
||||
{ NOG, rrrr, M680X_REG_Y, NOR, true, false }, // CMPY
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // COM
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // COMA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // COMB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // COMD
|
||||
{ NOG, mrrr, M680X_REG_E, NOR, true, false }, // COME
|
||||
{ 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
|
||||
{ NOG, rrrr, M680X_REG_Y, NOR, true, false }, // CPY
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // CWAI
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // DAA
|
||||
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // DBEQ
|
||||
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // DBNE
|
||||
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // DBNZ
|
||||
{ M680X_GRP_JUMP, muuu, M680X_REG_A, NOR, false, false }, // DBNZA
|
||||
{ M680X_GRP_JUMP, muuu, M680X_REG_X, NOR, false, false }, // DBNZX
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // DEC
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // DECA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // DECB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // DECD
|
||||
{ NOG, mrrr, M680X_REG_E, NOR, true, false }, // DECE
|
||||
{ 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
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // DIV
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // DIVD
|
||||
{ NOG, mrrr, M680X_REG_Q, NOR, true, false }, // DIVQ
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // EDIV
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // EDIVS
|
||||
{ NOG, rmmm, NOR, NOR, true, false }, // EIM
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // EMACS
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // EMAXD
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // EMAXM
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // EMIND
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // EMINM
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // EMUL
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // EMULS
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // EOR
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // EORA
|
||||
{ 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
|
||||
{ NOG, mmmm, NOR, NOR, true, true }, // IDIVS
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // ILLGL
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // INC
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // INCA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // INCB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // INCD
|
||||
{ NOG, mrrr, M680X_REG_E, NOR, true, false }, // INCE
|
||||
{ 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
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // JMP
|
||||
{ M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // JSR
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBCC
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBCS
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBEQ
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBGE
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBGT
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBHI
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBLE
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBLS
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBLT
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBMI
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBNE
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBPL
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBRA
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBRN never branches
|
||||
{ M680X_GRP_CALL, uuuu, NOR, NOR, false, true }, // LBSR
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBVC
|
||||
{ M680X_GRP_JUMP, uuuu, NOR, NOR, false, false }, // LBVS
|
||||
{ NOG, wrrr, M680X_REG_A, NOR, true, false }, // LDA
|
||||
{ NOG, wrrr, M680X_REG_A, NOR, true, false }, // LDAA
|
||||
{ NOG, wrrr, M680X_REG_B, NOR, true, false }, // LDAB
|
||||
{ NOG, wrrr, M680X_REG_B, NOR, true, false }, // LDB
|
||||
{ NOG, mrrr, NOR, NOR, false, false }, // LDBT
|
||||
{ NOG, wrrr, M680X_REG_D, NOR, true, false }, // LDD
|
||||
{ NOG, wrrr, M680X_REG_E, NOR, true, false }, // LDE
|
||||
{ NOG, wrrr, M680X_REG_F, NOR, true, false }, // LDF
|
||||
{ NOG, wrrr, M680X_REG_HX, NOR, true, false }, // LDHX
|
||||
{ NOG, mrrr, M680X_REG_MD, NOR, false, false }, // LDMD
|
||||
{ NOG, wrrr, M680X_REG_Q, NOR, true, false }, // LDQ
|
||||
{ NOG, wrrr, M680X_REG_S, NOR, true, false }, // LDS
|
||||
{ NOG, wrrr, M680X_REG_U, NOR, true, false }, // LDU
|
||||
{ NOG, wrrr, M680X_REG_W, NOR, true, false }, // LDW
|
||||
{ NOG, wrrr, M680X_REG_X, NOR, true, false }, // LDX
|
||||
{ NOG, wrrr, M680X_REG_Y, NOR, true, false }, // LDY
|
||||
{ NOG, wrrr, M680X_REG_S, NOR, false, false }, // LEAS
|
||||
{ NOG, wrrr, M680X_REG_U, NOR, false, false }, // LEAU
|
||||
{ NOG, wrrr, M680X_REG_X, NOR, false, false }, // LEAX
|
||||
{ NOG, wrrr, M680X_REG_Y, NOR, false, false }, // LEAY
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // LSL
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // LSLA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // LSLB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // LSLD
|
||||
{ NOG, mrrr, M680X_REG_X, NOR, true, false }, // LSLX
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // LSR
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // LSRA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // LSRB
|
||||
{ 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
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // MINA
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // MINM
|
||||
{ NOG, rwww, NOR, NOR, true, false }, // MOV
|
||||
{ NOG, rwww, NOR, NOR, false, false }, // MOVB
|
||||
{ NOG, rwww, NOR, NOR, false, false }, // MOVW
|
||||
{ NOG, mmmm, NOR, NOR, true, true }, // MUL
|
||||
{ NOG, mwrr, M680X_REG_D, NOR, true, true }, // MULD
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // NEG
|
||||
{ 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
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ORA
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ORAA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ORAB
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ORB
|
||||
{ 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
|
||||
{ NOG, mrrr, M680X_REG_S, M680X_REG_W, false, false }, // PSHSW
|
||||
{ NOG, mrrr, M680X_REG_U, NOR, false, false }, // PSHU
|
||||
{ NOG, mrrr, M680X_REG_U, M680X_REG_W, false, false }, // PSHUW
|
||||
{ NOG, rmmm, M680X_REG_X, NOR, false, true }, // PSHX
|
||||
{ NOG, rmmm, M680X_REG_Y, NOR, false, true }, // PSHY
|
||||
{ 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
|
||||
{ NOG, mwww, M680X_REG_S, M680X_REG_W, false, false }, // PULSW
|
||||
{ NOG, mwww, M680X_REG_U, NOR, false, false }, // PULU
|
||||
{ NOG, mwww, M680X_REG_U, M680X_REG_W, false, false }, // PULUW
|
||||
{ NOG, wmmm, M680X_REG_X, NOR, false, true }, // PULX
|
||||
{ NOG, wmmm, M680X_REG_Y, NOR, false, true }, // PULY
|
||||
{ NOG, mmrr, NOR, NOR, true, true }, // REV
|
||||
{ NOG, mmmm, NOR, NOR, true, true }, // REVW
|
||||
{ NOG, mrrr, NOR, NOR, true, false }, // ROL
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // ROLA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // ROLB
|
||||
{ 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
|
||||
{ M680X_GRP_RET, mwww, NOR, NOR, false, true }, // RTS
|
||||
{ NOG, rmmm, M680X_REG_B, M680X_REG_A, true, false }, // SBA
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // SBC
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // SBCA
|
||||
{ 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
|
||||
{ NOG, wrrr, NOR, NOR, true, true }, // SEX
|
||||
{ NOG, rwww, M680X_REG_W, NOR, true, true }, // SEXW
|
||||
{ NOG, rwww, M680X_REG_SPC, M680X_REG_A, false, false }, // SHA
|
||||
{ NOG, rwww, M680X_REG_SPC, M680X_REG_A, false, false }, // SLA
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // SLP
|
||||
{ NOG, rwww, M680X_REG_A, NOR, true, false }, // STA
|
||||
{ NOG, rwww, M680X_REG_A, NOR, true, false }, // STAA
|
||||
{ NOG, rwww, M680X_REG_B, NOR, true, false }, // STAB
|
||||
{ NOG, rwww, M680X_REG_B, NOR, true, false }, // STB
|
||||
{ NOG, rrrm, NOR, NOR, false, false }, // STBT
|
||||
{ NOG, rwww, M680X_REG_D, NOR, true, false }, // STD
|
||||
{ NOG, rwww, M680X_REG_E, NOR, true, false }, // STE
|
||||
{ NOG, rwww, M680X_REG_F, NOR, true, false }, // STF
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // STOP
|
||||
{ NOG, rwww, M680X_REG_HX, NOR, true, false }, // STHX
|
||||
{ NOG, rwww, M680X_REG_Q, NOR, true, false }, // STQ
|
||||
{ NOG, rwww, M680X_REG_S, NOR, true, false }, // STS
|
||||
{ NOG, rwww, M680X_REG_U, NOR, true, false }, // STU
|
||||
{ NOG, rwww, M680X_REG_W, NOR, true, false }, // STW
|
||||
{ NOG, rwww, M680X_REG_X, NOR, true, false }, // STX
|
||||
{ NOG, rwww, M680X_REG_Y, NOR, true, false }, // STY
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // SUB
|
||||
{ NOG, mrrr, M680X_REG_A, NOR, true, false }, // SUBA
|
||||
{ NOG, mrrr, M680X_REG_B, NOR, true, false }, // SUBB
|
||||
{ NOG, mrrr, M680X_REG_D, NOR, true, false }, // SUBD
|
||||
{ NOG, mrrr, M680X_REG_E, NOR, true, false }, // SUBE
|
||||
{ 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
|
||||
{ NOG, rwww, M680X_REG_B, M680X_REG_A, true, false }, // TBA
|
||||
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // TBEQ
|
||||
{ NOG, rmmm, NOR, NOR, true, true }, // TBL
|
||||
{ M680X_GRP_JUMP, muuu, NOR, NOR, false, false }, // TBNE
|
||||
{ NOG, uuuu, NOR, NOR, false, false }, // TEST
|
||||
{ NOG, rwww, NOR, NOR, false, false }, // TFM
|
||||
{ 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
|
||||
{ NOG, rrrr, M680X_REG_D, NOR, true, false }, // TSTD
|
||||
{ NOG, rrrr, M680X_REG_E, NOR, true, false }, // TSTE
|
||||
{ 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
|
||||
{ NOG, rwww, M680X_REG_HX, M680X_REG_S, false, false }, // TXS
|
||||
{ NOG, rwww, M680X_REG_Y, M680X_REG_S, false, false }, // TYS
|
||||
{ NOG, mrrr, NOR, NOR, true, true }, // WAI
|
||||
{ NOG, uuuu, NOR, NOR, true, false }, // WAIT
|
||||
{ NOG, uuuu, NOR, NOR, true, true }, // WAV
|
||||
{ NOG, uuuu, NOR, NOR, true, true }, // WAVR
|
||||
{ NOG, mmmm, M680X_REG_D, M680X_REG_X, false, false }, // XGDX
|
||||
{ NOG, mmmm, M680X_REG_D, M680X_REG_Y, false, false }, // XGDY
|
||||
};
|
||||
#undef NOR
|
||||
#undef NOG
|
||||
+277
@@ -0,0 +1,277 @@
|
||||
|
||||
// M6800/2 instructions
|
||||
static const inst_page1 g_m6800_inst_page1_table[256] = {
|
||||
// 0x0x, inherent instructions
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_NOP, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_TAP, inh_hid, inh_hid },
|
||||
{ M680X_INS_TPA, inh_hid, inh_hid },
|
||||
{ M680X_INS_INX, inh_hid, inh_hid },
|
||||
{ M680X_INS_DEX, inh_hid, inh_hid },
|
||||
{ M680X_INS_CLV, inh_hid, inh_hid },
|
||||
{ M680X_INS_SEV, inh_hid, inh_hid },
|
||||
{ M680X_INS_CLC, inh_hid, inh_hid },
|
||||
{ M680X_INS_SEC, inh_hid, inh_hid },
|
||||
{ M680X_INS_CLI, inh_hid, inh_hid },
|
||||
{ M680X_INS_SEI, inh_hid, inh_hid },
|
||||
// 0x1x, inherent instructions
|
||||
{ M680X_INS_SBA, inh_hid, inh_hid },
|
||||
{ M680X_INS_CBA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_TAB, inh_hid, inh_hid },
|
||||
{ M680X_INS_TBA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_DAA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ABA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0x2x, relative branch instructions
|
||||
{ M680X_INS_BRA, rel8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_BHI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BNE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BEQ, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BPL, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLE, rel8_hid, inh_hid },
|
||||
// 0x3x, inherent instructions
|
||||
{ M680X_INS_TSX, inh_hid, inh_hid },
|
||||
{ M680X_INS_INS, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULA, inh_hid, inh_hid },
|
||||
{ M680X_INS_PULB, inh_hid, inh_hid },
|
||||
{ M680X_INS_DES, inh_hid, inh_hid },
|
||||
{ M680X_INS_TXS, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHA, inh_hid, inh_hid },
|
||||
{ M680X_INS_PSHB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RTS, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RTI, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_WAI, inh_hid, inh_hid },
|
||||
{ M680X_INS_SWI, inh_hid, inh_hid },
|
||||
// 0x4x, Register A instructions
|
||||
{ M680X_INS_NEGA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COMA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCA, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRA, inh_hid, inh_hid },
|
||||
// 0x5x, Register B instructions
|
||||
{ M680X_INS_NEGB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COMB, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCB, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRB, inh_hid, inh_hid },
|
||||
// 0x6x, indexed instructions
|
||||
{ M680X_INS_NEG, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LSR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ASR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ASL, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ROL, idxX_hid, inh_hid },
|
||||
{ M680X_INS_DEC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_TST, idxX_hid, inh_hid },
|
||||
{ M680X_INS_JMP, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CLR, idxX_hid, inh_hid },
|
||||
// 0x7x, extended instructions
|
||||
{ M680X_INS_NEG, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, ext_hid, inh_hid },
|
||||
{ M680X_INS_LSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ASR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ASL, ext_hid, inh_hid },
|
||||
{ M680X_INS_ROL, ext_hid, inh_hid },
|
||||
{ M680X_INS_DEC, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, ext_hid, inh_hid },
|
||||
{ M680X_INS_TST, ext_hid, inh_hid },
|
||||
{ M680X_INS_JMP, ext_hid, inh_hid },
|
||||
{ M680X_INS_CLR, ext_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with Register A,X,S
|
||||
{ M680X_INS_SUBA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_EORA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CPX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_BSR, rel8_hid, inh_hid },
|
||||
{ M680X_INS_LDS, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register A,X,S
|
||||
{ M680X_INS_SUBA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITA, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_STAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_EORA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPX, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDS, dir_hid, inh_hid },
|
||||
{ M680X_INS_STS, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with Register A,X
|
||||
{ M680X_INS_SUBA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_BITA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STAA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_EORA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CPX, idxX_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LDS, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STS, idxX_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register A,X,S
|
||||
{ M680X_INS_SUBA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITA, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_STAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_EORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORAA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPX, ext_hid, inh_hid },
|
||||
{ M680X_INS_JSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDS, ext_hid, inh_hid },
|
||||
{ M680X_INS_STS, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register B,X
|
||||
{ M680X_INS_SUBB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_EORB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0xDx direct instructions with register B,X
|
||||
{ M680X_INS_SUBB, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITB, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_STAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_EORB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDX, dir_hid, inh_hid },
|
||||
{ M680X_INS_STX, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instruction with register B,X
|
||||
{ M680X_INS_SUBB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_BITB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STAB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_EORB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STX, idxX_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register B,U
|
||||
{ M680X_INS_SUBB, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITB, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDAB, ext_hid, inh_hid },
|
||||
{ M680X_INS_STAB, ext_hid, inh_hid },
|
||||
{ M680X_INS_EORB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORAB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDX, ext_hid, inh_hid },
|
||||
{ M680X_INS_STX, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
|
||||
// Additional instructions only supported on M6801/3
|
||||
static const inst_pageX g_m6801_inst_overlay_table[] = {
|
||||
// 0x0x, inherent instructions
|
||||
{ 0x04, M680X_INS_LSRD, inh_hid, inh_hid },
|
||||
{ 0x05, M680X_INS_ASLD, inh_hid, inh_hid },
|
||||
// 0x2x, relative branch instructions
|
||||
{ 0x21, M680X_INS_BRN, rel8_hid, inh_hid },
|
||||
// 0x3x, inherent instructions
|
||||
{ 0x38, M680X_INS_PULX, inh_hid, inh_hid },
|
||||
{ 0x3A, M680X_INS_ABX, inh_hid, inh_hid },
|
||||
{ 0x3C, M680X_INS_PSHX, inh_hid, inh_hid },
|
||||
{ 0x3D, M680X_INS_MUL, inh_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with Register D
|
||||
{ 0x83, M680X_INS_SUBD, imm16_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register D
|
||||
{ 0x93, M680X_INS_SUBD, dir_hid, inh_hid },
|
||||
{ 0x9D, M680X_INS_JSR, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with Register D
|
||||
{ 0xA3, M680X_INS_SUBD, idxX_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register D
|
||||
{ 0xB3, M680X_INS_SUBD, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register D
|
||||
{ 0xC3, M680X_INS_ADDD, imm16_hid, inh_hid },
|
||||
{ 0xCC, M680X_INS_LDD, imm16_hid, inh_hid },
|
||||
// 0xDx direct instructions with register D
|
||||
{ 0xD3, M680X_INS_ADDD, dir_hid, inh_hid },
|
||||
{ 0xDC, M680X_INS_LDD, dir_hid, inh_hid },
|
||||
{ 0xDD, M680X_INS_STD, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instruction with register D
|
||||
{ 0xE3, M680X_INS_ADDD, idxX_hid, inh_hid },
|
||||
{ 0xEC, M680X_INS_LDD, idxX_hid, inh_hid },
|
||||
{ 0xED, M680X_INS_STD, idxX_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register D
|
||||
{ 0xF3, M680X_INS_ADDD, ext_hid, inh_hid },
|
||||
{ 0xFC, M680X_INS_LDD, ext_hid, inh_hid },
|
||||
{ 0xFD, M680X_INS_STD, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
+277
@@ -0,0 +1,277 @@
|
||||
|
||||
// M68HC05 instructions
|
||||
static const inst_page1 g_m6805_inst_page1_table[256] = {
|
||||
// 0x0x, bit manipulation instructions
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRSET, opidxdr_hid, inh_hid },
|
||||
{ M680X_INS_BRCLR, opidxdr_hid, inh_hid },
|
||||
// 0x1x, bit set/clear instructions
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BCLR, opidx_hid, dir_hid },
|
||||
{ M680X_INS_BSET, opidx_hid, dir_hid },
|
||||
// 0x2x, relative branch instructions
|
||||
{ M680X_INS_BRA, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BRN, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BHI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BNE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BEQ, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BHCC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BHCS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BPL, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BIL, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BIH, rel8_hid, inh_hid },
|
||||
// 0x3x, direct instructions
|
||||
{ M680X_INS_NEG, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, dir_hid, inh_hid },
|
||||
{ M680X_INS_LSR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ASR, dir_hid, inh_hid },
|
||||
{ M680X_INS_LSL, dir_hid, inh_hid },
|
||||
{ M680X_INS_ROL, dir_hid, inh_hid },
|
||||
{ M680X_INS_DEC, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, dir_hid, inh_hid },
|
||||
{ M680X_INS_TST, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLR, dir_hid, inh_hid },
|
||||
// 0x4x, inherent instructions
|
||||
{ M680X_INS_NEGA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_MUL, inh_hid, inh_hid },
|
||||
{ M680X_INS_COMA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCA, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRA, inh_hid, inh_hid },
|
||||
// 0x5x, inherent instructions
|
||||
{ M680X_INS_NEGX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COMX, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRX, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSLX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLX, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCX, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTX, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRX, inh_hid, inh_hid },
|
||||
// 0x6x, indexed, 1 byte offset instructions
|
||||
{ M680X_INS_NEG, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LSR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ASR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LSL, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ROL, idxX_hid, inh_hid },
|
||||
{ M680X_INS_DEC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_TST, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLR, idxX_hid, inh_hid },
|
||||
// 0x7x, indexed, no offset instructions
|
||||
{ M680X_INS_NEG, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_LSR, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ASR, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_LSL, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ROL, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_DEC, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_TST, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLR, idxX0_hid, inh_hid },
|
||||
// 0x8x, inherent instructions
|
||||
{ M680X_INS_RTI, inh_hid, inh_hid },
|
||||
{ M680X_INS_RTS, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_SWI, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_STOP, inh_hid, inh_hid },
|
||||
{ M680X_INS_WAIT, inh_hid, inh_hid },
|
||||
// 0x9x, inherent instructions
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_TAX, inh_hid, inh_hid },
|
||||
{ M680X_INS_CLC, inh_hid, inh_hid },
|
||||
{ M680X_INS_SEC, inh_hid, inh_hid },
|
||||
{ M680X_INS_CLI, inh_hid, inh_hid },
|
||||
{ M680X_INS_SEI, inh_hid, inh_hid },
|
||||
{ M680X_INS_RSP, inh_hid, inh_hid },
|
||||
{ M680X_INS_NOP, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_TXA, inh_hid, inh_hid },
|
||||
// 0xAx, immediate instructions with reg. A
|
||||
{ M680X_INS_SUB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMP, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CPX, imm8_hid, inh_hid },
|
||||
{ M680X_INS_AND, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BIT, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_EOR, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADD, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_BSR, rel8_hid, inh_hid },
|
||||
{ M680X_INS_LDX, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0xBx, direct instructions with reg. A
|
||||
{ M680X_INS_SUB, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMP, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBC, dir_hid, inh_hid },
|
||||
{ M680X_INS_CPX, dir_hid, inh_hid },
|
||||
{ M680X_INS_AND, dir_hid, inh_hid },
|
||||
{ M680X_INS_BIT, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_STA, dir_hid, inh_hid },
|
||||
{ M680X_INS_EOR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADC, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADD, dir_hid, inh_hid },
|
||||
{ M680X_INS_JMP, dir_hid, inh_hid },
|
||||
{ M680X_INS_JSR, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDX, dir_hid, inh_hid },
|
||||
{ M680X_INS_STX, dir_hid, inh_hid },
|
||||
// 0xCx, extended instructions with reg. A
|
||||
{ M680X_INS_SUB, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMP, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBC, ext_hid, inh_hid },
|
||||
{ M680X_INS_CPX, ext_hid, inh_hid },
|
||||
{ M680X_INS_AND, ext_hid, inh_hid },
|
||||
{ M680X_INS_BIT, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_STA, ext_hid, inh_hid },
|
||||
{ M680X_INS_EOR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADC, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADD, ext_hid, inh_hid },
|
||||
{ M680X_INS_JMP, ext_hid, inh_hid },
|
||||
{ M680X_INS_JSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDX, ext_hid, inh_hid },
|
||||
{ M680X_INS_STX, ext_hid, inh_hid },
|
||||
// 0xDx, indexed with 2 byte offset instructions with reg. A
|
||||
{ M680X_INS_SUB, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_CMP, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_SBC, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_CPX, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_AND, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_BIT, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_LDA, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_STA, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_EOR, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_ADC, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_ORA, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_ADD, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_JMP, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idxX16_hid, inh_hid },
|
||||
{ M680X_INS_STX, idxX16_hid, inh_hid },
|
||||
// 0xEx, indexed with 1 byte offset instructions with reg. A
|
||||
{ M680X_INS_SUB, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CMP, idxX_hid, inh_hid },
|
||||
{ M680X_INS_SBC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_CPX, idxX_hid, inh_hid },
|
||||
{ M680X_INS_AND, idxX_hid, inh_hid },
|
||||
{ M680X_INS_BIT, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LDA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_EOR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADC, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ORA, idxX_hid, inh_hid },
|
||||
{ M680X_INS_ADD, idxX_hid, inh_hid },
|
||||
{ M680X_INS_JMP, idxX_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idxX_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idxX_hid, inh_hid },
|
||||
{ M680X_INS_STX, idxX_hid, inh_hid },
|
||||
// 0xFx, indexed without offset instructions with reg. A
|
||||
{ M680X_INS_SUB, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_CMP, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_SBC, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_CPX, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_AND, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_BIT, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_LDA, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_STA, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_EOR, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ADC, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ORA, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_ADD, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_JMP, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idxX0_hid, inh_hid },
|
||||
{ M680X_INS_STX, idxX0_hid, inh_hid },
|
||||
};
|
||||
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
|
||||
// Additional instructions only supported on M68HC08
|
||||
static const inst_pageX g_m6808_inst_overlay_table[] = {
|
||||
{ 0x31, M680X_INS_CBEQ, dir_hid, rel8_hid },
|
||||
{ 0x35, M680X_INS_STHX, dir_hid, inh_hid },
|
||||
{ 0x3b, M680X_INS_DBNZ, dir_hid, rel8_hid },
|
||||
{ 0x41, M680X_INS_CBEQA, imm8rel_hid, inh_hid },
|
||||
{ 0x45, M680X_INS_LDHX, imm16_hid, inh_hid },
|
||||
{ 0x4b, M680X_INS_DBNZA, rel8_hid, inh_hid },
|
||||
{ 0x4e, M680X_INS_MOV, dir_hid, dir_hid },
|
||||
{ 0x51, M680X_INS_CBEQX, imm8rel_hid, inh_hid },
|
||||
{ 0x52, M680X_INS_DIV, inh_hid, inh_hid },
|
||||
{ 0x55, M680X_INS_LDHX, dir_hid, inh_hid },
|
||||
{ 0x5b, M680X_INS_DBNZX, rel8_hid, inh_hid },
|
||||
{ 0x5e, M680X_INS_MOV, dir_hid, idxX0p_hid },
|
||||
{ 0x61, M680X_INS_CBEQ, idxXp_hid, rel8_hid },
|
||||
{ 0x62, M680X_INS_NSA, inh_hid, inh_hid },
|
||||
{ 0x65, M680X_INS_CPHX, imm16_hid, inh_hid },
|
||||
{ 0x6b, M680X_INS_DBNZ, idxX_hid, rel8_hid },
|
||||
{ 0x6e, M680X_INS_MOV, imm8_hid, dir_hid },
|
||||
{ 0x71, M680X_INS_CBEQ, idxX0p_hid, rel8_hid },
|
||||
{ 0x72, M680X_INS_DAA, inh_hid, inh_hid },
|
||||
{ 0x75, M680X_INS_CPHX, dir_hid, inh_hid },
|
||||
{ 0x7b, M680X_INS_DBNZ, idxX0_hid, rel8_hid },
|
||||
{ 0x7e, M680X_INS_MOV, idxX0p_hid, dir_hid },
|
||||
{ 0x84, M680X_INS_TAP, inh_hid, inh_hid },
|
||||
{ 0x85, M680X_INS_TPA, inh_hid, inh_hid },
|
||||
{ 0x86, M680X_INS_PULA, inh_hid, inh_hid },
|
||||
{ 0x87, M680X_INS_PSHA, inh_hid, inh_hid },
|
||||
{ 0x88, M680X_INS_PULX, inh_hid, inh_hid },
|
||||
{ 0x89, M680X_INS_PSHX, inh_hid, inh_hid },
|
||||
{ 0x8a, M680X_INS_PULH, inh_hid, inh_hid },
|
||||
{ 0x8b, M680X_INS_PSHH, inh_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CLRH, inh_hid, inh_hid },
|
||||
{ 0x90, M680X_INS_BGE, rel8_hid, inh_hid },
|
||||
{ 0x91, M680X_INS_BLT, rel8_hid, inh_hid },
|
||||
{ 0x92, M680X_INS_BGT, rel8_hid, inh_hid },
|
||||
{ 0x93, M680X_INS_BLE, rel8_hid, inh_hid },
|
||||
{ 0x94, M680X_INS_TXS, inh_hid, inh_hid },
|
||||
{ 0x95, M680X_INS_TSX, inh_hid, inh_hid },
|
||||
{ 0x97, M680X_INS_TAX, inh_hid, inh_hid },
|
||||
{ 0x9f, M680X_INS_TXA, inh_hid, inh_hid },
|
||||
{ 0xa7, M680X_INS_AIS, imm8_hid, inh_hid },
|
||||
{ 0xaf, M680X_INS_AIX, imm8_hid, inh_hid },
|
||||
};
|
||||
|
||||
// M68HC08 PAGE2 instructions (prefix 0x9E)
|
||||
static const inst_pageX g_m6808_inst_page2_table[] = {
|
||||
{ 0x60, M680X_INS_NEG, idxS_hid, inh_hid },
|
||||
{ 0x61, M680X_INS_CBEQ, idxS_hid, rel8_hid },
|
||||
{ 0x63, M680X_INS_COM, idxS_hid, inh_hid },
|
||||
{ 0x64, M680X_INS_LSR, idxS_hid, inh_hid },
|
||||
{ 0x66, M680X_INS_ROR, idxS_hid, inh_hid },
|
||||
{ 0x67, M680X_INS_ASR, idxS_hid, inh_hid },
|
||||
{ 0x68, M680X_INS_LSL, idxS_hid, inh_hid },
|
||||
{ 0x69, M680X_INS_ROL, idxS_hid, inh_hid },
|
||||
{ 0x6a, M680X_INS_DEC, idxS_hid, inh_hid },
|
||||
{ 0x6b, M680X_INS_DBNZ, idxS_hid, rel8_hid },
|
||||
{ 0x6c, M680X_INS_INC, idxS_hid, inh_hid },
|
||||
{ 0x6d, M680X_INS_TST, idxS_hid, inh_hid },
|
||||
{ 0x6f, M680X_INS_CLR, idxS_hid, inh_hid },
|
||||
{ 0xd0, M680X_INS_SUB, idxS16_hid, inh_hid },
|
||||
{ 0xd1, M680X_INS_CMP, idxS16_hid, inh_hid },
|
||||
{ 0xd2, M680X_INS_SBC, idxS16_hid, inh_hid },
|
||||
{ 0xd3, M680X_INS_CPX, idxS16_hid, inh_hid },
|
||||
{ 0xd4, M680X_INS_AND, idxS16_hid, inh_hid },
|
||||
{ 0xd5, M680X_INS_BIT, idxS16_hid, inh_hid },
|
||||
{ 0xd6, M680X_INS_LDA, idxS16_hid, inh_hid },
|
||||
{ 0xd7, M680X_INS_STA, idxS16_hid, inh_hid },
|
||||
{ 0xd8, M680X_INS_EOR, idxS16_hid, inh_hid },
|
||||
{ 0xd9, M680X_INS_ADC, idxS16_hid, inh_hid },
|
||||
{ 0xda, M680X_INS_ORA, idxS16_hid, inh_hid },
|
||||
{ 0xdb, M680X_INS_ADD, idxS16_hid, inh_hid },
|
||||
{ 0xde, M680X_INS_LDX, idxS16_hid, inh_hid },
|
||||
{ 0xdf, M680X_INS_STX, idxS16_hid, inh_hid },
|
||||
{ 0xe0, M680X_INS_SUB, idxS_hid, inh_hid },
|
||||
{ 0xe1, M680X_INS_CMP, idxS_hid, inh_hid },
|
||||
{ 0xe2, M680X_INS_SBC, idxS_hid, inh_hid },
|
||||
{ 0xe3, M680X_INS_CPX, idxS_hid, inh_hid },
|
||||
{ 0xe4, M680X_INS_AND, idxS_hid, inh_hid },
|
||||
{ 0xe5, M680X_INS_BIT, idxS_hid, inh_hid },
|
||||
{ 0xe6, M680X_INS_LDA, idxS_hid, inh_hid },
|
||||
{ 0xe7, M680X_INS_STA, idxS_hid, inh_hid },
|
||||
{ 0xe8, M680X_INS_EOR, idxS_hid, inh_hid },
|
||||
{ 0xe9, M680X_INS_ADC, idxS_hid, inh_hid },
|
||||
{ 0xea, M680X_INS_ORA, idxS_hid, inh_hid },
|
||||
{ 0xeb, M680X_INS_ADD, idxS_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDX, idxS_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STX, idxS_hid, inh_hid },
|
||||
};
|
||||
|
||||
+352
@@ -0,0 +1,352 @@
|
||||
|
||||
// M6809/HD6309 PAGE1 instructions
|
||||
static const inst_page1 g_m6809_inst_page1_table[256] = {
|
||||
// 0x0x, direct instructions
|
||||
{ M680X_INS_NEG, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, dir_hid, inh_hid },
|
||||
{ M680X_INS_LSR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, dir_hid, inh_hid },
|
||||
{ M680X_INS_ASR, dir_hid, inh_hid },
|
||||
{ M680X_INS_LSL, dir_hid, inh_hid },
|
||||
{ M680X_INS_ROL, dir_hid, inh_hid },
|
||||
{ M680X_INS_DEC, dir_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, dir_hid, inh_hid },
|
||||
{ M680X_INS_TST, dir_hid, inh_hid },
|
||||
{ M680X_INS_JMP, dir_hid, inh_hid },
|
||||
{ M680X_INS_CLR, dir_hid, inh_hid },
|
||||
// 0x1x, misc instructions
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid }, // PAGE2
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid }, // PAGE3
|
||||
{ M680X_INS_NOP, inh_hid, inh_hid },
|
||||
{ M680X_INS_SYNC, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LBRA, rel16_hid, inh_hid },
|
||||
{ M680X_INS_LBSR, rel16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_DAA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ORCC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ANDCC, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SEX, inh_hid, inh_hid },
|
||||
{ M680X_INS_EXG, rr09_hid, inh_hid },
|
||||
{ M680X_INS_TFR, rr09_hid, inh_hid },
|
||||
// 0x2x, relative branch instructions
|
||||
{ M680X_INS_BRA, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BRN, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BHI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BCS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BNE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BEQ, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVC, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BVS, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BPL, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BMI, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGE, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BGT, rel8_hid, inh_hid },
|
||||
{ M680X_INS_BLE, rel8_hid, inh_hid },
|
||||
// 0x3x, misc instructions
|
||||
{ M680X_INS_LEAX, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LEAY, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LEAS, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LEAU, idx09_hid, inh_hid },
|
||||
{ M680X_INS_PSHS, rbits_hid, inh_hid },
|
||||
{ M680X_INS_PULS, rbits_hid, inh_hid },
|
||||
{ M680X_INS_PSHU, rbits_hid, inh_hid },
|
||||
{ M680X_INS_PULU, rbits_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RTS, inh_hid, inh_hid },
|
||||
{ M680X_INS_ABX, inh_hid, inh_hid },
|
||||
{ M680X_INS_RTI, inh_hid, inh_hid },
|
||||
{ M680X_INS_CWAI, imm8_hid, inh_hid },
|
||||
{ M680X_INS_MUL, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_SWI, inh_hid, inh_hid },
|
||||
// 0x4x, Register A instructions
|
||||
{ M680X_INS_NEGA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COMA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRA, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLA, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCA, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTA, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRA, inh_hid, inh_hid },
|
||||
// 0x5x, Register B instructions
|
||||
{ M680X_INS_NEGB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COMB, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_RORB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ASRB, inh_hid, inh_hid },
|
||||
{ M680X_INS_LSLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ROLB, inh_hid, inh_hid },
|
||||
{ M680X_INS_DECB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INCB, inh_hid, inh_hid },
|
||||
{ M680X_INS_TSTB, inh_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_CLRB, inh_hid, inh_hid },
|
||||
// 0x6x, indexed instructions
|
||||
{ M680X_INS_NEG, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LSR, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ASR, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LSL, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ROL, idx09_hid, inh_hid },
|
||||
{ M680X_INS_DEC, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, idx09_hid, inh_hid },
|
||||
{ M680X_INS_TST, idx09_hid, inh_hid },
|
||||
{ M680X_INS_JMP, idx09_hid, inh_hid },
|
||||
{ M680X_INS_CLR, idx09_hid, inh_hid },
|
||||
// 0x7x, extended instructions
|
||||
{ M680X_INS_NEG, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_COM, ext_hid, inh_hid },
|
||||
{ M680X_INS_LSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_ROR, ext_hid, inh_hid },
|
||||
{ M680X_INS_ASR, ext_hid, inh_hid },
|
||||
{ M680X_INS_LSL, ext_hid, inh_hid },
|
||||
{ M680X_INS_ROL, ext_hid, inh_hid },
|
||||
{ M680X_INS_DEC, ext_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_INC, ext_hid, inh_hid },
|
||||
{ M680X_INS_TST, ext_hid, inh_hid },
|
||||
{ M680X_INS_JMP, ext_hid, inh_hid },
|
||||
{ M680X_INS_CLR, ext_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with Register A,D,X
|
||||
{ M680X_INS_SUBA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_EORA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_BSR, rel8_hid, inh_hid },
|
||||
{ M680X_INS_LDX, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register A,D,X
|
||||
{ M680X_INS_SUBA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, dir_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITA, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_STA, dir_hid, inh_hid },
|
||||
{ M680X_INS_EORA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORA, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPX, dir_hid, inh_hid },
|
||||
{ M680X_INS_JSR, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDX, dir_hid, inh_hid },
|
||||
{ M680X_INS_STX, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with Register A,D,X
|
||||
{ M680X_INS_SUBA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_BITA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LDA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_STA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_EORA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ORA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, idx09_hid, inh_hid },
|
||||
{ M680X_INS_CMPX, idx09_hid, inh_hid },
|
||||
{ M680X_INS_JSR, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LDX, idx09_hid, inh_hid },
|
||||
{ M680X_INS_STX, idx09_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register A,D,X
|
||||
{ M680X_INS_SUBA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_SUBD, ext_hid, inh_hid },
|
||||
{ M680X_INS_ANDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITA, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_STA, ext_hid, inh_hid },
|
||||
{ M680X_INS_EORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORA, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDA, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPX, ext_hid, inh_hid },
|
||||
{ M680X_INS_JSR, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDX, ext_hid, inh_hid },
|
||||
{ M680X_INS_STX, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register B,D,U
|
||||
{ M680X_INS_SUBB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_BITB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_EORB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ORB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, imm8_hid, inh_hid },
|
||||
{ M680X_INS_LDD, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
{ M680X_INS_LDU, imm16_hid, inh_hid },
|
||||
{ M680X_INS_ILLGL, illgl_hid, inh_hid },
|
||||
// 0xDx direct instructions with register B,D,U
|
||||
{ M680X_INS_SUBB, dir_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, dir_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, dir_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_BITB, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_STB, dir_hid, inh_hid },
|
||||
{ M680X_INS_EORB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ORB, dir_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDD, dir_hid, inh_hid },
|
||||
{ M680X_INS_STD, dir_hid, inh_hid },
|
||||
{ M680X_INS_LDU, dir_hid, inh_hid },
|
||||
{ M680X_INS_STU, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instruction with register B,D,U
|
||||
{ M680X_INS_SUBB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_BITB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LDB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_STB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_EORB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ORB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LDD, idx09_hid, inh_hid },
|
||||
{ M680X_INS_STD, idx09_hid, inh_hid },
|
||||
{ M680X_INS_LDU, idx09_hid, inh_hid },
|
||||
{ M680X_INS_STU, idx09_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register B,D,U
|
||||
{ M680X_INS_SUBB, ext_hid, inh_hid },
|
||||
{ M680X_INS_CMPB, ext_hid, inh_hid },
|
||||
{ M680X_INS_SBCB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDD, ext_hid, inh_hid },
|
||||
{ M680X_INS_ANDB, ext_hid, inh_hid },
|
||||
{ M680X_INS_BITB, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDB, ext_hid, inh_hid },
|
||||
{ M680X_INS_STB, ext_hid, inh_hid },
|
||||
{ M680X_INS_EORB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADCB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ORB, ext_hid, inh_hid },
|
||||
{ M680X_INS_ADDB, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDD, ext_hid, inh_hid },
|
||||
{ M680X_INS_STD, ext_hid, inh_hid },
|
||||
{ M680X_INS_LDU, ext_hid, inh_hid },
|
||||
{ M680X_INS_STU, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// The following array has to be sorted by increasing
|
||||
// opcodes. Otherwise the binary_search will fail.
|
||||
//
|
||||
// M6809 PAGE2 instructions (with prefix 0x10)
|
||||
static const inst_pageX g_m6809_inst_page2_table[] = {
|
||||
// 0x2x, relative long branch instructions
|
||||
{ 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 },
|
||||
// 0x3x
|
||||
{ 0x3f, M680X_INS_SWI2, inh_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with register D,Y
|
||||
{ 0x83, M680X_INS_CMPD, imm16_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CMPY, imm16_hid, inh_hid },
|
||||
{ 0x8e, M680X_INS_LDY, imm16_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register D,Y
|
||||
{ 0x93, M680X_INS_CMPD, dir_hid, inh_hid },
|
||||
{ 0x9c, M680X_INS_CMPY, dir_hid, inh_hid },
|
||||
{ 0x9e, M680X_INS_LDY, dir_hid, inh_hid },
|
||||
{ 0x9f, M680X_INS_STY, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with register D,Y
|
||||
{ 0xa3, M680X_INS_CMPD, idx09_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CMPY, idx09_hid, inh_hid },
|
||||
{ 0xae, M680X_INS_LDY, idx09_hid, inh_hid },
|
||||
{ 0xaf, M680X_INS_STY, idx09_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register D,Y
|
||||
{ 0xb3, M680X_INS_CMPD, ext_hid, inh_hid },
|
||||
{ 0xbc, M680X_INS_CMPY, ext_hid, inh_hid },
|
||||
{ 0xbe, M680X_INS_LDY, ext_hid, inh_hid },
|
||||
{ 0xbf, M680X_INS_STY, ext_hid, inh_hid },
|
||||
// 0xCx, immediate instructions with register S
|
||||
{ 0xce, M680X_INS_LDS, imm16_hid, inh_hid },
|
||||
// 0xDx, direct instructions with register S
|
||||
{ 0xde, M680X_INS_LDS, dir_hid, inh_hid },
|
||||
{ 0xdf, M680X_INS_STS, dir_hid, inh_hid },
|
||||
// 0xEx, indexed instructions with register S
|
||||
{ 0xee, M680X_INS_LDS, idx09_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STS, idx09_hid, inh_hid },
|
||||
// 0xFx, extended instructions with register S
|
||||
{ 0xfe, M680X_INS_LDS, ext_hid, inh_hid },
|
||||
{ 0xff, M680X_INS_STS, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// The following array has to be sorted by increasing
|
||||
// opcodes. Otherwise the binary_search will fail.
|
||||
//
|
||||
// M6809 PAGE3 instructions (with prefix 0x11)
|
||||
static const inst_pageX g_m6809_inst_page3_table[] = {
|
||||
{ 0x3f, M680X_INS_SWI3, inh_hid, inh_hid },
|
||||
// 0x8x, immediate instructions with register U,S
|
||||
{ 0x83, M680X_INS_CMPU, imm16_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CMPS, imm16_hid, inh_hid },
|
||||
// 0x9x, direct instructions with register U,S
|
||||
{ 0x93, M680X_INS_CMPU, dir_hid, inh_hid },
|
||||
{ 0x9c, M680X_INS_CMPS, dir_hid, inh_hid },
|
||||
// 0xAx, indexed instructions with register U,S
|
||||
{ 0xa3, M680X_INS_CMPU, idx09_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CMPS, idx09_hid, inh_hid },
|
||||
// 0xBx, extended instructions with register U,S
|
||||
{ 0xb3, M680X_INS_CMPU, ext_hid, inh_hid },
|
||||
{ 0xbc, M680X_INS_CMPS, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
|
||||
// Additional instructions only supported on M68HC11
|
||||
static const inst_pageX g_m6811_inst_overlay_table[] = {
|
||||
{ 0x00, M680X_INS_TEST, inh_hid, inh_hid },
|
||||
{ 0x02, M680X_INS_IDIV, inh_hid, inh_hid },
|
||||
{ 0x03, M680X_INS_FDIV, inh_hid, inh_hid },
|
||||
{ 0x12, M680X_INS_BRSET, dir_hid, imm8rel_hid },
|
||||
{ 0x13, M680X_INS_BRCLR, dir_hid, imm8rel_hid },
|
||||
{ 0x14, M680X_INS_BSET, dir_hid, imm8_hid },
|
||||
{ 0x15, M680X_INS_BCLR, dir_hid, imm8_hid },
|
||||
{ 0x1c, M680X_INS_BSET, idxX_hid, imm8_hid },
|
||||
{ 0x1d, M680X_INS_BCLR, idxX_hid, imm8_hid },
|
||||
{ 0x1e, M680X_INS_BRSET, idxX_hid, imm8rel_hid },
|
||||
{ 0x1f, M680X_INS_BRCLR, idxX_hid, imm8rel_hid },
|
||||
{ 0x8f, M680X_INS_XGDX, inh_hid, inh_hid },
|
||||
{ 0xcf, M680X_INS_STOP, inh_hid, inh_hid },
|
||||
};
|
||||
|
||||
// M68HC11 PAGE2 instructions
|
||||
static const inst_pageX g_m6811_inst_page2_table[] = {
|
||||
{ 0x08, M680X_INS_INY, inh_hid, inh_hid },
|
||||
{ 0x09, M680X_INS_DEY, inh_hid, inh_hid },
|
||||
{ 0x1c, M680X_INS_BSET, idxY_hid, imm8_hid },
|
||||
{ 0x1d, M680X_INS_BCLR, idxY_hid, imm8_hid },
|
||||
{ 0x1e, M680X_INS_BRSET, idxY_hid, imm8rel_hid },
|
||||
{ 0x1f, M680X_INS_BRCLR, idxY_hid, imm8rel_hid },
|
||||
{ 0x30, M680X_INS_TSY, inh_hid, inh_hid },
|
||||
{ 0x35, M680X_INS_TYS, inh_hid, inh_hid },
|
||||
{ 0x38, M680X_INS_PULY, inh_hid, inh_hid },
|
||||
{ 0x3a, M680X_INS_ABY, inh_hid, inh_hid },
|
||||
{ 0x3c, M680X_INS_PSHY, inh_hid, inh_hid },
|
||||
{ 0x60, M680X_INS_NEG, idxY_hid, inh_hid },
|
||||
{ 0x63, M680X_INS_COM, idxY_hid, inh_hid },
|
||||
{ 0x64, M680X_INS_LSR, idxY_hid, inh_hid },
|
||||
{ 0x66, M680X_INS_ROR, idxY_hid, inh_hid },
|
||||
{ 0x67, M680X_INS_ASR, idxY_hid, inh_hid },
|
||||
{ 0x68, M680X_INS_ASL, idxY_hid, inh_hid },
|
||||
{ 0x69, M680X_INS_ROL, idxY_hid, inh_hid },
|
||||
{ 0x6a, M680X_INS_DEC, idxY_hid, inh_hid },
|
||||
{ 0x6c, M680X_INS_INC, idxY_hid, inh_hid },
|
||||
{ 0x6d, M680X_INS_TST, idxY_hid, inh_hid },
|
||||
{ 0x6e, M680X_INS_JMP, idxY_hid, inh_hid },
|
||||
{ 0x6f, M680X_INS_CLR, idxY_hid, inh_hid },
|
||||
{ 0x8c, M680X_INS_CPY, imm16_hid, inh_hid },
|
||||
{ 0x8f, M680X_INS_XGDY, inh_hid, inh_hid },
|
||||
{ 0x9c, M680X_INS_CPY, dir_hid, inh_hid },
|
||||
{ 0xa0, M680X_INS_SUBA, idxY_hid, inh_hid },
|
||||
{ 0xa1, M680X_INS_CMPA, idxY_hid, inh_hid },
|
||||
{ 0xa2, M680X_INS_SBCA, idxY_hid, inh_hid },
|
||||
{ 0xa3, M680X_INS_SUBD, idxY_hid, inh_hid },
|
||||
{ 0xa4, M680X_INS_ANDA, idxY_hid, inh_hid },
|
||||
{ 0xa5, M680X_INS_BITA, idxY_hid, inh_hid },
|
||||
{ 0xa6, M680X_INS_LDAA, idxY_hid, inh_hid },
|
||||
{ 0xa7, M680X_INS_STAA, idxY_hid, inh_hid },
|
||||
{ 0xa8, M680X_INS_EORA, idxY_hid, inh_hid },
|
||||
{ 0xa9, M680X_INS_ADCA, idxY_hid, inh_hid },
|
||||
{ 0xaa, M680X_INS_ORAA, idxY_hid, inh_hid },
|
||||
{ 0xab, M680X_INS_ADDA, idxY_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CPY, idxY_hid, inh_hid },
|
||||
{ 0xad, M680X_INS_JSR, idxY_hid, inh_hid },
|
||||
{ 0xae, M680X_INS_LDS, idxY_hid, inh_hid },
|
||||
{ 0xaf, M680X_INS_STS, idxY_hid, inh_hid },
|
||||
{ 0xbc, M680X_INS_CPY, ext_hid, inh_hid },
|
||||
{ 0xce, M680X_INS_LDY, imm16_hid, inh_hid },
|
||||
{ 0xde, M680X_INS_LDY, dir_hid, inh_hid },
|
||||
{ 0xdf, M680X_INS_STY, dir_hid, inh_hid },
|
||||
{ 0xe0, M680X_INS_SUBB, idxY_hid, inh_hid },
|
||||
{ 0xe1, M680X_INS_CMPB, idxY_hid, inh_hid },
|
||||
{ 0xe2, M680X_INS_SBCB, idxY_hid, inh_hid },
|
||||
{ 0xe3, M680X_INS_ADDD, idxY_hid, inh_hid },
|
||||
{ 0xe4, M680X_INS_ANDB, idxY_hid, inh_hid },
|
||||
{ 0xe5, M680X_INS_BITB, idxY_hid, inh_hid },
|
||||
{ 0xe6, M680X_INS_LDAB, idxY_hid, inh_hid },
|
||||
{ 0xe7, M680X_INS_STAB, idxY_hid, inh_hid },
|
||||
{ 0xe8, M680X_INS_EORB, idxY_hid, inh_hid },
|
||||
{ 0xe9, M680X_INS_ADCB, idxY_hid, inh_hid },
|
||||
{ 0xea, M680X_INS_ORAB, idxY_hid, inh_hid },
|
||||
{ 0xeb, M680X_INS_ADDB, idxY_hid, inh_hid },
|
||||
{ 0xec, M680X_INS_LDD, idxY_hid, inh_hid },
|
||||
{ 0xed, M680X_INS_STD, idxY_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDY, idxY_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STY, idxY_hid, inh_hid },
|
||||
{ 0xfe, M680X_INS_LDY, ext_hid, inh_hid },
|
||||
{ 0xff, M680X_INS_STY, ext_hid, inh_hid },
|
||||
};
|
||||
|
||||
// M68HC11 PAGE3 instructions
|
||||
static const inst_pageX g_m6811_inst_page3_table[] = {
|
||||
{ 0x83, M680X_INS_CPD, imm16_hid, inh_hid },
|
||||
{ 0x93, M680X_INS_CPD, dir_hid, inh_hid },
|
||||
{ 0xa3, M680X_INS_CPD, idxX_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CPY, idxX_hid, inh_hid },
|
||||
{ 0xb3, M680X_INS_CPD, ext_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDY, idxX_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STY, idxX_hid, inh_hid },
|
||||
};
|
||||
|
||||
// M68HC11 PAGE4 instructions
|
||||
static const inst_pageX g_m6811_inst_page4_table[] = {
|
||||
{ 0xa3, M680X_INS_CPD, idxY_hid, inh_hid },
|
||||
{ 0xac, M680X_INS_CPX, idxY_hid, inh_hid },
|
||||
{ 0xee, M680X_INS_LDX, idxY_hid, inh_hid },
|
||||
{ 0xef, M680X_INS_STX, idxY_hid, inh_hid },
|
||||
};
|
||||
|
||||
+290
@@ -0,0 +1,290 @@
|
||||
// RS08 Instructions
|
||||
static const inst_page1 g_rs08_inst_page1_table[] = {
|
||||
// 0x0x DIR
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x00
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x01
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x02
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x03
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x04
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x05
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x06
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x07
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x08
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x09
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x0A
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x0B
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x0C
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x0D
|
||||
{ M680X_INS_BRSET, dir_hid, inh_hid }, // 0x0E
|
||||
{ M680X_INS_BRCLR, dir_hid, inh_hid }, // 0x0F
|
||||
|
||||
// 0x10 DIR
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x10
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x11
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x12
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x13
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x14
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x15
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x16
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x17
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x18
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x19
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x1A
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x1B
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x1A
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x1D
|
||||
{ M680X_INS_BSET, dir_hid, inh_hid }, // 0x1E
|
||||
{ M680X_INS_BCLR, dir_hid, inh_hid }, // 0x1F
|
||||
|
||||
// 0x2x TNY
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x20
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x21
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x22
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x23
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x24
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x25
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x26
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x27
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x28
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x29
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2A
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2B
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2C
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2D
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2E
|
||||
{ M680X_INS_INC, tny_hid, inh_hid }, // 0x2F
|
||||
|
||||
// 0x3x
|
||||
{ M680X_INS_BRA, rel8_hid, inh_hid }, // 0x30 BRN
|
||||
{ M680X_INS_CBEQA, dir_hid, inh_hid }, // 0x31
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x32
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x33
|
||||
{ M680X_INS_BCC, rel8_hid, inh_hid }, // 0x34
|
||||
{ M680X_INS_BCS, rel8_hid, inh_hid }, // 0x35
|
||||
{ M680X_INS_BNE, rel8_hid, inh_hid }, // 0x36
|
||||
{ M680X_INS_BEQ, rel8_hid, inh_hid }, // 0x37
|
||||
{ M680X_INS_CLC, inh_hid, inh_hid }, // 0x38
|
||||
{ M680X_INS_SEC, inh_hid, inh_hid }, // 0x39
|
||||
{ M680X_INS_DEC, dir_hid, inh_hid }, // 0x3A
|
||||
{ M680X_INS_DBNZ, dir_hid, inh_hid }, // 0x3B
|
||||
{ M680X_INS_INC, dir_hid, inh_hid }, // 0x3C
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x3D
|
||||
{ M680X_INS_MOV, immdir_hid, inh_hid }, // 0x3E
|
||||
{ M680X_INS_CLR, dir_hid, inh_hid }, // 0x3F
|
||||
|
||||
// 0x4x
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x40
|
||||
{ M680X_INS_CBEQA, imm8_hid, inh_hid }, // 0x41
|
||||
{ M680X_INS_SLA, inh_hid, inh_hid }, // 0x42
|
||||
{ M680X_INS_COMA, inh_hid, inh_hid }, // 0x43
|
||||
{ M680X_INS_LSRA, inh_hid, inh_hid }, // 0x44
|
||||
{ M680X_INS_SHA, inh_hid, inh_hid }, // 0x45
|
||||
{ M680X_INS_RORA, inh_hid, inh_hid }, // 0x46
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x47
|
||||
{ M680X_INS_LSLA, inh_hid, inh_hid }, // 0x48
|
||||
{ M680X_INS_ROLA, inh_hid, inh_hid }, // 0x49
|
||||
{ M680X_INS_DECA, inh_hid, inh_hid }, // 0x4A
|
||||
{ M680X_INS_DBNZA, inh_hid, inh_hid }, // 0x4B
|
||||
{ M680X_INS_INCA, inh_hid, inh_hid }, // 0x4C
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0x4D
|
||||
{ M680X_INS_MOV, dirdir_hid, inh_hid }, // 0x4E
|
||||
{ M680X_INS_CLRA, inh_hid, inh_hid }, // 0x4F
|
||||
|
||||
// 0x5x TNY
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0x50
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X51
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X52
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X53
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X54
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X55
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X56
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X57
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X58
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X59
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5A
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5B
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5C
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5D
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5E
|
||||
{ M680X_INS_DEC, tny_hid, inh_hid }, // 0X5F
|
||||
|
||||
// 0x6x TNY
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x60
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x61
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x62
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x63
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x64
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x65
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x66
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x67
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x68
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x69
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6A
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6B
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6C
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6D
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6E
|
||||
{ M680X_INS_ADD, tny_hid, inh_hid }, // 0x6F
|
||||
|
||||
// 0x7x TNY
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x70
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x71
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x72
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x73
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x74
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x75
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x76
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x77
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x78
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x79
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x7A
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x7B
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x70
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x7D
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x7E
|
||||
{ M680X_INS_SUB, tny_hid, inh_hid }, // 0x7F
|
||||
|
||||
// 0x8x SRT
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x80
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x81
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x82
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x83
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x84
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x85
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x86
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x87
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x88
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x89
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8A
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8B
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8C
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8D
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8E
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x8F
|
||||
|
||||
// 0x9x SRT
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x90
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x91
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x92
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x93
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x94
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x95
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x96
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x97
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x98
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x99
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9A
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9B
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9C
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9D
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9E
|
||||
{ M680X_INS_CLR, srt_hid, inh_hid }, // 0x9F
|
||||
|
||||
// 0xAx
|
||||
{ M680X_INS_SUB, imm8_hid, inh_hid }, // 0xA0
|
||||
{ M680X_INS_CMP, imm8_hid, inh_hid }, // 0xA1
|
||||
{ M680X_INS_SBC, imm8_hid, inh_hid }, // 0xA2
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0xA3
|
||||
{ M680X_INS_AND, imm8_hid, inh_hid }, // 0xA4
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0xA5
|
||||
{ M680X_INS_LDA, imm8_hid, inh_hid }, // 0xA6
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0xA7
|
||||
{ M680X_INS_EOR, imm8_hid, inh_hid }, // 0xA8
|
||||
{ M680X_INS_ADC, imm8_hid, inh_hid }, // 0xA9
|
||||
{ M680X_INS_ORA, imm8_hid, inh_hid }, // 0xAA
|
||||
{ M680X_INS_ADD, imm8_hid, inh_hid }, // 0xAB
|
||||
{ M680X_INS_NOP, inh_hid, inh_hid }, // 0xAC
|
||||
{ M680X_INS_BSR, rel8_hid, inh_hid }, // 0xAD
|
||||
{ M680X_INS_STOP, inh_hid, inh_hid }, // 0xAE
|
||||
{ M680X_INS_WAIT, inh_hid, inh_hid }, // 0xAF
|
||||
|
||||
// 0xBx DIR
|
||||
{ M680X_INS_SUB, dir_hid, inh_hid }, // 0xB0
|
||||
{ M680X_INS_CMP, dir_hid, inh_hid }, // 0xB1
|
||||
{ M680X_INS_SBC, dir_hid, inh_hid }, // 0xB2
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0xB3
|
||||
{ M680X_INS_AND, dir_hid, inh_hid }, // 0xB4
|
||||
{ M680X_INS_ILLGL, inh_hid, inh_hid }, // 0xB5
|
||||
{ M680X_INS_LDA, dir_hid, inh_hid }, // 0xB6
|
||||
{ M680X_INS_STA, dir_hid, inh_hid }, // 0xB7
|
||||
{ M680X_INS_EOR, dir_hid, inh_hid }, // 0xB8
|
||||
{ M680X_INS_ADC, dir_hid, inh_hid }, // 0xB9
|
||||
{ M680X_INS_ORA, dir_hid, inh_hid }, // 0xBA
|
||||
{ M680X_INS_ADD, dir_hid, inh_hid }, // 0xBB
|
||||
{ M680X_INS_JMP, ext_hid, inh_hid }, // 0xBC
|
||||
{ M680X_INS_JSR, ext_hid, inh_hid }, // 0xBD
|
||||
{ M680X_INS_RTS, inh_hid, inh_hid }, // 0xBE
|
||||
{ M680X_INS_BGND, inh_hid, inh_hid }, // 0xBF
|
||||
|
||||
// 0xCx SRT
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC0
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC1
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC2
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC3
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC4
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC5
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC6
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC7
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC8
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xC9
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCA
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCB
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCC
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCD
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCE
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xCF
|
||||
|
||||
// 0xDx SRT
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD0
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD1
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD2
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD3
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD4
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD5
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD6
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD7
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD8
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xD9
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDA
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDB
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDC
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDD
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDE
|
||||
{ M680X_INS_LDA, srt_hid, inh_hid }, // 0xDF
|
||||
|
||||
// 0xEx SRT
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE0
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE1
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE2
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE3
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE4
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE5
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE6
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE7
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE8
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xE9
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xEA
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xEB
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xEC
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xED
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xEE
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xEF
|
||||
|
||||
// 0xFx SRT
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF0
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF1
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF2
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF3
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF4
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF5
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF6
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF7
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF8
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xF9
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFA
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFB
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFC
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFD
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFE
|
||||
{ M680X_INS_STA, srt_hid, inh_hid }, // 0xFF
|
||||
};
|
||||
Reference in New Issue
Block a user