Beispiel #1
0
        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);
        }
Beispiel #2
0
            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);
            }
Beispiel #3
0
 public ModeManager(IModeFactory factory, IModalGame gameInst = null)
 {
     _factory       = factory;
     _modeDataStack = new Stack <ModeData>();
     _nextOpData    = OpData.DoNothing;
     _gameInst      = gameInst;
 }
Beispiel #4
0
            public void BinStream(OpData data, BinaryWriter sw)
            {
                UInt16 inst = BuildInstruction(data);

                byte[] bytes = BitConverter.GetBytes(inst);
                sw.Write(bytes);
            }
Beispiel #5
0
        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);
        }
Beispiel #6
0
            public override OpData Parse(string[] args)
            {
                OpData data = base.Parse(args);

                data.opcode     = opcode_shift_type;
                data.signedness = 0;
                return(data);
            }
Beispiel #7
0
            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));
            }
Beispiel #8
0
            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);
            }
Beispiel #9
0
            public override OpData Parse(string[] args)
            {
                OpData data = base.Parse(args);

                data.opcode     = (UInt16)OpCodes.OpBranch;
                data.signedness = 0;
                return(data);
            }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        public void Constructor_DefaultTest()
        {
            OpData opd = new OpData();

            byte[][] expected = new byte[DefaultCapacity][];

            Helper.ComparePrivateField(opd, "holder", expected);
            Assert.Equal(0, opd.ItemCount);
        }
Beispiel #12
0
            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);
            }
Beispiel #13
0
        public void CheckConditionalOpBoolTest(byte[] data, bool standardRule, bool expected)
        {
            var stack = new OpData()
            {
                IsStrictConditionalOpBool = standardRule
            };
            bool actual = stack.CheckConditionalOpBool(data);

            Assert.Equal(expected, actual);
        }
Beispiel #14
0
            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);
            }
Beispiel #15
0
            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);
            }
Beispiel #16
0
            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);
            }
Beispiel #17
0
            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);
            }
Beispiel #18
0
 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);
     }
 }
Beispiel #19
0
            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);
            }
Beispiel #20
0
            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);
            }
Beispiel #21
0
            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);
            }
Beispiel #22
0
            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);
Beispiel #24
0
            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);
            }
Beispiel #25
0
        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);
        }
Beispiel #26
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);
        }
Beispiel #27
0
            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);
            }
Beispiel #28
0
        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);
        }
Beispiel #29
0
            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);
            }
Beispiel #30
0
        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);
        }
Beispiel #31
0
            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;
            }
Beispiel #32
0
            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;
            }
Beispiel #33
0
            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;
            }
Beispiel #34
0
            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;
            }
Beispiel #35
0
            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;
            }
Beispiel #36
0
 public void BinStream(OpData data, BinaryWriter sw)
 {
     UInt16 inst = BuildInstruction(data);
     byte[] bytes = BitConverter.GetBytes(inst);
     sw.Write(bytes);
 }
Beispiel #37
0
            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;
            }
Beispiel #38
0
 public abstract UInt16 BuildInstruction(OpData data);
Beispiel #39
0
 public void BinTxtStream(OpData data, StreamWriter sw)
 {
     UInt16 inst = BuildInstruction(data);
     sw.Write(Convert.ToString(inst, 2).PadLeft(16, '0'));
 }
Beispiel #40
0
 public void HexStream(OpData data, StreamWriter sw)
 {
     UInt16 inst = BuildInstruction(data);
     sw.Write(String.Format("{0:X4}", inst));
 }
Beispiel #41
0
 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));
 }
Beispiel #42
0
 public override UInt16 BuildInstruction(OpData data)
 {
     return data.rD;
 }
Beispiel #43
0
            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;
            }
Beispiel #44
0
            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;
            }
Beispiel #45
0
            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;
            }
Beispiel #46
0
            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;
            }