public override PCInstruction Execute() { var pos = firstArg.GetValue(Chip); if (pos > 2 || pos < 0) { return(PCInstruction.INCREMENT); } pos = 2 - pos; var acc = Chip.ReadPort(Register.ACC); var isNegative = acc < 0; var accStr = Math.Abs(acc).ToString(); var newValue = (secondArg.GetValue(Chip) % 10).ToString(); accStr = accStr.PadLeft(3, '0'); acc = int.Parse(accStr.Remove(pos, 1).Insert(pos, newValue)); if (isNegative) { acc *= -1; } Chip.WritePort(Register.ACC, acc); return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { var acc = Chip.ReadPort(Register.ACC); Chip.WritePort(Register.ACC, acc * arg.GetValue(Chip)); return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { var val1 = firstArg.GetValue(Chip); var val2 = secondArg.GetValue(Chip); Chip.SetTestOutcome(val1 < val2 ? TestPrefix.POSITIVE : TestPrefix.NEGATIVE); return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { var pos = arg.GetValue(Chip); var acc = Chip.ReadPort(Register.ACC); if (pos < 3 || pos > -1) { Chip.WritePort(Register.ACC, (int)(acc / Math.Pow(10, pos) % 10)); } return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { var val1 = firstArg.GetValue(Chip); var val2 = secondArg.GetValue(Chip); if (val1 > val2) { Chip.SetTestOutcome(TestPrefix.POSITIVE); } else if (val1 < val2) { Chip.SetTestOutcome(TestPrefix.NEGATIVE); } else { Chip.SetTestOutcome(TestPrefix.NONE); } return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { if (!_initialized) { _sleepTime = arg.GetValue(Chip); _initialized = true; } if (_sleepTime > 0) { _sleepTime--; Chip.IsSleeping = true; return(PCInstruction.NOTHING); } Chip.IsSleeping = false; _initialized = false; return(PCInstruction.INCREMENT); }
public override PCInstruction Execute() { if (cachedVal == -1000) { var val = src.GetValue(Chip); if (val == -1000) { return(PCInstruction.NOTHING); } cachedVal = val; } var writeResponse = Chip.WritePort(dst.Register, cachedVal); if (writeResponse == WritePortResponse.WAITING || writeResponse == WritePortResponse.REGISTERED) { return(PCInstruction.NOTHING); } cachedVal = -1000; return(PCInstruction.INCREMENT); }