template<int n, int i> void SMPcore::op_mov_dpr_reg() { dp = op_readpc(); op_io(); dp += regs.r[i]; op_readdp<false>(dp); op_writedp(dp, regs.r[n]); }
template<int n, int i> alwaysinline void SMP::op_mov_dpr_reg() { dp = op_readpc(); op_io(); dp += regs.r[i]; op_readdp(dp); op_writedp(dp, regs.r[n]); }
void SMPcore::op_adjust_dpx() { dp = op_readpc(); op_io(); rd = op_readdp(dp + regs.x); rd = (this->*op)(rd); op_writedp(dp + regs.x, rd); }
void SMP::op_read_dp_const() { rd = op_readpc(); dp = op_readpc(); wr = op_readdp(dp); wr = (this->*op)(wr, rd); static uint8 (SMP::*cmp)(uint8, uint8) = &SMP::op_cmp; (op != cmp) ? op_writedp(dp, wr) : op_io(); }
void SMP::op_read_ix_iy() { op_io(); rd = op_readdp(regs.y); wr = op_readdp(regs.x); wr = (this->*op)(wr, rd); static uint8 (SMP::*cmp)(uint8, uint8) = &SMP::op_cmp; (op != cmp) ? op_writedp(regs.x, wr) : op_io(); }
void SMPcore::op_adjustw_dp() { dp = op_readpc(); rd = op_readdp(dp) << 0; rd += adjust; op_writedp(dp++, rd); rd += op_readdp(dp) << 8; op_writedp(dp, rd >> 8); regs.p.n = (rd & 0x8000); regs.p.z = (rd == 0); }
alwaysinline void SMP::op_dbnz_dp() { dp = op_readpc(); wr = op_readdp(dp); op_writedp(dp, --wr); rd = op_readpc(); if(wr == 0) return; op_io(); op_io(); regs.pc += (int8)rd; }
alwaysinline void SMP::op_mov_dp_const() { rd = op_readpc(); dp = op_readpc(); op_readdp(dp); op_writedp(dp, rd); }
alwaysinline void SMP::op_mov_dp_dp() { sp = op_readpc(); rd = op_readdp(sp); dp = op_readpc(); op_writedp(dp, rd); }
alwaysinline void SMP::op_movw_dp_ya() { dp = op_readpc(); op_readdp(dp); op_writedp(dp + 0, regs.a); op_writedp(dp + 1, regs.y); }
void SMPcore::op_adjust_dp() { dp = op_readpc(); rd = op_readdp(dp); rd = (this->*op)(rd); op_writedp(dp, rd); }
template<int n> alwaysinline void SMP::op_mov_dp_reg() { dp = op_readpc(); op_readdp(dp); op_writedp(dp, regs.r[n]); }
alwaysinline void SMP::op_mov_ixinc_a() { op_io(); op_io(); op_writedp(regs.x++, regs.a); }
template<int n> void SMPcore::op_mov_dp_reg() { dp = op_readpc(); op_readdp<false>(dp); op_writedp(dp, regs.r[n]); }
template<int n, int i> void CPUcore::op_write_dpr_b() { dp = op_readpc(); op_io_cond2(); op_io(); L op_writedp(dp + regs.r[i], regs.r[n]); }
void SMPcore::op_mov_dp_const() { rd = op_readpc(); dp = op_readpc(); op_readdp<false>(dp); op_writedp(dp, rd); }
void SMPcore::op_mov_dp_dp() { sp = op_readpc(); rd = op_readdp(sp); dp = op_readpc(); op_writedp(dp, rd); }
void SMPcore::op_movw_dp_ya() { dp = op_readpc(); op_readdp<false>(dp); op_writedp(dp + 0, regs.a); op_writedp(dp + 1, regs.y); }
void SMPcore::op_mov_ix_a() { op_io(); op_readdp<false>(regs.x); op_writedp(regs.x, regs.a); }
alwaysinline void SMP::op_mov_ix_a() { op_io(); op_readdp(regs.x); op_writedp(regs.x, regs.a); }
template<int n> void CPUcore::op_write_dp_b() { dp = op_readpc(); op_io_cond2(); L op_writedp(dp, regs.r[n]); }
void SMPcore::op_mov_ixinc_a() { op_io(); op_io(); op_writedp(regs.x++, regs.a); }