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); } } } }
public abstract void Run(MState state, Stack <byte> args);