static public DynarecResult JP_addr(DynarecContextChip8 Context, ushort Address) { return ast.Statements( #if NATIVE_JUMPS ast.Statement(ast.CallTail(ast.CallDelegate(Context.GetCallForAddress(Address + Context.GetRegister(0)), Context.GetCpuContext()))), #else ast.Statements(ast.Assign(Context.GetPC(), Address + Context.GetRegister(0))), #endif ast.Return() ); }
static public DynarecResult SE_n(DynarecContextChip8 Context, byte X, byte Byte) { return ast.IfElse( ast.Binary(Context.GetRegister(X), "==", Byte), ast.GotoAlways(Context.PCToLabel[Context.EndPC + 2]) ); }
static public DynarecResult ADD_i_vx(DynarecContextChip8 Context, byte X) { return ast.Assign(Context.GetI(), Context.GetI() + Context.GetRegister(X)); }
static public DynarecResult LD_f_vx(DynarecContextChip8 Context, byte X) { return ast.Assign(Context.GetI(), ast.Cast<ushort>(ast.Cast<int>(Context.GetRegister(X)) * ast.Cast<int>(5))); }
static public DynarecResult LD_vx_dt(DynarecContextChip8 Context, byte X) { return ast.Assign(Context.GetRegister(X), Context.GetDelayTimerValue()); }
static public DynarecResult LD_st_vx(DynarecContextChip8 Context, byte X) { return ast.Assign(Context.GetSoundTimerValue(), Context.GetRegister(X)); }
static public DynarecResult SUB(DynarecContextChip8 Context, byte X, byte Y) { return _SUB(Context, X, Context.GetRegister(Y)); }
static public DynarecResult SKNP(DynarecContextChip8 Context, byte X) { return ast.IfElse( ast.Unary("!", ast.CallInstance( Context.GetController(), typeof(IController).GetMethod("IsPressed"), Context.GetRegister(X) )), ast.GotoAlways(Context.PCToLabel[Context.EndPC + 2]) ); }
static private DynarecResult _BinaryOp(DynarecContextChip8 Context, byte X, string Op, byte Y) { return ast.Assign(Context.GetRegister(X), ast.Binary(Context.GetRegister(X), Op, Context.GetRegister(Y))); }
static private DynarecResult _SUB(DynarecContextChip8 Context, byte X, AstNodeExpr Value) { return ast.Statements( ast.Assign(Context.GetRegister(15), ast.Cast<byte>(ast.Binary(ast.Cast<uint>(Context.GetRegister(X)), ">", ast.Cast<uint>(Value)))), ast.Assign(Context.GetRegister(X), Context.GetRegister(X) - Value) ); }
static public DynarecResult LD_v(DynarecContextChip8 Context, byte X, byte Y) { return ast.Assign(Context.GetRegister(X), Context.GetRegister(Y)); }
static public DynarecResult LD_n(DynarecContextChip8 Context, byte X, byte Byte) { return ast.Assign(Context.GetRegister(X), ast.Immediate(Byte)); }
static public DynarecResult SNE_v(DynarecContextChip8 Context, byte X, byte Y) { return ast.IfElse( ast.Binary(Context.GetRegister(X), "!=", Context.GetRegister(Y)), ast.GotoAlways(Context.PCToLabel[Context.EndPC + 2]) ); }