1
0
mirror of https://github.com/rkujawa/rk65c02.git synced 2024-07-07 01:28:57 +00:00
rk65c02/src/rk65c02.h

311 lines
11 KiB
C
Raw Normal View History

2017-01-16 18:35:28 +00:00
#ifndef _RK6502_H_
#define _RK6502_H_
struct instrdef {
uint8_t op;
const char *mnemonic;
uint8_t mode;
uint8_t size;
};
typedef struct instrdef instrdef_t;
struct instruction {
uint8_t opcode;
instrdef_t def;
uint8_t op1;
uint8_t op2;
};
typedef struct instruction instruction_t;
#define ADDR_IMPLIED 1
#define ADDR_IMMEDIATE 2
#define ADDR_ZP 3
#define ADDR_ZPX 4
#define ADDR_ZPY 5
#define ADDR_IZP 6
#define ADDR_IZPX 7
#define ADDR_IZPY 8
#define ADDR_RELATIVE 9
#define ADDR_ABSOLUTE 10
#define ADDR_ABSOLUTEX 11
#define ADDR_ABSOLUTEY 12
#define ADDR_IABSOLUTE 13
#define ADDR_IABSOLUTEX 14
#define OP_BRK 0x00
#define OP_TSB_ZP 0x04
#define OP_JSR 0x20
#define OP_LDY_IMM 0xA0
#define OP_STP 0xDB
#define OP_INX 0xE8
#define OP_NOP 0xEA
#define OP_UNIMPL 0xFF
const struct instrdef instrs[] = {
{ OP_BRK, "brk", ADDR_IMPLIED, 1 },
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_NOP, "nop", ADDR_IMMEDIATE, 2}, /* invalid */
{ OP_NOP, "nop", ADDR_IMPLIED, 1}, /* invalid */
{ OP_TSB_ZP, "tsb", ADDR_ZP, 2},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_JSR, "jsr", ADDR_ABSOLUTE, 3},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_LDY_IMM, "ldy", ADDR_IMMEDIATE, 2},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_STP, "stp", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_INX, "inx", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_NOP, "nop", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpl", ADDR_IMPLIED, 1},
{ OP_UNIMPL, "unimpllast", ADDR_IMPLIED, 1}
};
#endif /* _RK6502_H_ */