summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/om740.lst
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6502/om740.lst')
-rw-r--r--src/devices/cpu/m6502/om740.lst749
1 files changed, 749 insertions, 0 deletions
diff --git a/src/devices/cpu/m6502/om740.lst b/src/devices/cpu/m6502/om740.lst
new file mode 100644
index 00000000000..9f17dc639bf
--- /dev/null
+++ b/src/devices/cpu/m6502/om740.lst
@@ -0,0 +1,749 @@
+# m740 opcodes
+set_imp
+ read_pc_noinc();
+ P |= F_T;
+ inst_state_base = 0x100;
+ prefetch();
+
+clt_imp
+ read_pc_noinc();
+ P &= ~F_T;
+ inst_state_base = 0;
+ prefetch();
+
+ldm_imz
+ TMP = read_pc();
+ TMP2 = read_pc();
+ write(TMP2, TMP);
+ prefetch();
+
+jsr_spg
+ TMP = read_pc_noinc();
+ read(SP);
+ write(SP, PC>>8);
+ dec_SP();
+ write(SP, PC);
+ dec_SP();
+ TMP = set_h(TMP, 0xff);
+ PC = TMP;
+ prefetch();
+
+clb_bac
+ read_pc_noinc();
+ A = do_clb(A, (IR>>5) & 7);
+ prefetch();
+
+seb_bac
+ read_pc_noinc();
+ A = do_seb(A, (IR>>5) & 7);
+ prefetch();
+
+clb_biz
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP2 = do_clb(TMP2, (IR>>5) & 7);
+ write(TMP, TMP2);
+ prefetch();
+
+seb_biz
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP2 = do_seb(TMP2, (IR>>5) & 7);
+ write(TMP, TMP2);
+ prefetch();
+
+bbc_bzr
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP = read_pc();
+ read_pc_noinc();
+ if(!(TMP2 & (1 << ((IR>>5) & 7)))) {
+ PC += INT8(TMP);
+ }
+ prefetch();
+
+bbs_bzr
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP = read_pc();
+ read_pc_noinc();
+ if(TMP2 & (1 << ((IR>>5) & 7))) {
+ PC += INT8(TMP);
+ }
+ prefetch();
+
+bbc_bar
+ TMP = read_pc();
+ read_pc_noinc();
+ if(!(A & (1 << ((IR>>5) & 7)))) {
+ PC += INT8(TMP);
+ }
+ prefetch();
+
+bbs_bar
+ TMP = read_pc();
+ read_pc_noinc();
+ if(A & (1 << ((IR>>5) & 7))) {
+ PC += INT8(TMP);
+ }
+ prefetch();
+
+rrf_zpg
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP2 = do_rrf(TMP2);
+ write(TMP, TMP2);
+ 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();
+
+jmp_zpi
+ TMP2 = read_pc();
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ PC = TMP;
+ prefetch();
+
+reset740
+ PC = read_arg(0xfffe);
+ PC = set_h(PC, read_arg(0xffff));
+ prefetch();
+ inst_state = -1;
+
+brk740_imp
+ // The 6502 bug when a nmi occurs in a brk is reproduced (case !irq_taken && nmi_state)
+ if(irq_taken) {
+ read_pc_noinc();
+ } else {
+ read_pc();
+ }
+ write(SP, PC >> 8);
+ dec_SP();
+ write(SP, PC);
+ dec_SP();
+ write(SP, irq_taken ? P & ~F_B : P);
+ dec_SP();
+ if(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(m_irq_vector);
+ PC = set_h(PC, read_arg(m_irq_vector+1));
+ if(irq_taken)
+ standard_irq_callback(IRQ_LINE);
+ }
+ irq_taken = false;
+ P |= F_I; // Do *not* move after the prefetch
+ prefetch();
+ inst_state = -1;
+
+# T=1 opcodes
+
+adct_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+adct_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);
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+adct_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);
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+adct_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ do_adct(read(TMP));
+ write(X, TMP2);
+ prefetch();
+
+adct_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));
+ }
+ TMP2 = read(X);
+ do_adct(read(TMP+Y));
+ write(X, TMP2);
+ prefetch();
+
+adct_imm
+ TMP = read_pc();
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+adct_zpg
+ TMP = read_pc();
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+adct_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP = read(UINT8(TMP+X));
+ TMP2 = read(X);
+ do_adct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+andt_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP2 = read(X);
+ TMP2 &= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_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(X);
+ TMP2 &= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_aby
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ if(page_changing(TMP, Y)) {
+ read(set_l(TMP, TMP+Y));
+ }
+ TMP += Y;
+ TMP2 = read(X);
+ TMP2 &= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_imm
+ TMP2 = read(X);
+ TMP2 &= read_pc();
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ TMP2 &= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_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));
+ }
+ TMP2 = read(X);
+ TMP2 &= read(TMP+Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_zpg
+ TMP = read_pc();
+ TMP2 = read(X);
+ TMP2 &= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+andt_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP2 = read(X);
+ TMP2 &= read(UINT8(TMP+X));
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+com_zpg
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ TMP2 ^= 0xff;
+ set_nz(TMP2);
+ write(TMP, TMP2);
+ prefetch();
+
+cmpt_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+cmpt_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);
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+cmpt_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);
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+cmpt_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ do_cmp(TMP2, read(TMP));
+ prefetch();
+
+cmpt_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));
+ }
+ TMP2 = read(X);
+ do_cmp(TMP2, read(TMP+Y));
+ prefetch();
+
+cmpt_imm
+ TMP = read_pc();
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+cmpt_zpg
+ TMP = read_pc();
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+cmpt_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP = read(UINT8(TMP+X));
+ TMP2 = read(X);
+ do_cmp(TMP2, TMP);
+ prefetch();
+
+dec_acc
+ read_pc_noinc();
+ A--;
+ set_nz(A);
+ prefetch();
+
+dect_acc
+ read_pc_noinc();
+ TMP2 = read(X);
+ TMP2--;
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP2 = read(X);
+ TMP2 ^= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_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(X);
+ TMP2 ^= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_aby
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ if(page_changing(TMP, Y)) {
+ read(set_l(TMP, TMP+Y));
+ }
+ TMP += Y;
+ TMP2 = read(X);
+ TMP2 ^= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ TMP2 ^= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_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));
+ }
+ TMP2 = read(X);
+ TMP2 ^= read(TMP+Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_imm
+ TMP2 = read(X);
+ TMP2 ^= read_pc();
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_zpg
+ TMP = read_pc();
+ TMP2 = read(X);
+ TMP2 ^= read(TMP+Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+eort_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP2 = read(X);
+ TMP2 ^= read(UINT8(TMP+X));
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+inc_acc
+ read_pc_noinc();
+ A++;
+ set_nz(A);
+ prefetch();
+
+inct_acc
+ read_pc_noinc();
+ TMP2 = read(X);
+ TMP2++;
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP2 = read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_abx
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ if(page_changing(TMP, X)) {
+ read(set_l(TMP, TMP+X));
+ }
+ TMP2 = read(TMP + X);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_aby
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ if(page_changing(TMP, Y)) {
+ read(set_l(TMP, TMP+Y));
+ }
+ TMP2 = read(TMP + Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_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));
+ }
+ TMP2 = read(TMP+Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_imm
+ TMP2 = read_pc();
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_zpg
+ TMP = read_pc();
+ TMP2 = read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ldt_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP2 = read(UINT8(TMP+X));
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP2 = read(X);
+ TMP2 |= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_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(X);
+ TMP2 |= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_aby
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ if(page_changing(TMP, Y)) {
+ read(set_l(TMP, TMP+Y));
+ }
+ TMP += Y;
+ TMP2 = read(X);
+ TMP2 |= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_imm
+ TMP2 = read(X);
+ TMP2 |= read_pc();
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ TMP2 |= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_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));
+ }
+ TMP2 = read(X);
+ TMP2 |= read(TMP+Y);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_zpg
+ TMP = read_pc();
+ TMP2 = read(X);
+ TMP2 |= read(TMP);
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+ort_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP2 = read(X);
+ TMP2 |= read(UINT8(TMP+X));
+ set_nz(TMP2);
+ write(X, TMP2);
+ prefetch();
+
+sbct_aba
+ TMP = read_pc();
+ TMP = set_h(TMP, read_pc());
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+sbct_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);
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+sbct_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);
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+sbct_idx
+ TMP2 = read_pc();
+ read(TMP2);
+ TMP2 += X;
+ TMP = read(TMP2 & 0xff);
+ TMP = set_h(TMP, read((TMP2+1) & 0xff));
+ TMP2 = read(X);
+ do_sbct(read(TMP));
+ write(X, TMP2);
+ prefetch();
+
+sbct_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));
+ }
+ TMP2 = read(X);
+ do_sbct(read(TMP+Y));
+ write(X, TMP2);
+ prefetch();
+
+sbct_imm
+ TMP = read_pc();
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+sbct_zpg
+ TMP = read_pc();
+ TMP = read(TMP);
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();
+
+sbct_zpx
+ TMP = read_pc();
+ read(TMP);
+ TMP = read(UINT8(TMP+X));
+ TMP2 = read(X);
+ do_sbct(TMP);
+ write(X, TMP2);
+ prefetch();