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