public static void Preserve(RegisterBase reg, Action block) { reg.State.Push(); Backup(reg); block.Invoke(); Restore(reg); reg.State.Pop(); }
public static void Restore(RegisterBase reg) { if (reg is RegisterA) { CPU6502.PLA(); A.State.Pop(); } else if (reg is RegisterX) { CPU6502.PLA(); X.Set(A); X.State.Pop(); } else if (reg is RegisterY) { CPU6502.PLA(); Y.Set(A); Y.State.Pop(); } }
public static void Backup(RegisterBase reg) { if (reg is RegisterA) { CPU6502.PHA(); A.State.Push(); } else if (reg is RegisterX) { CPU6502.TXA(); //Use(Asm.TXA); CPU6502.PHA(); X.State.Push(); } else if (reg is RegisterY) { CPU6502.TYA(); //Use(Asm.TYA); CPU6502.PHA(); Y.State.Push(); } }