summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/oxavix.lst
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6502/oxavix.lst')
-rw-r--r--src/devices/cpu/m6502/oxavix.lst899
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();
+