v6502
The MOS 6502 Virtual Machine and Toolchain Infrastructure
|
Virtual CPU. More...
Go to the source code of this file.
Data Structures | |
struct | v6502_cpu |
Virtual CPU Object. More... | |
Enumerations | |
enum | v6502_opcode { v6502_opcode_brk = 0x00, v6502_opcode_nop = 0xEA, v6502_opcode_clc = 0x18, v6502_opcode_cld = 0xD8, v6502_opcode_cli = 0x58, v6502_opcode_clv = 0xB8, v6502_opcode_sec = 0x38, v6502_opcode_sed = 0xF8, v6502_opcode_sei = 0x78, v6502_opcode_dex = 0xCA, v6502_opcode_dey = 0x88, v6502_opcode_tax = 0xAA, v6502_opcode_tay = 0xA8, v6502_opcode_tsx = 0xBA, v6502_opcode_txa = 0x8A, v6502_opcode_txs = 0x9A, v6502_opcode_tya = 0x98, v6502_opcode_inx = 0xE8, v6502_opcode_iny = 0xC8, v6502_opcode_jsr = 0x20, v6502_opcode_rti = 0x40, v6502_opcode_rts = 0x60, v6502_opcode_pha = 0x48, v6502_opcode_php = 0x08, v6502_opcode_pla = 0x68, v6502_opcode_plp = 0x28, v6502_opcode_bcc = 0x90, v6502_opcode_bcs = 0xB0, v6502_opcode_beq = 0xF0, v6502_opcode_bne = 0xD0, v6502_opcode_bmi = 0x30, v6502_opcode_bpl = 0x10, v6502_opcode_bvc = 0x50, v6502_opcode_bvs = 0x70, v6502_opcode_adc_imm = 0x69, v6502_opcode_adc_zpg = 0x65, v6502_opcode_adc_zpgx = 0x75, v6502_opcode_adc_abs = 0x6D, v6502_opcode_adc_absx = 0x7D, v6502_opcode_adc_absy = 0x79, v6502_opcode_adc_indx = 0x61, v6502_opcode_adc_indy = 0x71, v6502_opcode_and_imm = 0x29, v6502_opcode_and_zpg = 0x25, v6502_opcode_and_zpgx = 0x35, v6502_opcode_and_abs = 0x2D, v6502_opcode_and_absx = 0x3D, v6502_opcode_and_absy = 0x39, v6502_opcode_and_indx = 0x21, v6502_opcode_and_indy = 0x31, v6502_opcode_asl_acc = 0x0A, v6502_opcode_asl_zpg = 0x06, v6502_opcode_asl_zpgx = 0x16, v6502_opcode_asl_abs = 0x0E, v6502_opcode_asl_absx = 0x1E, v6502_opcode_bit_zpg = 0x24, v6502_opcode_bit_abs = 0x2C, v6502_opcode_cmp_imm = 0xC9, v6502_opcode_cmp_zpg = 0xC5, v6502_opcode_cmp_zpgx = 0xD5, v6502_opcode_cmp_abs = 0xCD, v6502_opcode_cmp_absx = 0xDD, v6502_opcode_cmp_absy = 0xD9, v6502_opcode_cmp_indx = 0xC1, v6502_opcode_cmp_indy = 0xD1, v6502_opcode_cpx_imm = 0xE0, v6502_opcode_cpx_zpg = 0xE4, v6502_opcode_cpx_abs = 0xEC, v6502_opcode_cpy_imm = 0xC0, v6502_opcode_cpy_zpg = 0xC4, v6502_opcode_cpy_abs = 0xCC, v6502_opcode_dec_zpg = 0xC6, v6502_opcode_dec_zpgx = 0xD6, v6502_opcode_dec_abs = 0xCE, v6502_opcode_dec_absx = 0xDE, v6502_opcode_eor_imm = 0x49, v6502_opcode_eor_zpg = 0x45, v6502_opcode_eor_zpgx = 0x55, v6502_opcode_eor_abs = 0x4D, v6502_opcode_eor_absx = 0x5D, v6502_opcode_eor_absy = 0x59, v6502_opcode_eor_indx = 0x41, v6502_opcode_eor_indy = 0x51, v6502_opcode_inc_zpg = 0xE6, v6502_opcode_inc_zpgx = 0xF6, v6502_opcode_inc_abs = 0xEE, v6502_opcode_inc_absx = 0xFE, v6502_opcode_jmp_abs = 0x4C, v6502_opcode_jmp_ind = 0x6C, v6502_opcode_ora_imm = 0x09, v6502_opcode_ora_zpg = 0x05, v6502_opcode_ora_zpgx = 0x15, v6502_opcode_ora_abs = 0x0D, v6502_opcode_ora_absx = 0x1D, v6502_opcode_ora_absy = 0x19, v6502_opcode_ora_indx = 0x01, v6502_opcode_ora_indy = 0x11, v6502_opcode_lda_imm = 0xA9, v6502_opcode_lda_zpg = 0xA5, v6502_opcode_lda_zpgx = 0xB5, v6502_opcode_lda_abs = 0xAD, v6502_opcode_lda_absx = 0xBD, v6502_opcode_lda_absy = 0xB9, v6502_opcode_lda_indx = 0xA1, v6502_opcode_lda_indy = 0xB1, v6502_opcode_ldx_imm = 0xA2, v6502_opcode_ldx_zpg = 0xA6, v6502_opcode_ldx_zpgy = 0xB6, v6502_opcode_ldx_abs = 0xAE, v6502_opcode_ldx_absy = 0xBE, v6502_opcode_ldy_imm = 0xA0, v6502_opcode_ldy_zpg = 0xA4, v6502_opcode_ldy_zpgx = 0xB4, v6502_opcode_ldy_abs = 0xAC, v6502_opcode_ldy_absx = 0xBC, v6502_opcode_lsr_acc = 0x4A, v6502_opcode_lsr_zpg = 0x46, v6502_opcode_lsr_zpgx = 0x56, v6502_opcode_lsr_abs = 0x4E, v6502_opcode_lsr_absx = 0x5E, v6502_opcode_rol_acc = 0x2A, v6502_opcode_rol_zpg = 0x26, v6502_opcode_rol_zpgx = 0x36, v6502_opcode_rol_abs = 0x2E, v6502_opcode_rol_absx = 0x3E, v6502_opcode_ror_acc = 0x6A, v6502_opcode_ror_zpg = 0x66, v6502_opcode_ror_zpgx = 0x76, v6502_opcode_ror_abs = 0x6E, v6502_opcode_ror_absx = 0x7E, v6502_opcode_sbc_imm = 0xE9, v6502_opcode_sbc_zpg = 0xE5, v6502_opcode_sbc_zpgx = 0xF5, v6502_opcode_sbc_abs = 0xED, v6502_opcode_sbc_absx = 0xFD, v6502_opcode_sbc_absy = 0xF9, v6502_opcode_sbc_indx = 0xE1, v6502_opcode_sbc_indy = 0xF1, v6502_opcode_sta_zpg = 0x85, v6502_opcode_sta_zpgx = 0x95, v6502_opcode_sta_abs = 0x8D, v6502_opcode_sta_absx = 0x9D, v6502_opcode_sta_absy = 0x99, v6502_opcode_sta_indx = 0x81, v6502_opcode_sta_indy = 0x91, v6502_opcode_stx_zpg = 0x86, v6502_opcode_stx_zpgy = 0x96, v6502_opcode_stx_abs = 0x8E, v6502_opcode_sty_zpg = 0x84, v6502_opcode_sty_zpgx = 0x94, v6502_opcode_sty_abs = 0x8C, v6502_opcode_wai = 0xCB } |
Instruction Set. | |
enum | v6502_cpu_status { v6502_cpu_status_carry = 1 << 0, v6502_cpu_status_zero = 1 << 1, v6502_cpu_status_interrupt = 1 << 2, v6502_cpu_status_decimal = 1 << 3, v6502_cpu_status_break = 1 << 4, v6502_cpu_status_ignored = 1 << 5, v6502_cpu_status_overflow = 1 << 6, v6502_cpu_status_negative = 1 << 7 } |
Status Register Flags. | |
enum | v6502_address_mode { v6502_address_mode_symbol = -2, v6502_address_mode_unknown = -1, v6502_address_mode_implied = 0, v6502_address_mode_accumulator = 1, v6502_address_mode_immediate = 2, v6502_address_mode_absolute = 3, v6502_address_mode_absolute_x = 4, v6502_address_mode_absolute_y = 5, v6502_address_mode_indirect = 6, v6502_address_mode_indirect_x = 7, v6502_address_mode_indirect_y = 8, v6502_address_mode_relative = 9, v6502_address_mode_zeropage = 10, v6502_address_mode_zeropage_x = 11, v6502_address_mode_zeropage_y = 12 } |
Address Modes. | |
Functions | |
v6502_cpu * | v6502_createCPU (void) |
Create a v6502_cpu. | |
void | v6502_destroyCPU (v6502_cpu *cpu) |
Destroy a v6502_cpu. | |
int | v6502_instructionLengthForOpcode (v6502_opcode opcode) |
Return the byte-length of an instruction based on the opcode (See: Karnaugh Map Analysis) | |
v6502_address_mode | v6502_addressModeForOpcode (v6502_opcode opcode) |
Return the v6502_address_mode of an instruction based on the opcode (See: Karnaugh Map Analysis) | |
void | v6502_execute (v6502_cpu *cpu, uint8_t opcode, uint8_t low, uint8_t high) |
Execute an instruction on a v6502_cpu. More... | |
void | v6502_step (v6502_cpu *cpu) |
Single step a v6502_cpu. | |
void | v6502_reset (v6502_cpu *cpu) |
Hardware reset a v6502_cpu. | |
void | v6502_nmi (v6502_cpu *cpu) |
Send an NMI to a v6502_cpu. | |
Virtual CPU.