Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "EP6502Instr.h"
- #include "6502.h"
- static EP6502Instruction s_instructions[256] = {
- {/*0x00,*/ kMnemonic_BRK, kAddrMode_Implied, 1, 7, 0},
- {/*0x01,*/ kMnemonic_ORA, kAddrMode_IndirectX, 2, 6, 0},
- {/*0x02,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x03,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x04,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x05,*/ kMnemonic_ORA, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0x06,*/ kMnemonic_ASL, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0x07,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x08,*/ kMnemonic_PHP, kAddrMode_Implied, 1, 3, 0},
- {/*0x09,*/ kMnemonic_ORA, kAddrMode_Immediate, 2, 2, 0},
- {/*0x0a,*/ kMnemonic_ASL, kAddrMode_Accumulator, 1, 2, 0},
- {/*0x0b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x0c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x0d,*/ kMnemonic_ORA, kAddrMode_Absolute, 3, 4, 0},
- {/*0x0e,*/ kMnemonic_ASL, kAddrMode_Absolute, 3, 6, 0},
- {/*0x0f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x10,*/ kMnemonic_BPL, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0x11,*/ kMnemonic_ORA, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x12,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x13,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x14,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x15,*/ kMnemonic_ORA, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x16,*/ kMnemonic_ASL, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0x07,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x18,*/ kMnemonic_CLC, kAddrMode_Implied, 1, 2, 0},
- {/*0x19,*/ kMnemonic_ORA, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x1a,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x1b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x1c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x1d,*/ kMnemonic_ORA, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x1e,*/ kMnemonic_ASL, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0x1f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x20,*/ kMnemonic_JSR, kAddrMode_Absolute, 3, 6, 0},
- {/*0x21,*/ kMnemonic_AND, kAddrMode_IndirectX, 2, 6, 0},
- {/*0x22,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x23,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x24,*/ kMnemonic_BIT, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0x25,*/ kMnemonic_AND, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0x26,*/ kMnemonic_ROL, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0x27,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x28,*/ kMnemonic_PLP, kAddrMode_Implied, 1, 4, 0},
- {/*0x29,*/ kMnemonic_AND, kAddrMode_Immediate, 2, 2, 0},
- {/*0x2a,*/ kMnemonic_ROL, kAddrMode_Accumulator, 1, 2, 0},
- {/*0x2b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x2c,*/ kMnemonic_BIT, kAddrMode_Absolute, 3, 4, 0},
- {/*0x2d,*/ kMnemonic_AND, kAddrMode_Absolute, 3, 4, 0},
- {/*0x2e,*/ kMnemonic_ROL, kAddrMode_Absolute, 3, 6, 0},
- {/*0x2f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x30,*/ kMnemonic_BMI, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0x31,*/ kMnemonic_AND, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x32,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x33,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x34,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x35,*/ kMnemonic_AND, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x36,*/ kMnemonic_ROL, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0x37,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x38,*/ kMnemonic_SEC, kAddrMode_Implied, 1, 2, 0},
- {/*0x39,*/ kMnemonic_AND, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x3a,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x3b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x3c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x3d,*/ kMnemonic_AND, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x3e,*/ kMnemonic_ROL, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0x3f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x40,*/ kMnemonic_RTI, kAddrMode_Implied, 1, 6, 0},
- {/*0x41,*/ kMnemonic_EOR, kAddrMode_IndirectX, 2, 6, 0},
- {/*0x42,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x43,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x44,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x45,*/ kMnemonic_EOR, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0x46,*/ kMnemonic_LSR, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0x07,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x48,*/ kMnemonic_PHA, kAddrMode_Implied, 1, 3, 0},
- {/*0x49,*/ kMnemonic_EOR, kAddrMode_Immediate, 2, 2, 0},
- {/*0x4a,*/ kMnemonic_LSR, kAddrMode_Accumulator, 1, 2, 0},
- {/*0x0b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x4c,*/ kMnemonic_JMP, kAddrMode_Absolute, 3, 3, 0},
- {/*0x4d,*/ kMnemonic_EOR, kAddrMode_Absolute, 3, 4, 0},
- {/*0x4e,*/ kMnemonic_LSR, kAddrMode_Absolute, 3, 6, 0},
- {/*0x4f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x50,*/ kMnemonic_BVC, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0x51,*/ kMnemonic_EOR, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x52,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x53,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x54,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x55,*/ kMnemonic_EOR, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x56,*/ kMnemonic_LSR, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0x57,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x58,*/ kMnemonic_CLI, kAddrMode_Implied, 1, 2, 0},
- {/*0x59,*/ kMnemonic_EOR, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x5a,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x5b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x5c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x5d,*/ kMnemonic_EOR, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x5e,*/ kMnemonic_LSR, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0x5f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x60,*/ kMnemonic_RTS, kAddrMode_Implied, 1, 6, 0},
- {/*0x61,*/ kMnemonic_ADC, kAddrMode_IndirectX, 2, 6, 0},
- {/*0x62,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x63,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x64,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x65,*/ kMnemonic_ADC, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0x66,*/ kMnemonic_ROR, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0x67,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x68,*/ kMnemonic_PLA, kAddrMode_Implied, 1, 4, 0},
- {/*0x69,*/ kMnemonic_ADC, kAddrMode_Immediate, 2, 2, 0},
- {/*0x6a,*/ kMnemonic_ROR, kAddrMode_Accumulator, 1, 2, 0},
- {/*0x6b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x6c,*/ kMnemonic_JMP, kAddrMode_Indirect, 3, 5, 0},
- {/*0x6d,*/ kMnemonic_ADC, kAddrMode_Absolute, 3, 4, 0},
- {/*0x6e,*/ kMnemonic_ROR, kAddrMode_Absolute, 3, 6, 0},
- {/*0x6f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x70,*/ kMnemonic_BVS, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0x71,*/ kMnemonic_ADC, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x72,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x73,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x74,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x75,*/ kMnemonic_ADC, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x76,*/ kMnemonic_ROR, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0x77,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x78,*/ kMnemonic_SEI, kAddrMode_Implied, 1, 2, 0},
- {/*0x79,*/ kMnemonic_ADC, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x7a,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x7b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x7c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x7d,*/ kMnemonic_ADC, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0x7e,*/ kMnemonic_ROR, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0x7f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x80,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x81,*/ kMnemonic_STA, kAddrMode_IndirectX, 2, 6, 0},
- {/*0x82,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x83,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x84,*/ kMnemonic_STY, kAddrMode_ZeroPage, 2, 3, 0}, // cycles ???
- {/*0x85,*/ kMnemonic_STA, kAddrMode_ZeroPage, 2, 3, 0}, // cycles ???
- {/*0x86,*/ kMnemonic_STX, kAddrMode_ZeroPage, 2, 3, 0}, // cycles ???
- {/*0x87,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x88,*/ kMnemonic_DEY, kAddrMode_Implied, 1, 2, 0},
- {/*0x89,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x8a,*/ kMnemonic_TXA, kAddrMode_Implied, 1, 2, 0},
- {/*0x8b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x8c,*/ kMnemonic_STY, kAddrMode_Absolute, 3, 4, 0},
- {/*0x8d,*/ kMnemonic_STA, kAddrMode_Absolute, 3, 4, 0},
- {/*0x8e,*/ kMnemonic_STX, kAddrMode_Absolute, 3, 4, 0},
- {/*0x8f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x90,*/ kMnemonic_BCC, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0x91,*/ kMnemonic_STA, kAddrMode_IndirectY, 2, 6, 0},
- {/*0x92,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x93,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x94,*/ kMnemonic_STY, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x95,*/ kMnemonic_STA, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0x96,*/ kMnemonic_STX, kAddrMode_ZeroPageY, 2, 4, 0},
- {/*0x97,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x98,*/ kMnemonic_TYA, kAddrMode_Implied, 1, 2, 0},
- {/*0x99,*/ kMnemonic_STA, kAddrMode_AbsoluteY, 3, 5, 0},
- {/*0x9a,*/ kMnemonic_TXS, kAddrMode_Implied, 1, 2, 0},
- {/*0x9b,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x9c,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x9d,*/ kMnemonic_STA, kAddrMode_AbsoluteX, 3, 5, 0},
- {/*0x9e,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0x9f,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xa0,*/ kMnemonic_LDY, kAddrMode_Immediate, 2, 2, 0},
- {/*0xa1,*/ kMnemonic_LDA, kAddrMode_IndirectX, 2, 6, 0},
- {/*0xa2,*/ kMnemonic_LDX, kAddrMode_Immediate, 2, 2, 0},
- {/*0xa3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xa4,*/ kMnemonic_LDY, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xa5,*/ kMnemonic_LDA, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xa6,*/ kMnemonic_LDX, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xa7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xa8,*/ kMnemonic_TAY, kAddrMode_Implied, 1, 2, 0},
- {/*0xa9,*/ kMnemonic_LDA, kAddrMode_Immediate, 2, 2, 0},
- {/*0xaa,*/ kMnemonic_TAX, kAddrMode_Implied, 1, 2, 0},
- {/*0xab,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xac,*/ kMnemonic_LDY, kAddrMode_Absolute, 3, 4, 0},
- {/*0xad,*/ kMnemonic_LDA, kAddrMode_Absolute, 3, 4, 0},
- {/*0xae,*/ kMnemonic_LDX, kAddrMode_Absolute, 3, 4, 0},
- {/*0xaf,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xb0,*/ kMnemonic_BCS, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0xb1,*/ kMnemonic_LDA, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xb2,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xb3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xb4,*/ kMnemonic_LDY, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0xb5,*/ kMnemonic_LDA, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0xb6,*/ kMnemonic_LDX, kAddrMode_ZeroPageY, 2, 4, 0},
- {/*0xb7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xb8,*/ kMnemonic_CLV, kAddrMode_Implied, 1, 2, 0},
- {/*0xb9,*/ kMnemonic_LDA, kAddrMode_AbsoluteY, 3, 4, 0},
- {/*0xba,*/ kMnemonic_TSX, kAddrMode_Implied, 1, 2, 0},
- {/*0xbb,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xbc,*/ kMnemonic_LDY, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xbd,*/ kMnemonic_LDA, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xbe,*/ kMnemonic_LDX, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xbf,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xc0,*/ kMnemonic_CPY, kAddrMode_Immediate, 2, 2, 0},
- {/*0xc1,*/ kMnemonic_CMP, kAddrMode_IndirectX, 2, 6, 0},
- {/*0xc2,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xc3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xc4,*/ kMnemonic_CPY, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xc5,*/ kMnemonic_CMP, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xc6,*/ kMnemonic_DEC, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0xc7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xc8,*/ kMnemonic_INY, kAddrMode_Implied, 1, 2, 0},
- {/*0xc9,*/ kMnemonic_CMP, kAddrMode_Immediate, 2, 2, 0},
- {/*0xca,*/ kMnemonic_DEX, kAddrMode_Implied, 1, 2, 0},
- {/*0xcb,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xcc,*/ kMnemonic_CPY, kAddrMode_Absolute, 3, 4, 0},
- {/*0xcd,*/ kMnemonic_CMP, kAddrMode_Absolute, 3, 4, 0},
- {/*0xce,*/ kMnemonic_DEC, kAddrMode_Absolute, 3, 6, 0},
- {/*0xcf,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xd0,*/ kMnemonic_BNE, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0xd1,*/ kMnemonic_CMP, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xd2,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xd3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xd4,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xd5,*/ kMnemonic_CMP, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0xd6,*/ kMnemonic_DEC, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0xd7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xd8,*/ kMnemonic_CLD, kAddrMode_Implied, 1, 2, 0},
- {/*0xd9,*/ kMnemonic_CMP, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xda,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xdb,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xdc,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xdd,*/ kMnemonic_CMP, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xde,*/ kMnemonic_DEC, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0xdf,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xe0,*/ kMnemonic_CPX, kAddrMode_Immediate, 2, 2, 0},
- {/*0xe1,*/ kMnemonic_SBC, kAddrMode_IndirectX, 2, 6, 0},
- {/*0xe2,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xe3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xe4,*/ kMnemonic_CPX, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xe5,*/ kMnemonic_SBC, kAddrMode_ZeroPage, 2, 3, 0},
- {/*0xe6,*/ kMnemonic_INC, kAddrMode_ZeroPage, 2, 5, 0},
- {/*0xe7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xe8,*/ kMnemonic_INX, kAddrMode_Implied, 1, 2, 0},
- {/*0xe9,*/ kMnemonic_SBC, kAddrMode_Immediate, 2, 2, 0},
- {/*0xea,*/ kMnemonic_NOP, kAddrMode_Implied, 1, 2, 0},
- {/*0xeb,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xec,*/ kMnemonic_CPX, kAddrMode_Absolute, 3, 4, 0},
- {/*0xed,*/ kMnemonic_SBC, kAddrMode_Absolute, 3, 4, 0},
- {/*0xee,*/ kMnemonic_INC, kAddrMode_Absolute, 3, 6, 0},
- {/*0xef,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xf0,*/ kMnemonic_BEQ, kAddrMode_Relative, 2, 2, kCyclesPlus1IfBranchToSamePage | kCyclesPlus2IfBranchToDiffPage},
- {/*0xf1,*/ kMnemonic_SBC, kAddrMode_IndirectY, 2, 5, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xf2,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xf3,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xf4,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xf5,*/ kMnemonic_SBC, kAddrMode_ZeroPageX, 2, 4, 0},
- {/*0xf6,*/ kMnemonic_INC, kAddrMode_ZeroPageX, 2, 6, 0},
- {/*0xf7,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xf8,*/ kMnemonic_SED, kAddrMode_Implied, 1, 2, 0},
- {/*0xf9,*/ kMnemonic_SBC, kAddrMode_AbsoluteY, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xfa,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xfb,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xfc,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- {/*0xfd,*/ kMnemonic_SBC, kAddrMode_AbsoluteX, 3, 4, kCyclesPlus1IfPageBoundryCrossed},
- {/*0xfe,*/ kMnemonic_INC, kAddrMode_AbsoluteX, 3, 7, 0},
- {/*0xff,*/ kMnemonic_nil, kAddrMode_nil, 0, 0, 0},
- };
- static char s_mnemonics[] =
- "???\0"
- "ADC\0AND\0ASL\0"
- "BCC\0BCS\0BEQ\0BIT\0BMI\0BNE\0BPL\0BRK\0BVC\0BVS\0"
- "CLC\0CLD\0CLI\0CLV\0CMP\0CPX\0CPY\0"
- "DEC\0DEX\0DEY\0"
- "EOR\0"
- "INC\0INX\0INY\0"
- "JMP\0JSR\0"
- "LDA\0LDX\0LDY\0LSR\0"
- "NOP\0"
- "ORA\0"
- "PHA\0PHP\0PLA\0PLP\0"
- "ROL\0ROR\0RTI\0RTS\0"
- "SBC\0SEC\0SED\0SEI\0STA\0STX\0STY\0"
- "TAX\0TAY\0TSX\0TXA\0TXS\0TYA\0";
- #define kMnemonicStrLen 3
- EP6502Instructions::EP6502Instructions()
- {
- instructions = s_instructions;
- }
- UInt8 EP6502Instructions::size(UInt8 opcode)
- {
- const EP6502Instruction* instr = instruction(opcode);
- if (instr->mnemonic == kMnemonic_nil)
- return 0;
- return instr->size;
- }
- UInt8 EP6502Instructions::operandSize(UInt8 opcode)
- {
- const EP6502Instruction* instr = instruction(opcode);
- if (instr->mnemonic == kMnemonic_nil)
- return 0;
- return instr->size - 1;
- }
- const char* EP6502Instructions::GetMnemonicStrFromID(UInt8 mnemonic)
- {
- return s_mnemonics + (mnemonic * (kMnemonicStrLen + 1));
- }
- const char* EP6502Instructions::GetMnemonicStrFromOpcode(UInt8 opcode)
- {
- return s_mnemonics + (s_instructions[opcode].mnemonic * (kMnemonicStrLen + 1));
- }
- UInt8 EP6502Instructions::GetMnemonicFromOpcode(UInt8 opcode)
- {
- return s_instructions[opcode].mnemonic;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement