Exemple #1
0
 public void Step(Action onStepComplete)
 {
     SetRunMode(false);
     SetAddressToPC();
     _process.StandardInput.WriteLine("continue");
     _process.StandardOutput.ReadLine();
     AwaitOnThread(onFinish: () =>
     {
         ExecutionState = new BasmExecutionState(ExecutionState.ProgramCounter + 1, ExecutionState);
         onStepComplete();
     });
 }
Exemple #2
0
        public void BreakExecution()
        {
            Thread execThread = _execThread;

            if (execThread != null)
            {
                execThread.Abort();
                _execThread = null;

                _isInRunMode = false;
                _process.StandardInput.WriteLine("run");
                string output = _process.StandardOutput.ReadLine();
                output         = _process.StandardOutput.ReadLine();
                ExecutionState = ParseExecutionState(output);
                ExecutionState = new BasmExecutionState(ExecutionState.ProgramCounter + 1, ExecutionState);
            }
        }
Exemple #3
0
        private void AwaitOnThread(Action onFinish)
        {
            Debug.Assert(_execThread == null, "ExecuteOnThread called when another thread is observing the program");

            _execThread = new Thread(() =>
            {
                _process.StandardOutput.ReadLine(); // wait for the program to halt

                _process.StandardInput.WriteLine("read");
                _process.StandardOutput.ReadLine();               // Адр Знчн  СК  РА  РК   РД    А  C Адр Знчн
                string line = _process.StandardOutput.ReadLine(); // final program state

                ExecutionState = ParseExecutionState(line);
                _execThread    = null;
                onFinish();
            });
            _execThread.Start();
        }
Exemple #4
0
        public void StartSuspended()
        {
            Debug.Assert(_process == null);

            var info = new ProcessStartInfo("java");

            info.Arguments              = " -jar -Dmode=cli -Dfile.encoding=UTF-8 C:\\bcomp.jar";
            info.RedirectStandardInput  = true;
            info.RedirectStandardOutput = true;
            info.UseShellExecute        = false;
            info.CreateNoWindow         = true;
            info.StandardOutputEncoding = Encoding.UTF8;

            _process           = new Process();
            _process.StartInfo = info;
            _process.Start();

            string code = _sourceFile.GetContents();

            _process.StandardInput.WriteLine("asm");
            _process.StandardInput.WriteLine(code);
            _process.StandardInput.WriteLine("end");

            string line = "";

            while (!line.StartsWith("Программа начинается с адреса"))
            {
                line = _process.StandardOutput.ReadLine();
            }

            ExecutionState = new BasmExecutionState(
                programCounter: uint.Parse(Regex.Match(line, "Программа начинается с адреса\\s*([0-9A-Fa-f]+)").Groups[1].Value, NumberStyles.HexNumber)
                );

            ProcessId = new AD_PROCESS_ID()
            {
                ProcessIdType = (uint)enum_AD_PROCESS_ID.AD_PROCESS_ID_SYSTEM,
                dwProcessId   = (uint)_process.Id
            };
        }
Exemple #5
0
 public StackFrame(SourceFileContext context, BasmExecutionState execState)
 {
     _context   = context;
     _execState = execState;
 }