1
0
mirror of https://github.com/mre/mos6502.git synced 2024-06-04 03:29:27 +00:00

add a single variant: the NMOS one

This commit is contained in:
Sam M W 2023-08-27 21:40:04 +01:00
parent 4a2d15f8a7
commit f4d88c7bf0

View File

@ -154,519 +154,267 @@ impl AddressingMode {
pub type DecodedInstr = (Instruction, OpInput);
/*
pub static OPCODES: [Option<(Instruction, AddressingMode)>; 256] = [
//0x00
Some((Instruction::BRK, AddressingMode::Implied)),
//0x01
Some((Instruction::ORA, AddressingMode::IndexedIndirectX)),
//0x02
None,
//0x03
None,
//0x04
None,
//0x05
Some((Instruction::ORA, AddressingMode::ZeroPage)),
//0x06
Some((Instruction::ASL, AddressingMode::ZeroPage)),
//0x07
None,
//0x08
Some((Instruction::PHP, AddressingMode::Implied)),
//0x09
Some((Instruction::ORA, AddressingMode::Immediate)),
//0x0A
Some((Instruction::ASL, AddressingMode::Accumulator)),
//0x0B
None,
//0x0C
None,
//0x0D
Some((Instruction::ORA, AddressingMode::Absolute)),
//0x0E
Some((Instruction::ASL, AddressingMode::Absolute)),
//0x0F
None,
//0x10
Some((Instruction::BPL, AddressingMode::Relative)),
//0x11
Some((Instruction::ORA, AddressingMode::IndirectIndexedY)),
//0x12
None,
//0x13
None,
//0x14
None,
//0x15
Some((Instruction::ORA, AddressingMode::ZeroPageX)),
//0x16
Some((Instruction::ASL, AddressingMode::ZeroPageX)),
//0x17
None,
//0x18
Some((Instruction::CLC, AddressingMode::Implied)),
//0x19
Some((Instruction::ORA, AddressingMode::AbsoluteY)),
//0x1A
None,
//0x1B
None,
//0x1C
None,
//0x1D
Some((Instruction::ORA, AddressingMode::AbsoluteX)),
//0x1E
Some((Instruction::ASL, AddressingMode::AbsoluteX)),
//0x1F
None,
//0x20
Some((Instruction::JSR, AddressingMode::Absolute)),
//0x21
Some((Instruction::AND, AddressingMode::IndexedIndirectX)),
//0x22
None,
//0x23
None,
//0x24
Some((Instruction::BIT, AddressingMode::ZeroPage)),
//0x25
Some((Instruction::AND, AddressingMode::ZeroPage)),
//0x26
Some((Instruction::ROL, AddressingMode::ZeroPage)),
//0x27
None,
//0x28
Some((Instruction::PLP, AddressingMode::Implied)),
//0x29
Some((Instruction::AND, AddressingMode::Immediate)),
//0x2A
Some((Instruction::ROL, AddressingMode::Accumulator)),
//0x2B
None,
//0x2C
Some((Instruction::BIT, AddressingMode::Absolute)),
//0x2D
Some((Instruction::AND, AddressingMode::Absolute)),
//0x2E
Some((Instruction::ROL, AddressingMode::Absolute)),
//0x2F
None,
//0x30
Some((Instruction::BMI, AddressingMode::Relative)),
//0x31
Some((Instruction::AND, AddressingMode::IndirectIndexedY)),
//0x32
None,
//0x33
None,
//0x34
None,
//0x35
Some((Instruction::AND, AddressingMode::ZeroPageX)),
//0x36
Some((Instruction::ROL, AddressingMode::ZeroPageX)),
//0x37
None,
//0x38
Some((Instruction::SEC, AddressingMode::Implied)),
//0x39
Some((Instruction::AND, AddressingMode::AbsoluteY)),
//0x3A
None,
//0x3B
None,
//0x3C
None,
//0x3D
Some((Instruction::AND, AddressingMode::AbsoluteX)),
//0x3E
Some((Instruction::ROL, AddressingMode::AbsoluteX)),
//0x3F
None,
//0x40
Some((Instruction::RTI, AddressingMode::Implied)),
//0x41
Some((Instruction::EOR, AddressingMode::IndexedIndirectX)),
//0x42
None,
//0x43
None,
//0x44
None,
//0x45
Some((Instruction::EOR, AddressingMode::ZeroPage)),
//0x46
Some((Instruction::LSR, AddressingMode::ZeroPage)),
//0x47
None,
//0x48
Some((Instruction::PHA, AddressingMode::Implied)),
//0x49
Some((Instruction::EOR, AddressingMode::Immediate)),
//0x4A
Some((Instruction::LSR, AddressingMode::Accumulator)),
//0x4B
None,
//0x4C
Some((Instruction::JMP, AddressingMode::Absolute)),
//0x4D
Some((Instruction::EOR, AddressingMode::Absolute)),
//0x4E
Some((Instruction::LSR, AddressingMode::Absolute)),
//0x4F
None,
//0x50
Some((Instruction::BVC, AddressingMode::Relative)),
//0x51
Some((Instruction::EOR, AddressingMode::IndirectIndexedY)),
//0x52
None,
//0x53
None,
//0x54
None,
//0x55
Some((Instruction::EOR, AddressingMode::ZeroPageX)),
//0x56
Some((Instruction::LSR, AddressingMode::ZeroPageX)),
//0x57
None,
//0x58
Some((Instruction::CLI, AddressingMode::Implied)),
//0x59
Some((Instruction::EOR, AddressingMode::AbsoluteY)),
//0x5A
None,
//0x5B
None,
//0x5C
None,
//0x5D
Some((Instruction::EOR, AddressingMode::AbsoluteX)),
//0x5E
Some((Instruction::LSR, AddressingMode::AbsoluteX)),
//0x5F
None,
//0x60
Some((Instruction::RTS, AddressingMode::Implied)),
//0x61
Some((Instruction::ADC, AddressingMode::IndexedIndirectX)),
//0x62
None,
//0x63
None,
//0x64
None,
//0x65
Some((Instruction::ADC, AddressingMode::ZeroPage)),
//0x66
Some((Instruction::ROR, AddressingMode::ZeroPage)),
//0x67
None,
//0x68
Some((Instruction::PLA, AddressingMode::Implied)),
//0x69
Some((Instruction::ADC, AddressingMode::Immediate)),
//0x6A
Some((Instruction::ROR, AddressingMode::Accumulator)),
//0x6B
None,
//0x6C
Some((Instruction::JMP, AddressingMode::Indirect)),
//0x6D
Some((Instruction::ADC, AddressingMode::Absolute)),
//0x6E
Some((Instruction::ROR, AddressingMode::Absolute)),
//0x6F
None,
//0x70
Some((Instruction::BVS, AddressingMode::Relative)),
//0x71
Some((Instruction::ADC, AddressingMode::IndirectIndexedY)),
//0x72
None,
//0x73
None,
//0x74
None,
//0x75
Some((Instruction::ADC, AddressingMode::ZeroPageX)),
//0x76
Some((Instruction::ROR, AddressingMode::ZeroPageX)),
//0x77
None,
//0x78
Some((Instruction::SEI, AddressingMode::Implied)),
//0x79
Some((Instruction::ADC, AddressingMode::AbsoluteY)),
//0x7A
None,
//0x7B
None,
//0x7C
None,
//0x7D
Some((Instruction::ADC, AddressingMode::AbsoluteX)),
//0x7E
Some((Instruction::ROR, AddressingMode::AbsoluteX)),
//0x7F
None,
//0x80
None,
//0x81
Some((Instruction::STA, AddressingMode::IndexedIndirectX)),
//0x82
None,
//0x83
None,
//0x84
Some((Instruction::STY, AddressingMode::ZeroPage)),
//0x85
Some((Instruction::STA, AddressingMode::ZeroPage)),
//0x86
Some((Instruction::STX, AddressingMode::ZeroPage)),
//0x87
None,
//0x88
Some((Instruction::DEY, AddressingMode::Implied)),
//0x89
None,
//0x8A
Some((Instruction::TXA, AddressingMode::Implied)),
//0x8B
None,
//0x8C
Some((Instruction::STY, AddressingMode::Absolute)),
//0x8D
Some((Instruction::STA, AddressingMode::Absolute)),
//0x8E
Some((Instruction::STX, AddressingMode::Absolute)),
//0x8F
None,
//0x90
Some((Instruction::BCC, AddressingMode::Relative)),
//0x91
Some((Instruction::STA, AddressingMode::IndirectIndexedY)),
//0x92
None,
//0x93
None,
//0x94
Some((Instruction::STY, AddressingMode::ZeroPageX)),
//0x95
Some((Instruction::STA, AddressingMode::ZeroPageX)),
//0x96
Some((Instruction::STX, AddressingMode::ZeroPageY)),
//0x97
None,
//0x98
Some((Instruction::TYA, AddressingMode::Implied)),
//0x99
Some((Instruction::STA, AddressingMode::AbsoluteY)),
//0x9A
Some((Instruction::TXS, AddressingMode::Implied)),
//0x9B
None,
//0x9C
None,
//0x9D
Some((Instruction::STA, AddressingMode::AbsoluteX)),
//0x9E
None,
//0x9F
None,
//0xA0
Some((Instruction::LDY, AddressingMode::Immediate)),
//0xA1
Some((Instruction::LDA, AddressingMode::IndexedIndirectX)),
//0xA2
Some((Instruction::LDX, AddressingMode::Immediate)),
//0xA3
None,
//0xA4
Some((Instruction::LDY, AddressingMode::ZeroPage)),
//0xA5
Some((Instruction::LDA, AddressingMode::ZeroPage)),
//0xA6
Some((Instruction::LDX, AddressingMode::ZeroPage)),
//0xA7
None,
//0xA8
Some((Instruction::TAY, AddressingMode::Implied)),
//0xA9
Some((Instruction::LDA, AddressingMode::Immediate)),
//0xAA
Some((Instruction::TAX, AddressingMode::Implied)),
//0xAB
None,
//0xAC
Some((Instruction::LDY, AddressingMode::Absolute)),
//0xAD
Some((Instruction::LDA, AddressingMode::Absolute)),
//0xAE
Some((Instruction::LDX, AddressingMode::Absolute)),
//0xAF
None,
//0xB0
Some((Instruction::BCS, AddressingMode::Relative)),
//0xB1
Some((Instruction::LDA, AddressingMode::IndirectIndexedY)),
//0xB2
None,
//0xB3
None,
//0xB4
Some((Instruction::LDY, AddressingMode::ZeroPageX)),
//0xB5
Some((Instruction::LDA, AddressingMode::ZeroPageX)),
//0xB6
Some((Instruction::LDX, AddressingMode::ZeroPageY)),
//0xB7
None,
//0xB8
Some((Instruction::CLV, AddressingMode::Implied)),
//0xB9
Some((Instruction::LDA, AddressingMode::AbsoluteY)),
//0xBA
Some((Instruction::TSX, AddressingMode::Implied)),
//0xBB
None,
//0xBC
Some((Instruction::LDY, AddressingMode::AbsoluteX)),
//0xBD
Some((Instruction::LDA, AddressingMode::AbsoluteX)),
//0xBE
Some((Instruction::LDX, AddressingMode::AbsoluteY)),
//0xBF
None,
//0xC0
Some((Instruction::CPY, AddressingMode::Immediate)),
//0xC1
Some((Instruction::CMP, AddressingMode::IndexedIndirectX)),
//0xC2
None,
//0xC3
None,
//0xC4
Some((Instruction::CPY, AddressingMode::ZeroPage)),
//0xC5
Some((Instruction::CMP, AddressingMode::ZeroPage)),
//0xC6
Some((Instruction::DEC, AddressingMode::ZeroPage)),
//0xC7
None,
//0xC8
Some((Instruction::INY, AddressingMode::Implied)),
//0xC9
Some((Instruction::CMP, AddressingMode::Immediate)),
//0xCA
Some((Instruction::DEX, AddressingMode::Implied)),
//0xCB
None,
//0xCC
Some((Instruction::CPY, AddressingMode::Absolute)),
//0xCD
Some((Instruction::CMP, AddressingMode::Absolute)),
//0xCE
Some((Instruction::DEC, AddressingMode::Absolute)),
//0xCF
None,
//0xD0
Some((Instruction::BNE, AddressingMode::Relative)),
//0xD1
Some((Instruction::CMP, AddressingMode::IndirectIndexedY)),
//0xD2
None,
//0xD3
None,
//0xD4
None,
//0xD5
Some((Instruction::CMP, AddressingMode::ZeroPageX)),
//0xD6
Some((Instruction::DEC, AddressingMode::ZeroPageX)),
//0xD7
None,
//0xD8
Some((Instruction::CLD, AddressingMode::Implied)),
//0xD9
Some((Instruction::CMP, AddressingMode::AbsoluteY)),
//0xDA
None,
//0xDB
None,
//0xDC
None,
//0xDD
Some((Instruction::CMP, AddressingMode::AbsoluteX)),
//0xDE
Some((Instruction::DEC, AddressingMode::AbsoluteX)),
//0xDF
None,
//0xE0
Some((Instruction::CPX, AddressingMode::Immediate)),
//0xE1
Some((Instruction::SBC, AddressingMode::IndexedIndirectX)),
//0xE2
None,
//0xE3
None,
//0xE4
Some((Instruction::CPX, AddressingMode::ZeroPage)),
//0xE5
Some((Instruction::SBC, AddressingMode::ZeroPage)),
//0xE6
Some((Instruction::INC, AddressingMode::ZeroPage)),
//0xE7
None,
//0xE8
Some((Instruction::INX, AddressingMode::Implied)),
//0xE9
Some((Instruction::SBC, AddressingMode::Immediate)),
//0xEA
Some((Instruction::NOP, AddressingMode::Implied)),
//0xEB
None,
//0xEC
Some((Instruction::CPX, AddressingMode::Absolute)),
//0xED
Some((Instruction::SBC, AddressingMode::Absolute)),
//0xEE
Some((Instruction::INC, AddressingMode::Absolute)),
//0xEF
None,
//0xF0
Some((Instruction::BEQ, AddressingMode::Relative)),
//0xF1
Some((Instruction::SBC, AddressingMode::IndirectIndexedY)),
//0xF2
None,
//0xF3
None,
//0xF4
None,
//0xF5
Some((Instruction::SBC, AddressingMode::ZeroPageX)),
//0xF6
Some((Instruction::INC, AddressingMode::ZeroPageX)),
//0xF7
None,
//0xF8
Some((Instruction::SED, AddressingMode::Implied)),
//0xF9
Some((Instruction::SBC, AddressingMode::AbsoluteY)),
//0xFA
None,
//0xFB
None,
//0xFC
None,
//0xFD
Some((Instruction::SBC, AddressingMode::AbsoluteX)),
//0xFE
Some((Instruction::INC, AddressingMode::AbsoluteX)),
//0xFF
None,
];
*/
pub struct Nmos6502;
impl crate::Variant for Nmos6502 {
fn decode(opcode: u8) -> Option<(Instruction, AddressingMode)> {
match opcode {
0x00 => Some((Instruction::BRK, AddressingMode::Implied)),
0x01 => Some((Instruction::ORA, AddressingMode::IndexedIndirectX)),
0x02 => None,
0x03 => None,
0x04 => None,
0x05 => Some((Instruction::ORA, AddressingMode::ZeroPage)),
0x06 => Some((Instruction::ASL, AddressingMode::ZeroPage)),
0x07 => None,
0x08 => Some((Instruction::PHP, AddressingMode::Implied)),
0x09 => Some((Instruction::ORA, AddressingMode::Immediate)),
0x0a => Some((Instruction::ASL, AddressingMode::Accumulator)),
0x0b => None,
0x0c => None,
0x0d => Some((Instruction::ORA, AddressingMode::Absolute)),
0x0e => Some((Instruction::ASL, AddressingMode::Absolute)),
0x0f => None,
0x10 => Some((Instruction::BPL, AddressingMode::Relative)),
0x11 => Some((Instruction::ORA, AddressingMode::IndirectIndexedY)),
0x12 => None,
0x13 => None,
0x14 => None,
0x15 => Some((Instruction::ORA, AddressingMode::ZeroPageX)),
0x16 => Some((Instruction::ASL, AddressingMode::ZeroPageX)),
0x17 => None,
0x18 => Some((Instruction::CLC, AddressingMode::Implied)),
0x19 => Some((Instruction::ORA, AddressingMode::AbsoluteY)),
0x1a => None,
0x1b => None,
0x1c => None,
0x1d => Some((Instruction::ORA, AddressingMode::AbsoluteX)),
0x1e => Some((Instruction::ASL, AddressingMode::AbsoluteX)),
0x1f => None,
0x20 => Some((Instruction::JSR, AddressingMode::Absolute)),
0x21 => Some((Instruction::AND, AddressingMode::IndexedIndirectX)),
0x22 => None,
0x23 => None,
0x24 => Some((Instruction::BIT, AddressingMode::ZeroPage)),
0x25 => Some((Instruction::AND, AddressingMode::ZeroPage)),
0x26 => Some((Instruction::ROL, AddressingMode::ZeroPage)),
0x27 => None,
0x28 => Some((Instruction::PLP, AddressingMode::Implied)),
0x29 => Some((Instruction::AND, AddressingMode::Immediate)),
0x2a => Some((Instruction::ROL, AddressingMode::Accumulator)),
0x2b => None,
0x2c => Some((Instruction::BIT, AddressingMode::Absolute)),
0x2d => Some((Instruction::AND, AddressingMode::Absolute)),
0x2e => Some((Instruction::ROL, AddressingMode::Absolute)),
0x2f => None,
0x30 => Some((Instruction::BMI, AddressingMode::Relative)),
0x31 => Some((Instruction::AND, AddressingMode::IndirectIndexedY)),
0x32 => None,
0x33 => None,
0x34 => None,
0x35 => Some((Instruction::AND, AddressingMode::ZeroPageX)),
0x36 => Some((Instruction::ROL, AddressingMode::ZeroPageX)),
0x37 => None,
0x38 => Some((Instruction::SEC, AddressingMode::Implied)),
0x39 => Some((Instruction::AND, AddressingMode::AbsoluteY)),
0x3a => None,
0x3b => None,
0x3c => None,
0x3d => Some((Instruction::AND, AddressingMode::AbsoluteX)),
0x3e => Some((Instruction::ROL, AddressingMode::AbsoluteX)),
0x3f => None,
0x40 => Some((Instruction::RTI, AddressingMode::Implied)),
0x41 => Some((Instruction::EOR, AddressingMode::IndexedIndirectX)),
0x42 => None,
0x43 => None,
0x44 => None,
0x45 => Some((Instruction::EOR, AddressingMode::ZeroPage)),
0x46 => Some((Instruction::LSR, AddressingMode::ZeroPage)),
0x47 => None,
0x48 => Some((Instruction::PHA, AddressingMode::Implied)),
0x49 => Some((Instruction::EOR, AddressingMode::Immediate)),
0x4a => Some((Instruction::LSR, AddressingMode::Accumulator)),
0x4b => None,
0x4c => Some((Instruction::JMP, AddressingMode::Absolute)),
0x4d => Some((Instruction::EOR, AddressingMode::Absolute)),
0x4e => Some((Instruction::LSR, AddressingMode::Absolute)),
0x4f => None,
0x50 => Some((Instruction::BVC, AddressingMode::Relative)),
0x51 => Some((Instruction::EOR, AddressingMode::IndirectIndexedY)),
0x52 => None,
0x53 => None,
0x54 => None,
0x55 => Some((Instruction::EOR, AddressingMode::ZeroPageX)),
0x56 => Some((Instruction::LSR, AddressingMode::ZeroPageX)),
0x57 => None,
0x58 => Some((Instruction::CLI, AddressingMode::Implied)),
0x59 => Some((Instruction::EOR, AddressingMode::AbsoluteY)),
0x5a => None,
0x5b => None,
0x5c => None,
0x5d => Some((Instruction::EOR, AddressingMode::AbsoluteX)),
0x5e => Some((Instruction::LSR, AddressingMode::AbsoluteX)),
0x5f => None,
0x60 => Some((Instruction::RTS, AddressingMode::Implied)),
0x61 => Some((Instruction::ADC, AddressingMode::IndexedIndirectX)),
0x62 => None,
0x63 => None,
0x64 => None,
0x65 => Some((Instruction::ADC, AddressingMode::ZeroPage)),
0x66 => Some((Instruction::ROR, AddressingMode::ZeroPage)),
0x67 => None,
0x68 => Some((Instruction::PLA, AddressingMode::Implied)),
0x69 => Some((Instruction::ADC, AddressingMode::Immediate)),
0x6a => Some((Instruction::ROR, AddressingMode::Accumulator)),
0x6b => None,
0x6c => Some((Instruction::JMP, AddressingMode::Indirect)),
0x6d => Some((Instruction::ADC, AddressingMode::Absolute)),
0x6e => Some((Instruction::ROR, AddressingMode::Absolute)),
0x6f => None,
0x70 => Some((Instruction::BVS, AddressingMode::Relative)),
0x71 => Some((Instruction::ADC, AddressingMode::IndirectIndexedY)),
0x72 => None,
0x73 => None,
0x74 => None,
0x75 => Some((Instruction::ADC, AddressingMode::ZeroPageX)),
0x76 => Some((Instruction::ROR, AddressingMode::ZeroPageX)),
0x77 => None,
0x78 => Some((Instruction::SEI, AddressingMode::Implied)),
0x79 => Some((Instruction::ADC, AddressingMode::AbsoluteY)),
0x7a => None,
0x7b => None,
0x7c => None,
0x7d => Some((Instruction::ADC, AddressingMode::AbsoluteX)),
0x7e => Some((Instruction::ROR, AddressingMode::AbsoluteX)),
0x7f => None,
0x80 => None,
0x81 => Some((Instruction::STA, AddressingMode::IndexedIndirectX)),
0x82 => None,
0x83 => None,
0x84 => Some((Instruction::STY, AddressingMode::ZeroPage)),
0x85 => Some((Instruction::STA, AddressingMode::ZeroPage)),
0x86 => Some((Instruction::STX, AddressingMode::ZeroPage)),
0x87 => None,
0x88 => Some((Instruction::DEY, AddressingMode::Implied)),
0x89 => None,
0x8a => Some((Instruction::TXA, AddressingMode::Implied)),
0x8b => None,
0x8c => Some((Instruction::STY, AddressingMode::Absolute)),
0x8d => Some((Instruction::STA, AddressingMode::Absolute)),
0x8e => Some((Instruction::STX, AddressingMode::Absolute)),
0x8f => None,
0x90 => Some((Instruction::BCC, AddressingMode::Relative)),
0x91 => Some((Instruction::STA, AddressingMode::IndirectIndexedY)),
0x92 => None,
0x93 => None,
0x94 => Some((Instruction::STY, AddressingMode::ZeroPageX)),
0x95 => Some((Instruction::STA, AddressingMode::ZeroPageX)),
0x96 => Some((Instruction::STX, AddressingMode::ZeroPageY)),
0x97 => None,
0x98 => Some((Instruction::TYA, AddressingMode::Implied)),
0x99 => Some((Instruction::STA, AddressingMode::AbsoluteY)),
0x9a => Some((Instruction::TXS, AddressingMode::Implied)),
0x9b => None,
0x9c => None,
0x9d => Some((Instruction::STA, AddressingMode::AbsoluteX)),
0x9e => None,
0x9f => None,
0xa0 => Some((Instruction::LDY, AddressingMode::Immediate)),
0xa1 => Some((Instruction::LDA, AddressingMode::IndexedIndirectX)),
0xa2 => Some((Instruction::LDX, AddressingMode::Immediate)),
0xa3 => None,
0xa4 => Some((Instruction::LDY, AddressingMode::ZeroPage)),
0xa5 => Some((Instruction::LDA, AddressingMode::ZeroPage)),
0xa6 => Some((Instruction::LDX, AddressingMode::ZeroPage)),
0xa7 => None,
0xa8 => Some((Instruction::TAY, AddressingMode::Implied)),
0xa9 => Some((Instruction::LDA, AddressingMode::Immediate)),
0xaa => Some((Instruction::TAX, AddressingMode::Implied)),
0xab => None,
0xac => Some((Instruction::LDY, AddressingMode::Absolute)),
0xad => Some((Instruction::LDA, AddressingMode::Absolute)),
0xae => Some((Instruction::LDX, AddressingMode::Absolute)),
0xaf => None,
0xb0 => Some((Instruction::BCS, AddressingMode::Relative)),
0xb1 => Some((Instruction::LDA, AddressingMode::IndirectIndexedY)),
0xb2 => None,
0xb3 => None,
0xb4 => Some((Instruction::LDY, AddressingMode::ZeroPageX)),
0xb5 => Some((Instruction::LDA, AddressingMode::ZeroPageX)),
0xb6 => Some((Instruction::LDX, AddressingMode::ZeroPageY)),
0xb7 => None,
0xb8 => Some((Instruction::CLV, AddressingMode::Implied)),
0xb9 => Some((Instruction::LDA, AddressingMode::AbsoluteY)),
0xba => Some((Instruction::TSX, AddressingMode::Implied)),
0xbb => None,
0xbc => Some((Instruction::LDY, AddressingMode::AbsoluteX)),
0xbd => Some((Instruction::LDA, AddressingMode::AbsoluteX)),
0xbe => Some((Instruction::LDX, AddressingMode::AbsoluteY)),
0xbf => None,
0xc0 => Some((Instruction::CPY, AddressingMode::Immediate)),
0xc1 => Some((Instruction::CMP, AddressingMode::IndexedIndirectX)),
0xc2 => None,
0xc3 => None,
0xc4 => Some((Instruction::CPY, AddressingMode::ZeroPage)),
0xc5 => Some((Instruction::CMP, AddressingMode::ZeroPage)),
0xc6 => Some((Instruction::DEC, AddressingMode::ZeroPage)),
0xc7 => None,
0xc8 => Some((Instruction::INY, AddressingMode::Implied)),
0xc9 => Some((Instruction::CMP, AddressingMode::Immediate)),
0xca => Some((Instruction::DEX, AddressingMode::Implied)),
0xcb => None,
0xcc => Some((Instruction::CPY, AddressingMode::Absolute)),
0xcd => Some((Instruction::CMP, AddressingMode::Absolute)),
0xce => Some((Instruction::DEC, AddressingMode::Absolute)),
0xcf => None,
0xd0 => Some((Instruction::BNE, AddressingMode::Relative)),
0xd1 => Some((Instruction::CMP, AddressingMode::IndirectIndexedY)),
0xd2 => None,
0xd3 => None,
0xd4 => None,
0xd5 => Some((Instruction::CMP, AddressingMode::ZeroPageX)),
0xd6 => Some((Instruction::DEC, AddressingMode::ZeroPageX)),
0xd7 => None,
0xd8 => Some((Instruction::CLD, AddressingMode::Implied)),
0xd9 => Some((Instruction::CMP, AddressingMode::AbsoluteY)),
0xda => None,
0xdb => None,
0xdc => None,
0xdd => Some((Instruction::CMP, AddressingMode::AbsoluteX)),
0xde => Some((Instruction::DEC, AddressingMode::AbsoluteX)),
0xdf => None,
0xe0 => Some((Instruction::CPX, AddressingMode::Immediate)),
0xe1 => Some((Instruction::SBC, AddressingMode::IndexedIndirectX)),
0xe2 => None,
0xe3 => None,
0xe4 => Some((Instruction::CPX, AddressingMode::ZeroPage)),
0xe5 => Some((Instruction::SBC, AddressingMode::ZeroPage)),
0xe6 => Some((Instruction::INC, AddressingMode::ZeroPage)),
0xe7 => None,
0xe8 => Some((Instruction::INX, AddressingMode::Implied)),
0xe9 => Some((Instruction::SBC, AddressingMode::Immediate)),
0xea => Some((Instruction::NOP, AddressingMode::Implied)),
0xeb => None,
0xec => Some((Instruction::CPX, AddressingMode::Absolute)),
0xed => Some((Instruction::SBC, AddressingMode::Absolute)),
0xee => Some((Instruction::INC, AddressingMode::Absolute)),
0xef => None,
0xf0 => Some((Instruction::BEQ, AddressingMode::Relative)),
0xf1 => Some((Instruction::SBC, AddressingMode::IndirectIndexedY)),
0xf2 => None,
0xf3 => None,
0xf4 => None,
0xf5 => Some((Instruction::SBC, AddressingMode::ZeroPageX)),
0xf6 => Some((Instruction::INC, AddressingMode::ZeroPageX)),
0xf7 => None,
0xf8 => Some((Instruction::SED, AddressingMode::Implied)),
0xf9 => Some((Instruction::SBC, AddressingMode::AbsoluteY)),
0xfa => None,
0xfb => None,
0xfc => None,
0xfd => Some((Instruction::SBC, AddressingMode::AbsoluteX)),
0xfe => Some((Instruction::INC, AddressingMode::AbsoluteX)),
0xff => None,
}
}
}