예제 #1
0
파일: VM.cs 프로젝트: furesoft/FureOS
        public void Exec(byte[] source)
        {
            var s = new MState();

            while (s.IP < source.Length)
            {
                s.IP += 1;

                var op = (OpCode)source[s.IP];

                if (op == OpCode.Halt)
                {
                    break;
                }
                else
                {
                    bool found = false;
                    foreach (var instr in Instructions)
                    {
                        if (instr.OpCode == op)
                        {
                            found = true;
                            var argstack = new Core.Stack <byte>();

                            for (int i = 0; i < instr.ArgsCount; i++)
                            {
                                s.IP += 1;
                                argstack.Push(source[s.IP]);
                            }
                            instr.Run(s, argstack);
                        }
                    }

                    if (!found)
                    {
                        //Screen.WriteLine("Could not find OpCode: " + (byte)op);
                    }
                }
            }
        }
예제 #2
0
 public abstract void Run(MState state, Stack <byte> args);