mirror of
https://github.com/ksherlock/x65.git
synced 2024-06-10 09:29:33 +00:00
6502 illegal opcodes (-cpu=6502ill)
- Added illegal instructions since it only needed updating of tables.
This commit is contained in:
parent
c11b09c123
commit
98886793df
48
x65.cpp
48
x65.cpp
|
@ -60,8 +60,15 @@
|
|||
// Max number of exported binary files from a single source
|
||||
#define MAX_EXPORT_FILES 64
|
||||
|
||||
// Maximum number of opcodes, aliases and directives
|
||||
#define MAX_OPCODES_DIRECTIVES 320
|
||||
|
||||
// minor variation of 6502
|
||||
#define NUM_ILLEGAL_6502_OPS 21
|
||||
|
||||
// minor variation of 65C02
|
||||
#define NUM_WDC_65C02_SPECIFIC_OPS 18
|
||||
|
||||
// To simplify some syntax disambiguation the preferred
|
||||
// ruleset can be specified on the command line.
|
||||
enum AsmSyntax {
|
||||
|
@ -362,6 +369,14 @@ enum AddrMode {
|
|||
AMM_JMP = AMM_ABS | AMM_REL,
|
||||
AMM_CPY = AMM_IMM | AMM_ZP | AMM_ABS,
|
||||
|
||||
// 6502 illegal modes
|
||||
AMM_SLO = AMM_ZP | AMM_ZP_X | AMM_ABS | AMM_ABS_Y | AMM_ABS_X | AMM_ZP_REL_X | AMM_ZP_Y_REL,
|
||||
AMM_SAX = AMM_FLIPXY | AMM_ZP | AMM_ZP_X | AMM_ZP_REL_X | AMM_ABS,
|
||||
AMM_LAX = AMM_FLIPXY | AMM_ZP | AMM_ZP_X | AMM_ZP_REL_X | AMM_ABS | AMM_ABS_X,
|
||||
AMM_AHX = AMM_FLIPXY | AMM_ZP_REL_X | AMM_ABS_X,
|
||||
AMM_SHY = AMM_ABS_X,
|
||||
AMM_SHX = AMM_ABS_Y,
|
||||
|
||||
// 65C02 groups
|
||||
AMC_ORA = AMM_ORA | AMM_ZP_REL,
|
||||
AMC_STA = AMM_STA | AMM_ZP_REL,
|
||||
|
@ -455,7 +470,32 @@ struct mnem opcodes_6502[] = {
|
|||
{ "tax", AMM_NON, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa } },
|
||||
{ "tsx", AMM_NON, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba } },
|
||||
{ "dex", AMM_NON, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca } },
|
||||
{ "nop", AMM_NON, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea } }
|
||||
{ "nop", AMM_NON, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea } },
|
||||
|
||||
// 21 ILLEGAL 6502 OPCODES (http://www.oxyron.de/html/opcodes02.html)
|
||||
// NOTE: If adding or removing, update NUM_ILLEGAL_6502_OPS
|
||||
// nam modes (zp,x) zp # $0000 (zp),y zp,x abs,y abs,x (xx) A empty
|
||||
{ "slo", AMM_SLO, { 0x03, 0x07, 0x00, 0x0f, 0x13, 0x17, 0x1b, 0x1f, 0x00, 0x00, 0x00 } },
|
||||
{ "rla", AMM_SLO, { 0x23, 0x27, 0x00, 0x2f, 0x33, 0x37, 0x3b, 0x3f, 0x00, 0x00, 0x00 } },
|
||||
{ "sre", AMM_SLO, { 0x43, 0x47, 0x00, 0x4f, 0x53, 0x57, 0x5b, 0x5f, 0x00, 0x00, 0x00 } },
|
||||
{ "rra", AMM_SLO, { 0x63, 0x67, 0x00, 0x6f, 0x73, 0x77, 0x7b, 0x7f, 0x00, 0x00, 0x00 } },
|
||||
{ "sax", AMM_SAX, { 0x83, 0x87, 0x00, 0x8f, 0x00, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "lax", AMM_LAX, { 0xa3, 0xa7, 0x00, 0xaf, 0xb3, 0xb7, 0x00, 0xbf, 0x00, 0x00, 0x00 } },
|
||||
{ "dcp", AMM_SLO, { 0xc3, 0xc7, 0x00, 0xcf, 0xd3, 0xd7, 0xdb, 0xdf, 0x00, 0x00, 0x00 } },
|
||||
{ "isc", AMM_SLO, { 0xe3, 0xe7, 0x00, 0xef, 0xf3, 0xf7, 0xfb, 0xff, 0x00, 0x00, 0x00 } },
|
||||
{ "anc", AMM_IMM, { 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "aac", AMM_IMM, { 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "alr", AMM_IMM, { 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "arr", AMM_IMM, { 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "xaa", AMM_IMM, { 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{"lax2", AMM_IMM, { 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "axs", AMM_IMM, { 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "sbi", AMM_IMM, { 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "ahx", AMM_AHX, { 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00 } },
|
||||
{ "shy", AMM_SHY, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00 } },
|
||||
{ "shx", AMM_SHX, { 0x00, 0x00, 0x00, 0x00, 0x93, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "tas", AMM_SHX, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00 } },
|
||||
{ "las", AMM_SHX, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00 } },
|
||||
};
|
||||
|
||||
const char* aliases_6502[] = {
|
||||
|
@ -723,12 +763,12 @@ struct CPUDetails {
|
|||
const char* name;
|
||||
const char** aliases;
|
||||
} aCPUs[] = {
|
||||
{ opcodes_6502, num_opcodes_6502, "6502", aliases_6502 },
|
||||
{ opcodes_65C02, num_opcodes_65C02-18, "65C02", aliases_65C02 },
|
||||
{ opcodes_6502, num_opcodes_6502 - NUM_ILLEGAL_6502_OPS, "6502", aliases_6502 },
|
||||
{ opcodes_6502, num_opcodes_6502, "6502ill", aliases_6502 },
|
||||
{ opcodes_65C02, num_opcodes_65C02 - NUM_WDC_65C02_SPECIFIC_OPS, "65C02", aliases_65C02 },
|
||||
{ opcodes_65C02, num_opcodes_65C02, "65C02WDC", aliases_65C02 },
|
||||
{ opcodes_65816, num_opcodes_65816, "65816", aliases_65816 },
|
||||
};
|
||||
|
||||
static const int nCPUs = sizeof(aCPUs) / sizeof(aCPUs[0]);
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user