public void op_rts(CPUCoreOpArgument args) { op_io(); op_io(); rd.l = op_readstack(); rd.h = op_readstack(); last_cycle(); op_io(); regs.pc.w = ++rd.w; }
public void op_write_dp_w(CPUCoreOpArgument args) { int n = args.x; dp = op_readpc(); op_io_cond2(); op_writedp(dp + 0U, (byte)(regs.r[n] >> 0)); last_cycle(); op_writedp(dp + 1U, (byte)(regs.r[n] >> 8)); }
public void op_xba(CPUCoreOpArgument args) { op_io(); last_cycle(); op_io(); regs.a.l ^= regs.a.h; regs.a.h ^= regs.a.l; regs.a.l ^= regs.a.h; regs.p.n = Convert.ToBoolean(regs.a.l & 0x80); regs.p.z = (regs.a.l == 0); }
public void op_write_addr_b(CPUCoreOpArgument args) { int n = args.x; aa.l = op_readpc(); aa.h = op_readpc(); last_cycle(); op_writedbr(aa.w, (byte)regs.r[n]); }
public void op_write_dpr_w(CPUCoreOpArgument args) { int n = args.x; int i = args.y; dp = op_readpc(); op_io_cond2(); op_io(); op_writedp(dp + (uint)regs.r[i] + 0, (byte)(regs.r[n] >> 0)); last_cycle(); op_writedp(dp + (uint)regs.r[i] + 1, (byte)(regs.r[n] >> 8)); }
public void op_txs_n(CPUCoreOpArgument args) { last_cycle(); op_io_irq(); regs.s.w = regs.x.w; }
public void op_wdm(CPUCoreOpArgument args) { last_cycle(); op_readpc(); }
public void op_sta_ildp_w(CPUCoreOpArgument args) { dp = op_readpc(); op_io_cond2(); aa.l = op_readdp(dp + 0U); aa.h = op_readdp(dp + 1U); aa.b = op_readdp(dp + 2U); op_writelong(aa.d + 0, regs.a.l); last_cycle(); op_writelong(aa.d + 1, regs.a.h); }
public void op_sta_isry_w(CPUCoreOpArgument args) { sp = op_readpc(); op_io(); aa.l = op_readsp(sp + 0U); aa.h = op_readsp(sp + 1U); op_io(); op_writedbr((uint)(aa.w + regs.y.w + 0), regs.a.l); last_cycle(); op_writedbr((uint)(aa.w + regs.y.w + 1), regs.a.h); }
public void op_sta_idpy_b(CPUCoreOpArgument args) { dp = op_readpc(); op_io_cond2(); aa.l = op_readdp(dp + 0U); aa.h = op_readdp(dp + 1U); op_io(); last_cycle(); op_writedbr((uint)(aa.w + regs.y.w), regs.a.l); }
public void op_sta_idp_w(CPUCoreOpArgument args) { dp = op_readpc(); op_io_cond2(); aa.l = op_readdp(dp + 0U); aa.h = op_readdp(dp + 1U); op_writedbr(aa.w + 0U, regs.a.l); last_cycle(); op_writedbr(aa.w + 1U, regs.a.h); }
public void op_sta_idpx_b(CPUCoreOpArgument args) { dp = op_readpc(); op_io_cond2(); op_io(); aa.l = op_readdp((uint)(dp + regs.x.w + 0)); aa.h = op_readdp((uint)(dp + regs.x.w + 1)); last_cycle(); op_writedbr(aa.w, regs.a.l); }
public void op_sbc_w(CPUCoreOpArgument args) { int result; rd.w ^= 0xffff; if (!regs.p.d) { result = regs.a.w + rd.w + Convert.ToInt32(regs.p.c); } else { result = (regs.a.w & 0x000f) + (rd.w & 0x000f) + (Convert.ToInt32(regs.p.c) << 0); if (result <= 0x000f) { result -= 0x0006; } regs.p.c = result > 0x000f; result = (regs.a.w & 0x00f0) + (rd.w & 0x00f0) + (Convert.ToInt32(regs.p.c) << 4) + (result & 0x000f); if (result <= 0x00ff) { result -= 0x0060; } regs.p.c = result > 0x00ff; result = (regs.a.w & 0x0f00) + (rd.w & 0x0f00) + (Convert.ToInt32(regs.p.c) << 8) + (result & 0x00ff); if (result <= 0x0fff) { result -= 0x0600; } regs.p.c = result > 0x0fff; result = (regs.a.w & 0xf000) + (rd.w & 0xf000) + (Convert.ToInt32(regs.p.c) << 12) + (result & 0x0fff); } regs.p.v = Convert.ToBoolean(~(regs.a.w ^ rd.w) & (regs.a.w ^ result) & 0x8000); if (regs.p.d && result <= 0xffff) { result -= 0x6000; } regs.p.c = result > 0xffff; regs.p.n = Convert.ToBoolean(result & 0x8000); regs.p.z = (ushort)result == 0; regs.a.w = (ushort)result; }
public void op_sbc_b(CPUCoreOpArgument args) { int result; rd.l ^= 0xff; if (!regs.p.d) { result = regs.a.l + rd.l + Convert.ToInt32(regs.p.c); } else { result = (regs.a.l & 0x0f) + (rd.l & 0x0f) + (Convert.ToInt32(regs.p.c) << 0); if (result <= 0x0f) { result -= 0x06; } regs.p.c = result > 0x0f; result = (regs.a.l & 0xf0) + (rd.l & 0xf0) + (Convert.ToInt32(regs.p.c) << 4) + (result & 0x0f); } regs.p.v = Convert.ToBoolean(~(regs.a.l ^ rd.l) & (regs.a.l ^ result) & 0x80); if (regs.p.d && result <= 0xff) { result -= 0x60; } regs.p.c = result > 0xff; regs.p.n = Convert.ToBoolean(result & 0x80); regs.p.z = (byte)result == 0; regs.a.l = (byte)result; }
public void op_tsx_w(CPUCoreOpArgument args) { last_cycle(); op_io_irq(); regs.x.w = regs.s.w; regs.p.n = Convert.ToBoolean(regs.x.w & 0x8000); regs.p.z = (regs.x.w == 0); }
public void op_sta_sr_w(CPUCoreOpArgument args) { sp = op_readpc(); op_io(); op_writesp(sp + 0U, regs.a.l); last_cycle(); op_writesp(sp + 1U, regs.a.h); }
public void op_txs_e(CPUCoreOpArgument args) { last_cycle(); op_io_irq(); regs.s.l = regs.x.l; }
public void op_transfer_w(CPUCoreOpArgument args) { int from = args.x; int to = args.y; last_cycle(); op_io_irq(); regs.r[to].w = regs.r[from].w; regs.p.n = Convert.ToBoolean(regs.r[to].w & 0x8000); regs.p.z = (regs.r[to].w == 0); }
public void op_wai(CPUCoreOpArgument args) { regs.wai = true; while (regs.wai) { last_cycle(); op_io(); } op_io(); }
public void op_trb_b(CPUCoreOpArgument args) { regs.p.z = (rd.l & regs.a.l) == 0; rd.l &= (byte)(~regs.a.l); }
public void op_write_addrr_w(CPUCoreOpArgument args) { int n = args.x; int i = args.y; aa.l = op_readpc(); aa.h = op_readpc(); op_io(); op_writedbr(aa.w + (uint)regs.r[i] + 0, (byte)(regs.r[n] >> 0)); last_cycle(); op_writedbr(aa.w + (uint)regs.r[i] + 1, (byte)(regs.r[n] >> 8)); }
public void op_trb_w(CPUCoreOpArgument args) { regs.p.z = (rd.w & regs.a.w) == 0; rd.w &= (ushort)(~regs.a.w); }
public void op_write_addr_w(CPUCoreOpArgument args) { int n = args.x; aa.l = op_readpc(); aa.h = op_readpc(); op_writedbr(aa.w + 0U, (byte)(regs.r[n] >> 0)); last_cycle(); op_writedbr(aa.w + 1U, (byte)(regs.r[n] >> 8)); }
public void op_tsb_b(CPUCoreOpArgument args) { regs.p.z = (rd.l & regs.a.l) == 0; rd.l |= regs.a.l; }
public void op_write_dp_b(CPUCoreOpArgument args) { int n = args.x; dp = op_readpc(); op_io_cond2(); last_cycle(); op_writedp(dp, (byte)regs.r[n]); }
public void op_tsb_w(CPUCoreOpArgument args) { regs.p.z = (rd.w & regs.a.w) == 0; rd.w |= regs.a.w; }
public void op_write_longr_w(CPUCoreOpArgument args) { int i = args.x; aa.l = op_readpc(); aa.h = op_readpc(); aa.b = op_readpc(); op_writelong(aa.d + (uint)regs.r[i] + 0, regs.a.l); last_cycle(); op_writelong(aa.d + (uint)regs.r[i] + 1, regs.a.h); }
public void op_tsx_b(CPUCoreOpArgument args) { last_cycle(); op_io_irq(); regs.x.l = regs.s.l; regs.p.n = Convert.ToBoolean(regs.x.l & 0x80); regs.p.z = (regs.x.l == 0); }
public void op_xce(CPUCoreOpArgument args) { last_cycle(); op_io_irq(); bool carry = regs.p.c; regs.p.c = regs.e; regs.e = carry; if (regs.e) { regs.p.Assign((byte)(regs.p | 0x30)); regs.s.h = 0x01; } if (regs.p.x) { regs.x.h = 0x00; regs.y.h = 0x00; } update_table(); }
public void op_rtl_e(CPUCoreOpArgument args) { op_io(); op_io(); rd.l = op_readstackn(); rd.h = op_readstackn(); last_cycle(); rd.b = op_readstackn(); regs.pc.b = rd.b; regs.pc.w = ++rd.w; regs.s.h = 0x01; }