diff options
Diffstat (limited to 'src/devices/cpu/m6502/oxavix.lst')
-rw-r--r-- | src/devices/cpu/m6502/oxavix.lst | 899 |
1 files changed, 807 insertions, 92 deletions
diff --git a/src/devices/cpu/m6502/oxavix.lst b/src/devices/cpu/m6502/oxavix.lst index 6b6de61a585..0f1f60e4221 100644 --- a/src/devices/cpu/m6502/oxavix.lst +++ b/src/devices/cpu/m6502/oxavix.lst @@ -3,15 +3,15 @@ # xavix opcodes callf_xa3 - read(SP); + read_stack(SP); write_special_stack(get_codebank()); dec_special_stack(); TMP2 = read_pc(); TMP = read_pc(); - //read(SP); - write(SP, PC>>8); + //read_stack(SP); + write_stack(SP, PC>>8); dec_SP(); - write(SP, PC); + write_stack(SP, PC); dec_SP(); TMP = set_h(TMP, read_pc()); PC = TMP; @@ -28,11 +28,11 @@ jmp_xa3 retf_imp read_pc_noinc(); - read(SP); + read_stack(SP); inc_SP(); - PC = read(SP); + PC = read_stack(SP); inc_SP(); - PC = set_h(PC, read(SP)); + PC = set_h(PC, read_stack(SP)); inc_special_stack(); TMP2 = read_special_stack(); set_codebank(TMP2); @@ -50,11 +50,11 @@ brk_xav_imp write_special_stack(get_codebank()); set_codebank(0x00); // epo_efdx, rad_ping and rad_mtrk strongly suggest that interrupts must force bank 0 as code jumps to a ROM pointer stored earlier / a fixed pointer to a rom address in bank 0 dec_special_stack(); - write(SP, PC >> 8); + write_stack(SP, PC >> 8); dec_SP(); - write(SP, PC); + write_stack(SP, PC); dec_SP(); - write(SP, irq_taken ? P & ~F_B : P); + write_stack(SP, irq_taken ? P & ~F_B : P); dec_SP(); if(nmi_state) { if (m_vector_callback.isnull()) @@ -108,173 +108,888 @@ brk_xav_imp rti_xav_imp read_pc_noinc(); - read(SP); + read_stack(SP); inc_SP(); - P = read(SP) | (F_B|F_E); + P = read_stack(SP) | (F_B|F_E); inc_SP(); - PC = read(SP); + PC = read_stack(SP); inc_SP(); - PC = set_h(PC, read(SP)); + PC = set_h(PC, read_stack(SP)); inc_special_stack(); TMP2 = read_special_stack(); set_codebank(TMP2); prefetch(); -xavlda_idy +# opcodes below are modified to access stack through different handlers + +pha_xav_imp + read_pc_noinc(); + write_stack(SP, A); + dec_SP(); + prefetch(); + +php_xav_imp + read_pc_noinc(); + write_stack(SP, P); + dec_SP(); + prefetch(); + +jsr_xav_adr + TMP = read_pc(); + read_stack(SP); + write_stack(SP, PC>>8); + dec_SP(); + write_stack(SP, PC); + dec_SP(); + TMP = set_h(TMP, read_pc()); + PC = TMP; + prefetch(); + +pla_xav_imp + read_pc_noinc(); + read_stack(SP); + inc_SP(); + A = read_stack(SP); + set_nz(A); + prefetch(); + +plp_xav_imp + read_pc_noinc(); + read_stack(SP); + inc_SP(); + TMP = read_stack(SP) | (F_B|F_E); + prefetch(); + P = TMP; // Do *not* move it before the prefetch + +rts_xav_imp + read_pc_noinc(); + read_stack(SP); + inc_SP(); + PC = read_stack(SP); + inc_SP(); + PC = set_h(PC, read_stack(SP)); + read_pc(); + prefetch(); + +# opcodes below are modified to access zero page through different handlers + + +lda_xav_idy TMP2 = read_pc(); // we need to fetch the zero page part from zero page, but the rest as if zero page wasn't there, similar to the 6509 - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - A = read_special(TMP+Y); + A = read(TMP+Y); set_nz(A); prefetch(); -xavadc_idy +adc_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - do_adc(read_special(TMP+Y)); + do_adc(read(TMP+Y)); prefetch(); -xavcmp_idy +cmp_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - do_cmp(A, read_special(TMP+Y)); + do_cmp(A, read(TMP+Y)); prefetch(); -xavsbc_idy +sbc_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - do_sbc(read_special(TMP+Y)); + do_sbc(read(TMP+Y)); prefetch(); -xaveor_idy +eor_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - A ^= read_special(TMP+Y); + A ^= read(TMP+Y); set_nz(A); prefetch(); -xavand_idy +and_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - A &= read_special(TMP+Y); + A &= read(TMP+Y); set_nz(A); prefetch(); -xavora_idy +ora_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); if(page_changing(TMP, Y)) { - read(set_l(TMP, TMP+Y)); + read(set_l(TMP, TMP+Y)); // dummy read } - A |= read_special(TMP+Y); + A |= read(TMP+Y); set_nz(A); prefetch(); -xavora_idx +ora_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A |= read_special(TMP); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + A |= read(TMP); set_nz(A); prefetch(); -xavand_idx +and_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A &= read_special(TMP); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + A &= read(TMP); set_nz(A); prefetch(); -xaveor_idx +eor_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A ^= read_special(TMP); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + A ^= read(TMP); set_nz(A); prefetch(); -xavadc_idx +adc_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_adc(read_special(TMP)); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + do_adc(read(TMP)); prefetch(); -xavlda_idx +lda_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - A = read_special(TMP); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + A = read(TMP); set_nz(A); prefetch(); -xavcmp_idx +cmp_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_cmp(A, read_special(TMP)); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + do_cmp(A, read(TMP)); prefetch(); -xavsbc_idx +sbc_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - do_sbc(read_special(TMP)); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + do_sbc(read(TMP)); prefetch(); -xavsta_idy +sta_xav_idy TMP2 = read_pc(); - TMP = read(TMP2); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); - read(set_l(TMP, TMP+Y)); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read_zeropage(set_l(TMP, TMP+Y)); // dummy read write(TMP+Y, A); // TODO prefetch(); -xavsta_idx +sta_xav_idx TMP2 = read_pc(); - read(TMP2); + read_zeropage(TMP2); // dummy read TMP2 += X; - TMP = read(TMP2 & 0xff); - TMP = set_h(TMP, read((TMP2+1) & 0xff)); + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); write(TMP, A); // TODO prefetch(); + +adc_xav_zpg + TMP = read_pc(); + TMP = read_zeropage(TMP); + do_adc(TMP); + prefetch(); + +and_xav_zpg + TMP = read_pc(); + A &= read_zeropage(TMP); + set_nz(A); + prefetch(); + +asl_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_asl(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +bit_xav_zpg + TMP = read_pc(); + do_bit(read_zeropage(TMP)); + prefetch(); + +cmp_xav_zpg + TMP = read_pc(); + TMP = read_zeropage(TMP); + do_cmp(A, TMP); + prefetch(); + +cpx_xav_zpg + TMP = read_pc(); + TMP = read_zeropage(TMP); + do_cmp(X, TMP); + prefetch(); + +cpy_xav_zpg + TMP = read_pc(); + TMP = read_zeropage(TMP); + do_cmp(Y, TMP); + prefetch(); + +dec_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2--; + set_nz(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +eor_xav_zpg + TMP = read_pc(); + A ^= read_zeropage(TMP); + set_nz(A); + prefetch(); + +inc_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2++; + set_nz(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +lda_xav_zpg + TMP = read_pc(); + A = read_zeropage(TMP); + set_nz(A); + prefetch(); + +ldx_xav_zpg + TMP = read_pc(); + X = read_zeropage(TMP); + set_nz(X); + prefetch(); + +ldy_xav_zpg + TMP = read_pc(); + Y = read_zeropage(TMP); + set_nz(Y); + prefetch(); + +lsr_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_lsr(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +ora_xav_zpg + TMP = read_pc(); + A |= read_zeropage(TMP); + set_nz(A); + prefetch(); + +rol_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_rol(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +ror_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_ror(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +sbc_xav_zpg + TMP = read_pc(); + TMP = read_zeropage(TMP); + do_sbc(TMP); + prefetch(); + +sta_xav_zpg + TMP = read_pc(); + write_zeropage(TMP, A); + prefetch(); + +stx_xav_zpg + TMP = read_pc(); + write_zeropage(TMP, X); + prefetch(); + +sty_xav_zpg + TMP = read_pc(); + write_zeropage(TMP, Y); + prefetch(); + +dcp_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2--; + write_zeropage(TMP, TMP2); + do_cmp(A, TMP2); + prefetch(); + +isb_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2++; + write_zeropage(TMP, TMP2); + do_sbc(TMP2); + prefetch(); + +lax_xav_zpg + TMP = read_pc(); + A = X = read_zeropage(TMP); + set_nz(A); + prefetch(); + +rla_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_rol(TMP2); + write_zeropage(TMP, TMP2); + A &= TMP2; + set_nz(A); + prefetch(); + +rra_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_ror(TMP2); + write_zeropage(TMP, TMP2); + do_adc(TMP2); + prefetch(); + +sax_xav_zpg + TMP = read_pc(); + TMP2 = A & X; + write_zeropage(TMP, TMP2); + prefetch(); + +slo_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_asl(TMP2); + write_zeropage(TMP, TMP2); + A |= TMP2; + set_nz(A); + prefetch(); + +sre_xav_zpg + TMP = read_pc(); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_lsr(TMP2); + write_zeropage(TMP, TMP2); + A ^= TMP2; + set_nz(A); + prefetch(); + +nop_xav_zpg + TMP = read_pc(); + read_zeropage(TMP); // dummy read + prefetch(); + +# more zero page changes + +ldx_xav_zpy + TMP = read_pc(); + read_zeropage(TMP); // dummy read + X = read_zeropage(uint8_t(TMP+Y)); + set_nz(X); + prefetch(); + +stx_xav_zpy + TMP = read_pc(); + read_zeropage(TMP); // dummy read + write_zeropage(uint8_t(TMP+Y), X); + prefetch(); + +lax_xav_zpy + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+Y); + A = X = read_zeropage(TMP); + set_nz(A); + prefetch(); + +sax_xav_zpy + TMP = read_pc(); + read_zeropage(TMP); // dummy reaad + TMP = uint8_t(TMP+Y); + TMP2 = A & X; + write_zeropage(TMP, TMP2); + prefetch(); + +# more zero page changes + +adc_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = read_zeropage(uint8_t(TMP+X)); + do_adc(TMP); + prefetch(); + +and_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + A &= read_zeropage(uint8_t(TMP+X)); + set_nz(A); + prefetch(); + +asl_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_asl(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +cmp_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = read_zeropage(uint8_t(TMP+X)); + do_cmp(A, TMP); + prefetch(); + +dec_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2--; + set_nz(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +eor_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + A ^= read_zeropage(uint8_t(TMP+X)); + set_nz(A); + prefetch(); + +inc_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2++; + set_nz(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +lda_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + A = read_zeropage(uint8_t(TMP+X)); + set_nz(A); + prefetch(); + +ldy_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + Y = read_zeropage(uint8_t(TMP+X)); + set_nz(Y); + prefetch(); + +lsr_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_lsr(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +ora_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + A |= read_zeropage(uint8_t(TMP+X)); + set_nz(A); + prefetch(); + +rol_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_rol(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +ror_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_ror(TMP2); + write_zeropage(TMP, TMP2); + prefetch(); + +sbc_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = read_zeropage(uint8_t(TMP+X)); + do_sbc(TMP); + prefetch(); + +sta_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + write_zeropage(uint8_t(TMP+X), A); + prefetch(); + +sty_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + write_zeropage(uint8_t(TMP+X), Y); + prefetch(); + +dcp_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2--; + write_zeropage(TMP, TMP2); + do_cmp(A, TMP2); + prefetch(); + +isb_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2++; + write_zeropage(TMP, TMP2); + do_sbc(TMP2); + prefetch(); + +rla_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_rol(TMP2); + write_zeropage(TMP, TMP2); + A &= TMP2; + set_nz(A); + prefetch(); + +rra_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_ror(TMP2); + write_zeropage(TMP, TMP2); + do_adc(TMP2); + prefetch(); + +slo_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_asl(TMP2); + write_zeropage(TMP, TMP2); + A |= TMP2; + set_nz(A); + prefetch(); + +sre_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); // dummy read + TMP = uint8_t(TMP+X); + TMP2 = read_zeropage(TMP); + write_zeropage(TMP, TMP2); // dummy write + TMP2 = do_lsr(TMP2); + write_zeropage(TMP, TMP2); + A ^= TMP2; + set_nz(A); + prefetch(); + +nop_xav_zpx + TMP = read_pc(); + read_zeropage(TMP); + read_zeropage(uint8_t(TMP+X)); + prefetch(); + +#### + +slo_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_asl(TMP2); + write(TMP, TMP2); + A |= TMP2; + set_nz(A); + prefetch(); + +# idx with zero page changes + +rla_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_rol(TMP2); + write(TMP, TMP2); + A &= TMP2; + set_nz(A); + prefetch(); + +sre_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_lsr(TMP2); + write(TMP, TMP2); + A ^= TMP2; + set_nz(A); + prefetch(); + +rra_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_ror(TMP2); + write(TMP, TMP2); + do_adc(TMP2); + prefetch(); + +sax_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = A & X; + write(TMP, TMP2); + prefetch(); + +lax_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dumm read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + A = X = read(TMP); + set_nz(A); + prefetch(); + +dcp_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2--; + write(TMP, TMP2); + do_cmp(A, TMP2); + prefetch(); + +isb_xav_idx + TMP2 = read_pc(); + read_zeropage(TMP2); // dummy read + TMP2 += X; + TMP = read_zeropage(TMP2 & 0xff); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2++; + write(TMP, TMP2); + do_sbc(TMP2); + prefetch(); + +# idy with zero page changes + +slo_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_asl(TMP2); + write(TMP, TMP2); + A |= TMP2; + set_nz(A); + prefetch(); + +rla_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_rol(TMP2); + write(TMP, TMP2); + A &= TMP2; + set_nz(A); + prefetch(); + +sre_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_lsr(TMP2); + write(TMP, TMP2); + A ^= TMP2; + set_nz(A); + prefetch(); + +rra_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2 = do_ror(TMP2); + write(TMP, TMP2); + do_adc(TMP2); + prefetch(); + +sha_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP2 = A & X & ((TMP >> 8)+1); + if(page_changing(TMP, Y)) + TMP = set_h(TMP+Y, TMP2); + else + TMP += Y; + write(TMP, TMP2); + prefetch(); + +lax_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + if(page_changing(TMP, Y)) { + read(set_l(TMP, TMP+Y)); // dummy read + } + A = X = read(TMP+Y); + set_nz(A); + prefetch(); + +dcp_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2--; + write(TMP, TMP2); + do_cmp(A, TMP2); + prefetch(); + +isb_xav_idy + TMP2 = read_pc(); + TMP = read_zeropage(TMP2); + TMP = set_h(TMP, read_zeropage((TMP2+1) & 0xff)); + read(set_l(TMP, TMP+Y)); // dummy read + TMP += Y; + TMP2 = read(TMP); + write(TMP, TMP2); + TMP2++; + write(TMP, TMP2); + do_sbc(TMP2); + prefetch(); + |