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