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