module cpu.data_d6502; // Opcode names. immutable OP_NAMES_6502 = [ "BRK", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO", "PHP", "ORA", "ASL", "ANC", "NOP", "ORA", "ASL", "SLO", "BPL", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO", "CLC", "ORA", "NOP", "SLO", "NOP", "ORA", "ASL", "SLO", "JSR", "AND", "KIL", "RLA", "BIT", "AND", "ROL", "RLA", "PLP", "AND", "ROL", "ANC", "BIT", "AND", "ROL", "RLA", "BMI", "AND", "KIL", "RLA", "NOP", "AND", "ROL", "RLA", "SEC", "AND", "NOP", "RLA", "NOP", "AND", "ROL", "RLA", "RTI", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE", "PHA", "EOR", "LSR", "ALR", "JMP", "EOR", "LSR", "SRE", "BVC", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE", "CLI", "EOR", "NOP", "SRE", "NOP", "EOR", "LSR", "SRE", "RTS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA", "PLA", "ADC", "ROR", "ARR", "JMP", "ADC", "ROR", "RRA", "BVS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA", "SEI", "ADC", "NOP", "RRA", "NOP", "ADC", "ROR", "RRA", "NOP", "STA", "NOP", "SAX", "STY", "STA", "STX", "SAX", "DEY", "NOP", "TXA", "XAA", "STY", "STA", "STX", "SAX", "BCC", "STA", "KIL", "AHX", "STY", "STA", "STX", "SAX", "TYA", "STA", "TXS", "TAS", "SHY", "STA", "SHX", "AHX", "LDY", "LDA", "LDX", "LAX", "LDY", "LDA", "LDX", "LAX", "TAY", "LDA", "TAX", "LAX", "LDY", "LDA", "LDX", "LAX", "BCS", "LDA", "KIL", "LAX", "LDY", "LDA", "LDX", "LAX", "CLV", "LDA", "TSX", "LAS", "LDY", "LDA", "LDX", "LAX", "CPY", "CMP", "NOP", "DCP", "CPY", "CMP", "DEC", "DCP", "INY", "CMP", "DEX", "AXS", "CPY", "CMP", "DEC", "DCP", "BNE", "CMP", "KIL", "DCP", "NOP", "CMP", "DEC", "DCP", "CLD", "CMP", "NOP", "DCP", "NOP", "CMP", "DEC", "DCP", "CPX", "SBC", "NOP", "ISC", "CPX", "SBC", "INC", "ISC", "INX", "SBC", "NOP", "SBC", "CPX", "SBC", "INC", "ISC", "BEQ", "SBC", "KIL", "ISC", "NOP", "SBC", "INC", "ISC", "SED", "SBC", "NOP", "ISC", "NOP", "SBC", "INC", "ISC" ]; immutable OP_NAMES_65C02 = [ "BRK", "ORA", "NOP", "NOP", "TSB", "ORA", "ASL", "NOP", "PHP", "ORA", "ASL", "NOP", "TSB", "ORA", "ASL", "NOP", "BPL", "ORA", "ORA", "NOP", "TRB", "ORA", "ASL", "NOP", "CLC", "ORA", "INC", "NOP", "TRB", "ORA", "ASL", "NOP", "JSR", "AND", "NOP", "NOP", "BIT", "AND", "ROL", "NOP", "PLP", "AND", "ROL", "NOP", "BIT", "AND", "ROL", "NOP", "BMI", "AND", "AND", "NOP", "BIT", "AND", "ROL", "NOP", "SEC", "AND", "DEC", "NOP", "BIT", "AND", "ROL", "NOP", "RTI", "EOR", "NOP", "NOP", "NOP", "EOR", "LSR", "NOP", "PHA", "EOR", "LSR", "NOP", "JMP", "EOR", "LSR", "NOP", "BVC", "EOR", "EOR", "NOP", "NOP", "EOR", "LSR", "NOP", "CLI", "EOR", "PHY", "NOP", "NOP", "EOR", "LSR", "NOP", "RTS", "ADC", "NOP", "NOP", "STZ", "ADC", "ROR", "NOP", "PLA", "ADC", "ROR", "NOP", "JMP", "ADC", "ROR", "NOP", "BVS", "ADC", "ADC", "NOP", "STZ", "ADC", "ROR", "NOP", "SEI", "ADC", "PLY", "NOP", "JMP", "ADC", "ROR", "NOP", "BRA", "STA", "NOP", "NOP", "STY", "STA", "STX", "NOP", "DEY", "BIT", "TXA", "NOP", "STY", "STA", "STX", "NOP", "BCC", "STA", "STA", "NOP", "STY", "STA", "STX", "NOP", "TYA", "STA", "TXS", "NOP", "STZ", "STA", "STZ", "NOP", "LDY", "LDA", "LDX", "NOP", "LDY", "LDA", "LDX", "NOP", "TAY", "LDA", "TAX", "NOP", "LDY", "LDA", "LDX", "NOP", "BCS", "LDA", "LDA", "NOP", "LDY", "LDA", "LDX", "NOP", "CLV", "LDA", "TSX", "NOP", "LDY", "LDA", "LDX", "NOP", "CPY", "CMP", "NOP", "NOP", "CPY", "CMP", "DEC", "NOP", "INY", "CMP", "DEX", "NOP", "CPY", "CMP", "DEC", "NOP", "BNE", "CMP", "CMP", "NOP", "NOP", "CMP", "DEC", "NOP", "CLD", "CMP", "PHX", "NOP", "NOP", "CMP", "DEC", "NOP", "CPX", "SBC", "NOP", "NOP", "CPX", "SBC", "INC", "NOP", "INX", "SBC", "NOP", "NOP", "CPX", "SBC", "INC", "NOP", "BEQ", "SBC", "SBC", "NOP", "NOP", "SBC", "INC", "NOP", "SED", "SBC", "PLX", "NOP", "NOP", "SBC", "INC", "NOP" ]; // Addressing modes. enum { IMP, IMM, ZP, ZPX, ZPY, IZX, IZY, ABS, ABX, ABY, IND, REL, ZPI, ABI, NP1, NP8, KIL } immutable ADDR_MODES_6502 = [ IMP, IZX, KIL, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX, ABS, IZX, KIL, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX, IMP, IZX, KIL, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX, IMP, IZX, KIL, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, IND, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX, IMM, IZX, IMM, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPY, ZPY, IMP, ABY, IMP, ABY, ABX, ABX, ABY, ABY, IMM, IZX, IMM, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPY, ZPY, IMP, ABY, IMP, ABY, ABX, ABX, ABY, ABY, IMM, IZX, IMM, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX, IMM, IZX, IMM, IZX, ZP, ZP, ZP, ZP, IMP, IMM, IMP, IMM, ABS, ABS, ABS, ABS, REL, IZY, KIL, IZY, ZPX, ZPX, ZPX, ZPX, IMP, ABY, IMP, ABY, ABX, ABX, ABX, ABX ]; immutable ADDR_MODES_65C02 = [ IMP, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZP, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, ABS, ABX, ABX, NP1, ABS, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, ABX, ABX, ABX, NP1, IMP, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, NP8, ABX, ABX, NP1, IMP, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, IND, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, ABI, ABX, ABX, NP1, REL, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPY, NP1, IMP, ABY, IMP, NP1, ABX, ABX, ABX, NP1, IMM, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPY, NP1, IMP, ABY, IMP, NP1, ABX, ABX, ABY, NP1, IMM, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, ABX, ABX, ABX, NP1, IMM, IZX, IMM, NP1, ZP, ZP, ZP, NP1, IMP, IMM, IMP, NP1, ABS, ABS, ABS, NP1, REL, IZY, ZPI, NP1, ZPX, ZPX, ZPX, NP1, IMP, ABY, IMP, NP1, ABX, ABX, ABX, NP1 ]; // Page-crossing extra cycles. immutable EXTRA_CYCLES_6502 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, ]; immutable EXTRA_CYCLES_65C02 = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, ];