# license:BSD-3-Clause # copyright-holders:Olivier Galibert # m740 opcodes set_imp read_pc_noinc(); P |= F_T; inst_state_base = 0x100; prefetch(); clt_imp read_pc_noinc(); P &= ~F_T; inst_state_base = 0; prefetch(); ldm_imz TMP = read_pc(); TMP2 = read_pc(); write(TMP2, TMP); prefetch(); dec_acc read_pc_noinc(); A--; set_nz(A); prefetch(); inc_acc read_pc_noinc(); A++; set_nz(A); prefetch(); jsr_spg TMP = read_pc_noinc(); read_dummy(SP); write(SP, PC>>8); dec_SP(); write(SP, PC); dec_SP(); TMP = set_h(TMP, 0xff); PC = TMP; prefetch(); clb_bac read_pc_noinc(); A = do_clb(A, (IR>>5) & 7); prefetch(); seb_bac read_pc_noinc(); A = do_seb(A, (IR>>5) & 7); prefetch(); clb_biz TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_clb(TMP2, (IR>>5) & 7); write(TMP, TMP2); prefetch(); seb_biz TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_seb(TMP2, (IR>>5) & 7); write(TMP, TMP2); prefetch(); bbc_bzr TMP = read_pc(); TMP2 = read(TMP); read_pc_noinc(); if(!(TMP2 & (1 << ((IR>>5) & 7)))) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bbs_bzr TMP = read_pc(); TMP2 = read(TMP); read_pc_noinc(); if(TMP2 & (1 << ((IR>>5) & 7))) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bbc_bar read_pc_noinc(); read_pc_noinc(); if(!(A & (1 << ((IR>>5) & 7)))) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bbs_bar read_pc_noinc(); read_pc_noinc(); if(A & (1 << ((IR>>5) & 7))) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); com_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 ^= 0xff; set_nz(TMP2); write(TMP, TMP2); prefetch(); rrf_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); read_dummy(TMP); read_dummy(TMP); read_dummy(TMP); TMP2 = do_rrf(TMP2); write(TMP, TMP2); prefetch(); tst_zpg TMP = read_pc(); TMP2 = read(TMP); set_nz(TMP2); prefetch(); bra_rel TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); prefetch(); jmp_zpi TMP2 = read_pc_noinc(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); PC = TMP; prefetch(); jsr_zpi TMP2 = read_pc_noinc(); read_dummy(SP); write(SP, PC>>8); dec_SP(); write(SP, PC); dec_SP(); TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); PC = TMP; prefetch(); stp_imp read_pc_noinc(); logerror("STP at $%04x\n", PC); while(!irq_state) { eat-all-cycles; } prefetch(); wit_imp read_pc_noinc(); logerror("WIT at $%04x\n", PC); while(!irq_state) { eat-all-cycles; } prefetch(); reset_m P |= F_I; read_dummy(SP); dec_SP(); read_dummy(SP); dec_SP(); read_dummy(SP); dec_SP(); PC = read_arg(0xfffe); PC = set_h(PC, read_arg(0xffff)); prefetch(); inst_state = -1; brk_m_imp if(irq_taken) { read_pc_noinc(); } else { read_pc(); } write(SP, PC >> 8); dec_SP(); write(SP, PC); dec_SP(); write(SP, irq_taken ? P & ~F_B : P); dec_SP(); // BRK uses the vector of the interrupt with the highest priority if any are enabled and pending PC = read_arg(m_irq_vector); PC = set_h(PC, read_arg(m_irq_vector+1)); if(irq_taken) standard_irq_callback(IRQ_LINE); irq_taken = false; P |= F_I; // Do *not* move after the prefetch prefetch(); inst_state = -1; # 6502 opcodes with modified access patterns adc_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); do_adc(TMP2); prefetch(); adc_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); do_adc(TMP2); prefetch(); adc_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_adc(read_data(TMP)); prefetch(); adc_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); do_adc(read_data(TMP+Y)); prefetch(); adc_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); do_adc(TMP2); prefetch(); and_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; A &= read(TMP); set_nz(A); prefetch(); and_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; A &= read(TMP); set_nz(A); prefetch(); and_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A &= read_data(TMP); set_nz(A); prefetch(); and_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); A &= read_data(TMP+Y); set_nz(A); prefetch(); and_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; A &= read(uint8_t(TMP+X)); set_nz(A); prefetch(); asl_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); asl_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); asl_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); asl_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_asl(TMP2); write(TMP, TMP2); prefetch(); bcc_m_rel if(!(P & F_C)) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bcs_m_rel if(P & F_C) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); beq_m_rel if(P & F_Z) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bmi_m_rel if(P & F_N) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bne_m_rel if(!(P & F_Z)) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bpl_m_rel if(!(P & F_N)) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bvc_m_rel if(!(P & F_V)) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); bvs_m_rel if(P & F_V) { TMP = read_pc_noinc(); read_dummy(set_l(PC, PC+1)); PC++; read_dummy(set_l(PC, PC+int8_t(TMP))); PC += int8_t(TMP); } else { read_pc(); } prefetch(); cmp_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); do_cmp(A, TMP2); prefetch(); cmp_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_cmp(A, read_data(TMP)); prefetch(); cmp_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); do_cmp(A, read_data(TMP+Y)); prefetch(); cmp_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); do_cmp(A, TMP2); prefetch(); dec_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2--; set_nz(TMP2); write(TMP, TMP2); prefetch(); dec_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2--; set_nz(TMP2); write(TMP, TMP2); prefetch(); dec_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2--; set_nz(TMP2); write(TMP, TMP2); prefetch(); dec_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2--; set_nz(TMP2); write(TMP, TMP2); prefetch(); eor_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; A ^= read(TMP); set_nz(A); prefetch(); eor_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; A ^= read(TMP); set_nz(A); prefetch(); eor_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A ^= read_data(TMP); set_nz(A); prefetch(); eor_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); A ^= read_data(TMP+Y); set_nz(A); prefetch(); eor_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; A ^= read(uint8_t(TMP+X)); set_nz(A); prefetch(); inc_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2++; set_nz(TMP2); write(TMP, TMP2); prefetch(); inc_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2++; set_nz(TMP2); write(TMP, TMP2); prefetch(); inc_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2++; set_nz(TMP2); write(TMP, TMP2); prefetch(); inc_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2++; set_nz(TMP2); write(TMP, TMP2); prefetch(); jmp_m_ind // JMP ($XXFF) has the same bug as on the NMOS 6502 TMP = read_pc(); TMP = set_h(TMP, read_pc()); PC = read_data(TMP); PC = set_h(PC, read_data(set_l(TMP, TMP+1))); prefetch(); jsr_m_adr TMP = read_pc(); read_dummy(SP); write(SP, PC>>8); dec_SP(); write(SP, PC); dec_SP(); TMP = set_h(TMP, read_pc()); PC = TMP; prefetch(); lda_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); A = read(TMP + X); set_nz(A); prefetch(); lda_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); A = read(TMP + Y); set_nz(A); prefetch(); lda_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A = read_data(TMP); set_nz(A); prefetch(); lda_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); A = read_data(TMP+Y); set_nz(A); prefetch(); lda_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; A = read(uint8_t(TMP+X)); set_nz(A); prefetch(); ldx_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); X = read(TMP + Y); set_nz(X); prefetch(); ldx_m_zpy TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; X = read(uint8_t(TMP+Y)); set_nz(X); prefetch(); ldy_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; Y = read(TMP); set_nz(Y); prefetch(); ldy_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; Y = read(uint8_t(TMP+X)); set_nz(Y); prefetch(); lsr_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); lsr_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); lsr_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); lsr_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_lsr(TMP2); write(TMP, TMP2); prefetch(); ora_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; A |= read(TMP); set_nz(A); prefetch(); ora_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; A |= read(TMP); set_nz(A); prefetch(); ora_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); A |= read_data(TMP); set_nz(A); prefetch(); ora_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); A |= read_data(TMP+Y); set_nz(A); prefetch(); ora_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; A |= read(uint8_t(TMP+X)); set_nz(A); prefetch(); pla_m_imp read_pc_noinc(); read_dummy(SP); inc_SP(); A = read(SP); set_nz(A); prefetch(); plp_m_imp read_pc_noinc(); read_dummy(SP); inc_SP(); TMP = read(SP) | (F_B); inst_state_base = (TMP & F_T) ? 0x100 : 0; prefetch(); P = TMP; // Do *not* move it before the prefetch rol_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); rol_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); rol_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); rol_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_rol(TMP2); write(TMP, TMP2); prefetch(); ror_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); ror_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); ror_m_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); ror_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP = uint8_t(TMP+X); TMP2 = read(TMP); read_dummy(TMP); TMP2 = do_ror(TMP2); write(TMP, TMP2); prefetch(); rti_m_imp read_pc_noinc(); read_dummy(SP); inc_SP(); P = read(SP) | (F_B); inst_state_base = (P & F_T) ? 0x100 : 0; inc_SP(); PC = read(SP); inc_SP(); PC = set_h(PC, read(SP)); prefetch(); rts_m_imp read_pc_noinc(); read_dummy(SP); inc_SP(); PC = read(SP); inc_SP(); PC = set_h(PC, read(SP)); read_dummy(PC); PC++; prefetch(); sbc_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); do_sbc(TMP2); prefetch(); sbc_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); do_sbc(TMP2); prefetch(); sbc_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); do_sbc(read_data(TMP)); prefetch(); sbc_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); do_sbc(read_data(TMP+Y)); prefetch(); sbc_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); do_sbc(TMP2); prefetch(); sta_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(TMP); write(TMP, A); prefetch(); sta_m_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); read_dummy(TMP+X); write(TMP+X, A); prefetch(); sta_m_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); read_dummy(TMP+Y); write(TMP+Y, A); prefetch(); sta_m_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(TMP); write_data(TMP, A); prefetch(); sta_m_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); read_dummy(TMP+Y); write_data(TMP+Y, A); prefetch(); sta_m_zpg TMP = read_pc(); read_dummy(TMP); write(TMP, A); prefetch(); sta_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+X)); write(uint8_t(TMP+X), A); prefetch(); stx_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(TMP); write(TMP, X); prefetch(); stx_m_zpg TMP = read_pc(); read_dummy(TMP); write(TMP, X); prefetch(); stx_m_zpy TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+Y)); write(uint8_t(TMP+Y), X); prefetch(); sty_m_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(TMP); write(TMP, Y); prefetch(); sty_m_zpg TMP = read_pc(); read_dummy(TMP); write(TMP, Y); prefetch(); sty_m_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; read_dummy(uint8_t(TMP+X)); write(uint8_t(TMP+X), Y); prefetch(); # T=1 opcodes adct_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_imm TMP2 = read_pc(); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); adct_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); read_dummy(X); do_adct(TMP2); write(X, TMP); prefetch(); andt_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_imm TMP = read_pc(); TMP2 = read(X); read_dummy(X); TMP2 &= TMP; set_nz(TMP2); write(X, TMP2); prefetch(); andt_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); andt_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); read_dummy(X); TMP &= TMP2; set_nz(TMP); write(X, TMP); prefetch(); cmpt_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_imm TMP = read_pc(); TMP2 = read(X); do_cmp(TMP2, TMP); prefetch(); cmpt_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); cmpt_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); do_cmp(TMP, TMP2); prefetch(); eort_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_imm TMP = read_pc(); TMP2 = read(X); read_dummy(X); TMP2 ^= TMP; set_nz(TMP2); write(X, TMP2); prefetch(); eort_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); eort_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); read_dummy(X); TMP ^= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ldt_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_imm TMP2 = read_pc(); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_zpg TMP = read_pc(); TMP2 = read(TMP); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ldt_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); read_dummy(X); set_nz(TMP2); write(X, TMP2); prefetch(); ort_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_imm TMP = read_pc(); TMP2 = read(X); read_dummy(X); TMP2 |= TMP; set_nz(TMP2); write(X, TMP2); prefetch(); ort_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); ort_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); read_dummy(X); TMP |= TMP2; set_nz(TMP); write(X, TMP); prefetch(); sbct_aba TMP = read_pc(); TMP = set_h(TMP, read_pc()); TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_abx TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+X)); TMP += X; TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_aby TMP = read_pc(); TMP = set_h(TMP, read_pc()); read_dummy(set_l(TMP, TMP+Y)); TMP += Y; TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_idx TMP2 = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 += X; TMP = read(TMP2 & 0xff); TMP = set_h(TMP, read((TMP2+1) & 0xff)); TMP2 = read_data(TMP); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_idy TMP2 = read_pc(); TMP = read(TMP2); TMP = set_h(TMP, read((TMP2+1) & 0xff)); read_dummy(set_l(TMP, TMP+Y)); TMP2 = read_data(TMP+Y); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_imm TMP2 = read_pc(); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_zpg TMP = read_pc(); TMP2 = read(TMP); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch(); sbct_zpx TMP = read_pc_noinc(); read_dummy(PC & 0xff); PC++; TMP2 = read(uint8_t(TMP+X)); TMP = read(X); read_dummy(X); do_sbct(TMP2); write(X, TMP); prefetch();