public void OperatorsInfoTests_GetInstructionFormats_InvalidFormat() { int idx = 0; Array.Resize(ref ops, 5); ops[4] = "I dnt Exist"; Array.Resize(ref opFormats, 5); opFormats[4] = EInstructionFormat.INVALID; Token[] opTkn = new Token[ops.Length]; for (int i = 0; i < opTkn.Length; i++) { opTkn[i] = new Token(TokenType.OPERATOR, ops[i]); } foreach (Token operation in opTkn) { EInstructionFormat f = OperatorsInfo.GetInstructionFormat(operation); Assert.AreEqual(opFormats[idx], f); idx++; } }
private void init(OperatorsInfo opi) { operatorInfo = opi; leave = false; waiting = 0; commands = new Dictionary <string, Command>(); commands.Add("start", new StartCommand(opi)); commands.Add("interval", new IntervalCommand(opi)); commands.Add("status", new StatusCommand(opi)); commands.Add("crash", new CrashCommand(opi)); commands.Add("freeze", new FreezeCommand(opi)); commands.Add("unfreeze", new UnfreezeCommand(opi)); commands.Add("wait", new WaitCommand(this)); }
public void OperatorsInfoTests_GetInstructionFormats_Success() { Token[] opTkn = new Token[ops.Length]; for (int i = 0; i < opTkn.Length; i++) { opTkn[i] = new Token(TokenType.OPERATOR, ops[i]); } int idx = 0; foreach (Token operation in opTkn) { EInstructionFormat f = OperatorsInfo.GetInstructionFormat(operation); Assert.AreEqual(opFormats[idx], f); idx++; } }
public IntervalCommand(OperatorsInfo opi) { operatorsInfo = opi; }
public StartCommand(OperatorsInfo opi) { operatorsInfo = opi; }
public UnfreezeCommand(OperatorsInfo opi) { operatorsInfo = opi; }
/// <summary> /// get binary format of each instruction /// </summary> private string GetBinaryFormat(IFormatInstructions _operator) { int opcode = OperatorsInfo.GetOPCode(_operator.Operator); switch (OperatorsInfo.GetInstructionFormat(_operator.Operator)) { case EInstructionFormat.FORMAT_1: { int Rc = 0; int Ra = 0; int Rb = 0; InstructionFormat1 format = (InstructionFormat1)_operator; if (format.RegisterA != null) { Ra = (format.RegisterA?.ToString() == "") ? 0 : Convert.ToInt32(Regex.Replace(format.RegisterA.ToString(), @"[.\D+]", "")); } if (format.RegisterC != null) { Rb = (format.RegisterB?.ToString() == "") ? 0 : Convert.ToInt32(Regex.Replace(format.RegisterB.ToString(), @"[.\D+]", "")); } if (format.RegisterC != null) { Rc = (format.RegisterC.ToString() == "") ? 0 : Convert.ToInt32(Regex.Replace(format.RegisterC.ToString(), @"[.\D+]", "")); } return($"{Convert.ToString(opcode, 2).PadLeft(5, '0')}" + $"{Convert.ToString(Ra, 2).PadLeft(3, '0')}" + $"{Convert.ToString(Rb, 2).PadLeft(3, '0')}" + $"{Convert.ToString(Rc, 2).PadLeft(3, '0')}00"); } case EInstructionFormat.FORMAT_2: { InstructionFormat2 format = (InstructionFormat2)_operator; int Ra = (format.RegisterA.ToString() == "") ? 0 : Convert.ToInt32(Regex.Replace(format.RegisterA.ToString(), @"[.\D+]", "")); int constOrAddr; if (constants.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = constants[format.ConstOrAddress.ToString()]; } else if (variables.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = variables[format.ConstOrAddress.ToString()]; } else if (labels.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = labels[format.ConstOrAddress.ToString()]; } else { //check if the constant or address is a direct input try { constOrAddr = UnitConverter.BinaryToByte( UnitConverter.HexToBinary( format.ConstOrAddress.ToString().Replace("#", "") ) ); } catch (OverflowException) { //send error message (undefined variable) AsmLogger.Error($"Overflow in instruction: {_operator}", currentLine.ToString(), $"Value '{format.ConstOrAddress}'"); return(null); } catch { //send error message (undefined variable) AsmLogger.Error($"Variable not defined: {_operator}", currentLine.ToString(), "Variable called but never defined"); return(null); } } return($"{UnitConverter.IntToBinary(opcode, defaultWidth: 5)}" + $"{UnitConverter.IntToBinary(Ra, defaultWidth: 3)}" + $"{UnitConverter.IntToBinary(constOrAddr, defaultWidth: 8)}"); } case EInstructionFormat.FORMAT_3: { InstructionFormat3 format = (InstructionFormat3)_operator; int constOrAddr = 0; if (constants.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = constants[format.ConstOrAddress.ToString()]; } else if (variables.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = variables[format.ConstOrAddress.ToString()]; } else if (labels.ContainsKey(format.ConstOrAddress.ToString())) { constOrAddr = labels[format.ConstOrAddress.ToString()]; } else { //check if the constant or address is a direct input try { constOrAddr = Convert.ToInt32(format.ConstOrAddress.ToString().Replace("#", ""), 16); } catch { //send error message (undefined variable) return(null); } } return($"{Convert.ToString(opcode, 2).PadLeft(5, '0')}" + $"{Convert.ToString(constOrAddr, 2).PadLeft(11, '0')}"); } default: { throw new Exception("Token is not an instruction"); } } }
public CrashCommand(OperatorsInfo opi) { operatorsInfo = opi; }
public Shell(OperatorsInfo opi) { init(opi); }