#define OPNAME(opcode) [opcode] = #opcode
#define CPS 0x00
#define ADC 0x01
#define PHP 0x08
#define PHA 0x09
#define PHY 0x0A
#define PAY 0x0B
#define PHX 0x0C
#define PAX 0x0D
#define JMP 0x10
#define SBC 0x11
#define PLP 0x18
#define PLA 0x19
#define PLY 0x1A
#define PYA 0x1B
#define PLX 0x1C
#define PXA 0x1D
#define JSR 0x20
#define AND 0x21
#define ANY 0x22
#define AAY 0x23
#define ANX 0x24
#define AAX 0x25
#define STT 0x28
#define BPO 0x30
#define ORA 0x31
#define ORY 0x32
#define OAY 0x33
#define ORX 0x34
#define OAX 0x35
#define SEI 0x38
#define BNG 0x40
#define XOR 0x41
#define XRY 0x42
#define XAY 0x43
#define XRX 0x44
#define XAX 0x45
#define CLI 0x48
#define BCS 0x50
#define SLA 0x51
#define SEC 0x58
#define BCC 0x60
#define SRA 0x61
#define CLC 0x68
#define BEQ 0x70
#define ROL 0x71
#define SSP 0x78
#define BNE 0x80
#define ROR 0x81
#define CSP 0x88
#define BVS 0x90
#define MUL 0x91
#define SEV 0x98
#define BVC 0xA0
#define DIV 0xA1
#define CLV 0xA8
#define RTS 0xB0
#define CMP 0xB1
#define CPY 0xB2
#define CAY 0xB3
#define CPX 0xB4
#define CAX 0xB5
#define ENT 0xB8
#define RTI 0xC0
#define INC 0xC1
#define INY 0xC2
#define IAY 0xC3
#define INX 0xC4
#define IAX 0xC5
#define DEC 0xD1
#define DEY 0xD2
#define DAY 0xD3
#define DEX 0xD4
#define DAX 0xD5
#define LDA 0xE1
#define LDY 0xE2
#define LAY 0xE3
#define LDX 0xE4
#define LAX 0xE5
#define NOP 0xE8
#define STA 0xF1
#define STY 0xF2
#define SAY 0xF3
#define STX 0xF4
#define SAX 0xF5
#define BRK 0xF8
#define STP 0xFF
enum {ALU, THREAD, BRANCH, FLAG, MEMORY, MISC};
static const char *opname[0x100] = {
OPNAME(CPS),
OPNAME(ADC),
OPNAME(PHP),
OPNAME(PHA),
OPNAME(PHY),
OPNAME(PAY),
OPNAME(PHX),
OPNAME(PAX),
OPNAME(JMP),
OPNAME(SBC),
OPNAME(PLP),
OPNAME(PLA),
OPNAME(PLY),
OPNAME(PYA),
OPNAME(PLX),
OPNAME(PXA),
OPNAME(JSR),
OPNAME(AND),
OPNAME(ANY),
OPNAME(AAY),
OPNAME(ANX),
OPNAME(AAX),
OPNAME(STT),
OPNAME(BPO),
OPNAME(ORA),
OPNAME(ORY),
OPNAME(OAY),
OPNAME(ORX),
OPNAME(OAX),
OPNAME(SEI),
OPNAME(BNG),
OPNAME(XOR),
OPNAME(XRY),
OPNAME(XAY),
OPNAME(XRX),
OPNAME(XAX),
OPNAME(CLI),
OPNAME(BCS),
OPNAME(SLA),
OPNAME(SEC),
OPNAME(BCC),
OPNAME(SRA),
OPNAME(CLC),
OPNAME(BEQ),
OPNAME(ROL),
OPNAME(SSP),
OPNAME(BNE),
OPNAME(ROR),
OPNAME(CSP),
OPNAME(BVS),
OPNAME(MUL),
OPNAME(SEV),
OPNAME(BVC),
OPNAME(DIV),
OPNAME(CLV),
OPNAME(RTS),
OPNAME(CMP),
OPNAME(CPY),
OPNAME(CAY),
OPNAME(CPX),
OPNAME(CAX),
OPNAME(ENT),
OPNAME(RTI),
OPNAME(INC),
OPNAME(INY),
OPNAME(IAY),
OPNAME(INX),
OPNAME(IAX),
OPNAME(DEC),
OPNAME(DEY),
OPNAME(DAY),
OPNAME(DEX),
OPNAME(DAX),
OPNAME(LDA),
OPNAME(LDY),
OPNAME(LAY),
OPNAME(LDX),
OPNAME(LAX),
OPNAME(NOP),
OPNAME(STA),
OPNAME(STY),
OPNAME(SAY),
OPNAME(STX),
OPNAME(SAX),
OPNAME(BRK),
OPNAME(STP),
};