void R65816::op_jsr_addr() { aa.l = op_readpc(); aa.h = op_readpc(); op_io(); regs.pc.w--; op_writestack(regs.pc.h); L op_writestack(regs.pc.l); regs.pc.w = aa.w; }
template<int vectorE, int vectorN> void R65816::op_interrupt_e() { op_readpc(); op_writestack(regs.pc.h); op_writestack(regs.pc.l); op_writestack(regs.p); rd.l = op_readlong(vectorE + 0); regs.pc.b = 0; regs.p.i = 1; regs.p.d = 0; L rd.h = op_readlong(vectorE + 1); regs.pc.w = rd.w; }
void CPU::op_irq() { CPU::op_read(regs.pc.d); // dummy read; don't use debugger's read method op_io(); if(!regs.e) op_writestack(regs.pc.b); op_writestack(regs.pc.h); op_writestack(regs.pc.l); op_writestack(regs.e ? (regs.p & ~0x10) : regs.p); rd.l = op_read(status.interrupt_vector + 0); regs.pc.b = 0x00; regs.p.i = 1; regs.p.d = 0; rd.h = op_read(status.interrupt_vector + 1); regs.pc.w = rd.w; }
void CPU::op_irq(uint16 vector) { op_read(regs.pc.d); op_io(); if(!regs.e) op_writestack(regs.pc.b); op_writestack(regs.pc.h); op_writestack(regs.pc.l); op_writestack(regs.e ? (regs.p & ~0x10) : regs.p); rd.l = op_read(vector + 0); regs.pc.b = 0x00; regs.p.i = 1; regs.p.d = 0; rd.h = op_read(vector + 1); regs.pc.w = rd.w; }
void sCPU::op_irq() { op_read(regs.pc.d); op_io(); if(!regs.e) op_writestack(regs.pc.b); op_writestack(regs.pc.h); op_writestack(regs.pc.l); op_writestack(regs.e ? (regs.p & ~0x10) : regs.p); rd.l = op_read(status.interrupt_vector + 0); regs.pc.b = 0x00; regs.p.i = 1; regs.p.d = 0; rd.h = op_read(status.interrupt_vector + 1); regs.pc.w = rd.w; }
alwaysinline void SMP::op_brk() { rd = op_readaddr(0xffde) << 0; rd |= op_readaddr(0xffdf) << 8; op_io(); op_io(); op_writestack(regs.pc >> 8); op_writestack(regs.pc >> 0); op_writestack(regs.p); regs.pc = rd; regs.p.b = 1; regs.p.i = 0; }
void R65816::op_php() { op_io(); L op_writestack(regs.p); }
void R65816::op_phk() { op_io(); L op_writestack(regs.pc.b); }
void R65816::op_phb() { op_io(); L op_writestack(regs.db); }
template<int n> void R65816::op_push_w() { op_io(); op_writestack(regs.r[n].h); L op_writestack(regs.r[n].l); }