# m65c02 opcodes adc_c_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP = read(TMP); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP = read(TMP); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } TMP += Y; TMP = read(TMP); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_idx TMP2 = read_pc(); read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_adc(read(TMP)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } do_adc(read(TMP+Y)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_imm TMP = read_pc(); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_zpg TMP = read_pc(); TMP = read(TMP); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_adc(read(TMP)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); adc_c_zpx TMP = read_pc(); read(TMP); TMP = read(UINT8(TMP+X)); do_adc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); and_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A &= read(TMP); set_nz(A); prefetch(); asl_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); bbr_zpb // Access pattern uncertain TMP = read_pc(); TMP2 = read(TMP); TMP = read_pc(); read_pc_noinc(); if(!(TMP2 & (1 << ((inst_state >> 4) & 7)))) { PC += INT8(TMP); } prefetch(); bbs_zpb // Access pattern uncertain TMP = read_pc(); TMP2 = read(TMP); TMP = read_pc(); read_pc_noinc(); if(TMP2 & (1 << ((inst_state >> 4) & 7))) { PC += INT8(TMP); } prefetch(); bit_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; do_bit(read(TMP)); prefetch(); bit_imm TMP = read_pc(); if(A & TMP) P &= ~F_Z; else P |= F_Z; prefetch(); bit_zpx TMP = read_pc(); read(TMP); TMP = read(UINT8(TMP+X)); do_bit(TMP); prefetch(); bra_rel TMP = read_pc(); read_pc_noinc(); if(page_changing(PC, INT8(TMP))) { read_direct(set_l(PC, PC+INT8(TMP))); } PC += INT8(TMP); prefetch(); brk_c_imp if(irq_taken || nmi_state) { read_pc_noinc(); } else { read_pc(); } write(SP, PC >> 8); dec_SP(); write(SP, PC); dec_SP(); write(SP, irq_taken || nmi_state ? P & ~F_B : P); dec_SP(); if(irq_taken && nmi_state) { PC = read_direct(0xfffa); PC = set_h(PC, read_direct(0xfffb)); nmi_state = false; standard_irq_callback(NMI_LINE); } else { PC = read_direct(0xfffe); PC = set_h(PC, read_direct(0xffff)); if(irq_taken) standard_irq_callback(IRQ_LINE); } irq_taken = false; P = (P | F_I) & ~F_D; // Do *not* move after the prefetch prefetch(); inst_state = -1; cmp_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_cmp(A, read(TMP)); prefetch(); dec_acc read_pc_noinc(); A--; set_nz(A); prefetch(); eor_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A ^= read(TMP); set_nz(A); prefetch(); inc_acc read_pc_noinc(); A++; set_nz(A); prefetch(); jmp_iax TMP = read_pc(); TMP = set_h(TMP, read_pc()); read(set_l(TMP, TMP+X)); TMP += X; PC = read(TMP); PC = set_h(PC, read(TMP+1)); prefetch(); jmp_c_ind TMP = read_pc(); TMP = set_h(TMP, read_pc()); PC = read(TMP); read(set_l(TMP, TMP+1)); PC = set_h(PC, read(TMP+1)); prefetch(); lda_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A = read(TMP); set_nz(A); prefetch(); lsr_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); nop_c_imp prefetch(); nop_c_aba read_pc(); read_pc(); read_pc_noinc(); read_pc_noinc(); read_pc_noinc(); read_pc_noinc(); read_pc_noinc(); prefetch(); nop_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read(set_l(TMP, TMP+X)); prefetch(); ora_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A |= read(TMP); set_nz(A); prefetch(); phx_imp read_pc_noinc(); write(SP, X); dec_SP(); prefetch(); phy_imp read_pc_noinc(); write(SP, Y); dec_SP(); prefetch(); plx_imp read_pc_noinc(); read(SP); inc_SP(); X = read(SP); set_nz(X); prefetch(); ply_imp read_pc_noinc(); read(SP); inc_SP(); Y = read(SP); set_nz(Y); prefetch(); rmb_bzp // Access pattern unknown but probable (built upon inc_zpg) TMP = read_pc(); TMP2 = read(TMP); write(TMP, TMP2); TMP2 &= ~(1 << ((inst_state >> 4) & 7)); write(TMP, TMP2); prefetch(); rol_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); ror_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP2 = read(TMP); write(TMP, TMP2); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); sbc_c_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP = read(TMP); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, X)) { read(set_l(TMP, TMP+X)); } TMP += X; TMP = read(TMP); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } TMP += Y; TMP = read(TMP); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_idx TMP2 = read_pc(); read(TMP2); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_sbc(read(TMP)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { read(set_l(TMP, TMP+Y)); } do_sbc(read(TMP+Y)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_imm TMP = read_pc(); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_zpg TMP = read_pc(); TMP = read(TMP); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_sbc(read(TMP)); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); sbc_c_zpx TMP = read_pc(); read(TMP); TMP = read(UINT8(TMP+X)); do_sbc(TMP); if(P & F_D) { read_pc_noinc(); set_nz(A); } prefetch(); smb_bzp // Access pattern unknown but probable (built upon inc_zpg) TMP = read_pc(); TMP2 = read(TMP); write(TMP, TMP2); TMP2 |= 1 << ((inst_state >> 4) & 7); write(TMP, TMP2); prefetch(); sta_zpi TMP2 = read_pc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); write(TMP, A); prefetch(); stp_imp for(;;) { eat-all-cycles; } stz_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); write(TMP, 0x00); prefetch(); stz_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read(set_l(TMP, TMP+X)); write(TMP+X, 0x00); prefetch(); stz_zpg TMP = read_pc(); write(TMP, 0x00); prefetch(); stz_zpx TMP = read_pc(); read(TMP); write(UINT8(TMP+X), 0x00); prefetch(); trb_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); write(TMP, TMP2); if(A & TMP2) P &= ~F_Z; else P |= F_Z; TMP2 &= ~A; write(TMP, TMP2); prefetch(); trb_zpg TMP = read_pc(); TMP2 = read(TMP); write(TMP, TMP2); if(A & TMP2) P &= ~F_Z; else P |= F_Z; TMP2 &= ~A; write(TMP, TMP2); prefetch(); tsb_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); write(TMP, TMP2); if(A & TMP2) P &= ~F_Z; else P |= F_Z; TMP2 |= A; write(TMP, TMP2); prefetch(); tsb_zpg TMP = read_pc(); TMP2 = read(TMP); write(TMP, TMP2); if(A & TMP2) P &= ~F_Z; else P |= F_Z; TMP2 |= A; write(TMP, TMP2); prefetch(); wai_imp read_pc_noinc(); read_pc_noinc(); while(!nmi_state && !irq_state) { eat-all-cycles; } prefetch();