public void Constructor_WithDataTest(byte[][] data, byte[][] expected, int expCount) { OpData opd = new OpData(data); Helper.ComparePrivateField(opd, "holder", expected); Assert.Equal(expCount, opd.ItemCount); }
public override OpData Parse(string[] args) { string im = trimReg(args[1]); OpData data = new OpData(); data.rD = 0; if (im.StartsWith("0x")) { string hex = im.Substring(2); data.sval = short.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else { data.sval = short.Parse(im); } if ((data.sval & 1) == 1) { Console.Error.WriteLine("Line " + lineNum + ": biro can only jump to 2 byte boundaries "); Environment.Exit(3); } if ((data.sval >= 2048) || (data.sval < -2048)) { Console.Error.WriteLine("Line " + lineNum + ": biro branch target out of range "); Environment.Exit(3); } data.flags = 0; data.gen = new OpGeneratorRSignedIExt(); return(data); }
public ModeManager(IModeFactory factory, IModalGame gameInst = null) { _factory = factory; _modeDataStack = new Stack <ModeData>(); _nextOpData = OpData.DoNothing; _gameInst = gameInst; }
public void BinStream(OpData data, BinaryWriter sw) { UInt16 inst = BuildInstruction(data); byte[] bytes = BitConverter.GetBytes(inst); sw.Write(bytes); }
protected void _StartMode(OpData opData) { IGameMode nextMode = _factory.Create(opData.NextModeId); _modeDataStack.Push(new ModeData(opData.NextModeId, nextMode)); nextMode.Setup(this, _gameInst); nextMode.Start(opData.NextParam); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.opcode = opcode_shift_type; data.signedness = 0; return(data); }
public void EramStream(OpData data, StreamWriter sw) { UInt16 inst = BuildInstruction(data); byte high = (byte)(inst >> 8); byte low = (byte)(inst & 0xFF); sw.Write(String.Format("X\"{0:X2}\", X\"{1:X2}\"", high, low)); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.opcode = (UInt16)OpCodes.OpCmp; data.signedness = (UInt16)(m_signed ? 1 : 0); return(data); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.opcode = (UInt16)OpCodes.OpBranch; data.signedness = 0; return(data); }
public void Constructor_WithCapTest(int capToUse, int expectedLen) { OpData opd = new OpData(capToUse); byte[][] expected = new byte[expectedLen][]; Helper.ComparePrivateField(opd, "holder", expected); Assert.Equal(0, opd.ItemCount); }
public void Constructor_DefaultTest() { OpData opd = new OpData(); byte[][] expected = new byte[DefaultCapacity][]; Helper.ComparePrivateField(opd, "holder", expected); Assert.Equal(0, opd.ItemCount); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.opcode = (UInt16)OpCodes.OpSub; data.signedness = 0; data.flags = 1; data.gen = new OpGeneratorRRImm(); return(data); }
public void CheckConditionalOpBoolTest(byte[] data, bool standardRule, bool expected) { var stack = new OpData() { IsStrictConditionalOpBool = standardRule }; bool actual = stack.CheckConditionalOpBool(data); Assert.Equal(expected, actual); }
public override UInt16 BuildInstruction(OpData data) { UInt16 inst = 0; inst |= (UInt16)((data.opcode & (UInt16)0xF) << (UInt16)12); inst |= (UInt16)((data.rD & (UInt16)0x7) << (UInt16)9); inst |= (UInt16)((data.signedness & (UInt16)0x1) << (UInt16)8); inst |= (UInt16)((data.sval & (UInt16)0xFF)); return(inst); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.rB = data.rA; data.rA = data.rD; data.rD = (UInt16)m_cond; data.opcode = (UInt16)OpCodes.OpCondBranch; data.signedness = 0; data.gen = new OpGeneratorRRR(); return(data); }
public override OpData Parse(string[] args) { string rD = trimReg(args[1]); OpData data = new OpData(); data.rD = ushort.Parse(rD); data.rA = 0; data.rB = 0; data.flags = 0; data.gen = new OpGeneratorRRR(); return(data); }
public override UInt16 BuildInstruction(OpData data) { UInt16 inst = 0; inst |= (UInt16)((data.opcode & (UInt16)0xF) << (UInt16)12); inst |= (UInt16)((data.rD & (UInt16)0x7) << (UInt16)9); inst |= (UInt16)((data.signedness & (UInt16)0x1) << (UInt16)8); inst |= (UInt16)((data.rA & (UInt16)0x7) << (UInt16)5); inst |= (UInt16)((data.rB & (UInt16)0xf) << (UInt16)1); inst |= (UInt16)(data.flags & (UInt16)0x01); return(inst); }
private bool CheckStack(OpData stack, out string error) { if (stack.ItemCount > 0 && IsNotZero(stack.Pop())) { error = null; return(true); } else { error = stack.ItemCount == 0 ? "Emtpy stack" : "Top stack item is not true."; return(false); } }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); OpData data = new OpData(); data.rD = ushort.Parse(rd); data.sval = short.Parse(ra); data.rB = 0; data.flags = 0; data.gen = new OpGeneratorRRR();//RRR is ok for RR form return(data); }
public override OpData Parse(string[] args) { OpData data = base.Parse(args); data.rB = data.rA; data.rA = data.rD; data.rD = (UInt16)(data.sval >> 2); data.flags = (UInt16)(data.sval & 0x3); data.opcode = (UInt16)OpCodes.OpWrite; data.signedness = (UInt16)((byteOp)?1:0); // as we've split sval already above we use RRR data.gen = new OpGeneratorRRR(); return(data); }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); string rb = trimReg(args[3]); OpData data = new OpData(); data.rD = ushort.Parse(rd); data.rA = ushort.Parse(ra); data.rB = ushort.Parse(rb); data.flags = 0; data.gen = new OpGeneratorRRR(); return(data); }
public override OpData Parse(string[] args) { if (args.Length < 4) { Console.Error.WriteLine("Line " + lineNum + ": Not enough arguments for instruction " + args[0]); Environment.Exit(3); } OpData data = base.Parse(args); if (!args[3].StartsWith("r")) { Console.Out.WriteLine("Line " + lineNum + ": Argument 3 of instruction " + args[0] + " is not a register. Do you mean to use addi?"); } data.opcode = (UInt16)OpCodes.OpAdd; data.signedness = (UInt16)((signed)?1:0); return(data); }
public void Run_SpecialCaseTest(bool isStrict, IOperation[] operations, bool expBool, string expError, int expOpCount) { // 0of0 multisig => OP_0 [] OP_0 [] OP_0 OpData data = new OpData() { IsBip147Enabled = isStrict }; // Run all PushOps (all items in array except last) for (int i = 0; i < operations.Length - 1; i++) { bool b1 = operations[i].Run(data, out string error1); Assert.True(b1, error1); Assert.Null(error1); } // Run the OP_CheckMultiSig operation bool b2 = operations[^ 1].Run(data, out string error2);
public override OpData Parse(string[] args) { OpData data = base.Parse(args); if ((data.sval > 15) || (data.sval < -16)) { Console.Error.WriteLine("Constant relative offset is out of range [-16, 15]: " + data.sval); Console.Error.WriteLine("Whilst parsing: " + string.Join(" ", args)); Environment.Exit(2); } data.rA = data.rD; data.rD = (UInt16)m_cond; data.opcode = (UInt16)OpCodes.OpCondBranch; data.signedness = 1; data.gen = new OpGeneratorCRsI(); return(data); }
public virtual bool Loop(float frameSecs) { // return false to signal quit // Get current op data and reset instance var // IGameMode orgMode = CurrentMode(); OpData curOpData = _nextOpData; _nextOpData = OpData.DoNothing; // stop the current state and start/resume another switch (curOpData.NextOp) { case ModeOp.Quit: _Stop(); return(false); // short circuit exit case ModeOp.Switch: _StopCurrentMode(); _StartMode(curOpData); break; case ModeOp.Pop: string prevName = CurrentMode().GetType().Name; _StopCurrentMode(); _ResumeMode(prevName, curOpData.NextParam); break; case ModeOp.Push: _SuspendCurrentMode(); _StartMode(curOpData); break; } //# Now - whatever is current, call its loop if (_modeDataStack.Count > 0) { CurrentMode().Loop(frameSecs); } // If nothing on stack - we're done return(_modeDataStack.Count > 0); }
public CodeFrame Clone() { var copy = new CodeFrame(); copy.Layouts = Layouts.Clone(); copy.Strings = Strings.Clone(); copy.GlobalScope = GlobalScope.Clone(); copy.Ops = Ops.Clone(); copy.OpData = OpData.Clone(); copy._references = new ReferenceMap(_references); copy.Symbols = Symbols != null?Symbols.Clone() : null; copy.HandleMap = HandleMap.Clone(); copy.InternalTypes = new Dictionary <String, Int32>(InternalTypes); copy._internalClasses = new ClassMap(_internalClasses); copy.InternalInstances = InternalInstances.Clone(); copy.LateBounds = LateBounds.Clone(); copy.InternalConstructors = InternalConstructors.Clone(); return(copy); }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); string os = "0"; if (args.Length >= 4) { os = trimReg(args[3]); } short val; OpData data = new OpData(); data.rD = ushort.Parse(rd); data.rA = ushort.Parse(ra); data.rB = 0; data.sval = short.TryParse(os, out val)?val:(short)0; data.flags = 0; data.gen = new OpGeneratorCRsI(); return(data); }
private string ToOpDataString() { if (OpData == null) { return(null); } if (SystemCallMethod.NotNull()) { return(SystemCallMethod); } if (OpCode >= OpCode.PUSHINT8 && OpCode <= OpCode.PUSHINT256) { return(new BigInteger(OpData).ToString()); } var utf8String = OpDataUtf8String; if (utf8String.Any(p => p < '0' || p > 'z')) { return(OpData.ToHexString()); } return(utf8String); }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string im = trimReg(args[2]); OpData data = new OpData(); data.rD = ushort.Parse(rd); if (im.StartsWith("0x")) { string hex = im.Substring(2); data.rA = ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else { data.rA = ushort.Parse(im); } data.flags = 0; data.gen = new OpGeneratorRI(); return(data); }
public IStateNameData AssemblePUCData(IStateNameData data) { ListData listData = new ListData(this.DataWindow, _index); PUCData d = (PUCData)data; if (d is ValueData) { MultipleValueData mv = new MultipleValueData(); mv.AddValue((ValueData)d); d = mv; } listData.AddElement(d); OpData ret = listData; if (_windowParent != null) { ret = (OpData)_windowParent.AssemblePUCData(listData); } return(ret); }
public override OpData Parse(string[] args) { string im = trimReg(args[1]); OpData data = new OpData(); data.rD = 0; if (im.StartsWith("0x")) { string hex = im.Substring(2); data.sval = short.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else { data.sval = short.Parse(im); } if ((data.sval & 1) == 1) { Console.Error.WriteLine("Line " + lineNum + ": biro can only jump to 2 byte boundaries "); Environment.Exit(3); } if ((data.sval >= 2048) || (data.sval < -2048)) { Console.Error.WriteLine("Line " + lineNum + ": biro branch target out of range "); Environment.Exit(3); } data.flags = 0; data.gen = new OpGeneratorRSignedIExt(); return data; }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); string os = "0"; if (args.Length >= 4) { os = trimReg(args[3]); } short val; OpData data = new OpData(); data.rD = ushort.Parse(rd); data.rA = ushort.Parse(ra); data.rB = 0; data.sval = short.TryParse(os, out val)?val:(short)0; data.flags = 0; data.gen = new OpGeneratorCRsI(); return data; }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string im = trimReg(args[2]); OpData data = new OpData(); data.rD = ushort.Parse(rd); if (im.StartsWith("0x")) { string hex = im.Substring(2); data.rA = ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else { data.rA = ushort.Parse(im); } data.flags = 0; data.gen = new OpGeneratorRI(); return data; }
public override OpData Parse(string[] args) { string rA = trimReg(args[1]); OpData data = new OpData(); data.rD = 0; data.rA = ushort.Parse(rA); data.rB = 0; data.flags = 0; data.gen = new OpGeneratorRRR(); return data; }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); string rb = trimReg(args[3]); OpData data = new OpData(); data.rD = ushort.Parse(rd); data.rA = ushort.Parse(ra); data.rB = ushort.Parse(rb); data.flags = 0; data.gen = new OpGeneratorRRR(); return data; }
public override OpData Parse(string[] args) { string rd = trimReg(args[1]); string ra = trimReg(args[2]); OpData data = new OpData(); data.rD = ushort.Parse(rd); data.sval = short.Parse(ra); data.rB = 0; data.flags = 0; data.gen = new OpGeneratorRRR();//RRR is ok for RR form return data; }
public abstract UInt16 BuildInstruction(OpData data);
public void BinTxtStream(OpData data, StreamWriter sw) { UInt16 inst = BuildInstruction(data); sw.Write(Convert.ToString(inst, 2).PadLeft(16, '0')); }
public void HexStream(OpData data, StreamWriter sw) { UInt16 inst = BuildInstruction(data); sw.Write(String.Format("{0:X4}", inst)); }
public override UInt16 BuildInstruction(OpData data) { return data.rD; }
public override OpData Parse(string[] args) { OpData data = new OpData(); data.gen = null; switch (sp) { case SpecialAssign.INT: { data.rD = 0; data.rA = 0; data.rB = 0; data.flags = (UInt16)0x02; data.signedness = 0; string im = trimReg(args[1]); if (im.StartsWith("0x")) { string hex = im.Substring(2); data.rA = ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else { data.rA = ushort.Parse(im); } // shift the immediate twice left, then or the flags data.rA = (ushort)(data.rA << 2); data.rA = (ushort)(data.rA | data.flags); data.gen = new OpGeneratorRI(); break; } case SpecialAssign.SAVE_PC: data = base.Parse(args); data.flags = (UInt16)0x00; data.signedness = 0; break; case SpecialAssign.SAVE_STATUS: data = base.Parse(args); data.flags = (UInt16)0x01; data.signedness = 0; break; case SpecialAssign.GIEF: data = base.Parse(args); data.rA = 0; data.rB = 0; data.flags = (UInt16)0x00; data.signedness = 1; break; case SpecialAssign.BBI: data.rD = 0; data.rA = 0; data.rB = 0; data.flags = (UInt16)0x01; data.signedness = 1; break; case SpecialAssign.EI: data.rD = 0; data.rA = 0; data.rB = 0; data.flags = (UInt16)0x02; data.signedness = 1; break; case SpecialAssign.DI: data.rD = 0; data.rA = 0; data.rB = 0; data.flags = (UInt16)0x03; data.signedness = 1; break; } data.opcode = (UInt16)OpCodes.OpSpecial; if (data.gen == null) { data.gen = new OpGeneratorRRR(); } return data; }
public override OpData Parse(string[] args) { string datavalue = args[1]; OpData data = new OpData(); if (datavalue.StartsWith("0x")) { string hex = datavalue.Substring(2); data.rD = ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber); } else if (datavalue.StartsWith("\"")) { bool found = false; datavalue = Regex.Unescape(datavalue); // check if datavalue has opening and closing quotes if (datavalue.StartsWith("\"") && datavalue.EndsWith("\"")) { found = true; } // check if there are more args with the end data. else if (args.Length > 2) { int idx = 2; do { datavalue += " " + args[2]; } while (!(datavalue.StartsWith("\"") && datavalue.EndsWith("\"")) && idx < args.Length); found = datavalue.StartsWith("\"") && datavalue.EndsWith("\""); } if (found) { datavalue = datavalue.Substring(1, datavalue.Length - 2) ; byte[] b = System.Text.Encoding.ASCII.GetBytes(datavalue); if (b.Length > 2) { Console.Error.WriteLine("Line " + lineNum + ": Maximum of two characters per dw - " + datavalue); Environment.Exit(3); } else if (b.Length == 2) { data.rD = (ushort)((((uint)b[0]) << 8) | b[1] & 0xFFU); } else { data.rD = (ushort)((((uint)b[0]) << 8) & 0xFF00U); } } else { Console.Error.WriteLine("Line " + lineNum + ": Couldn't parse string - " + datavalue); Environment.Exit(3); } } else { data.rD = ushort.Parse(datavalue); } data.gen = new OpGeneratorDataD(); return data; }
public override UInt16 BuildInstruction(OpData data) { UInt16 inst = 0; inst |= (UInt16)((data.opcode & (UInt16)0xF) << (UInt16)12); inst |= (UInt16)((data.sval & (UInt16)0x0E00)); inst |= (UInt16)((data.signedness & (UInt16)0x1) << (UInt16)8); inst |= (UInt16)(((data.sval >> 1) & (UInt16)0xFF)); return inst; }
public override UInt16 BuildInstruction(OpData data) { UInt16 inst = 0; inst |= (UInt16)((data.opcode & (UInt16)0xF) << (UInt16)12); inst |= (UInt16)((data.rD & (UInt16)0x7) << (UInt16)9); inst |= (UInt16)((data.signedness & (UInt16)0x1) << (UInt16)8); inst |= (UInt16)((data.rA & (UInt16)0x7) << (UInt16)5); inst |= (UInt16)((data.rB & (UInt16)0x7) << (UInt16)2); inst |= (UInt16)((data.flags & (UInt16)0x3)); return inst; }