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])
			);
		}