Adds lots of convencience like hotkeys and file loading.
This commit is contained in:
parent
eef0ff508a
commit
fa4efc8b1c
2 changed files with 122 additions and 6 deletions
File diff suppressed because one or more lines are too long
|
@ -7,6 +7,8 @@ using System.Windows.Input;
|
|||
using SuperVM.Assembler;
|
||||
using System.Timers;
|
||||
using System.Windows;
|
||||
using Microsoft.Win32;
|
||||
using System.IO;
|
||||
|
||||
namespace SuperVM.VisualDebugger
|
||||
{
|
||||
|
@ -18,6 +20,8 @@ namespace SuperVM.VisualDebugger
|
|||
private VMAssembly assembly;
|
||||
private Memory memory;
|
||||
private readonly Timer timer;
|
||||
private bool appendBootstrap = true;
|
||||
private bool insertDebugNewlines = false;
|
||||
|
||||
public VirtualMachineModel()
|
||||
{
|
||||
|
@ -39,6 +43,9 @@ namespace SuperVM.VisualDebugger
|
|||
this.StartSlowCommand = new RelayCommand(this.StartSlow);
|
||||
this.StopCommand = new RelayCommand(this.Stop);
|
||||
|
||||
this.LoadFromClipboardCommand = new RelayCommand(this.LoadFromClipboard);
|
||||
this.LoadFromFileCommand = new RelayCommand(this.LoadFromFile);
|
||||
|
||||
this.timer = new Timer();
|
||||
this.timer.Elapsed += Timer_Elapsed;
|
||||
|
||||
|
@ -47,6 +54,39 @@ namespace SuperVM.VisualDebugger
|
|||
this.Reset();
|
||||
}
|
||||
|
||||
private void LoadFromFile()
|
||||
{
|
||||
var ofd = new OpenFileDialog()
|
||||
{
|
||||
Filter = "All Files (*.*)|*.*",
|
||||
Title = "Load Assembler Source...",
|
||||
AddExtension = false,
|
||||
};
|
||||
if (ofd.ShowDialog(App.Current.MainWindow) != true)
|
||||
return;
|
||||
var source = File.ReadAllText(ofd.FileName);
|
||||
LoadSource(source);
|
||||
}
|
||||
|
||||
private void LoadFromClipboard()
|
||||
{
|
||||
if (Clipboard.ContainsText(TextDataFormat.UnicodeText) == false)
|
||||
return;
|
||||
this.LoadSource(Clipboard.GetText(TextDataFormat.UnicodeText));
|
||||
}
|
||||
|
||||
private void LoadSource(string source)
|
||||
{
|
||||
this.Source = source;
|
||||
if (this.appendBootstrap)
|
||||
{
|
||||
this.Source = "\tcpget\n\tjmp @main\n\tsyscall [ci: 0]\n" + this.Source;
|
||||
}
|
||||
OnPropertyChanged(nameof(Source));
|
||||
|
||||
this.Recompile();
|
||||
}
|
||||
|
||||
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
this.Step();
|
||||
|
@ -71,16 +111,25 @@ namespace SuperVM.VisualDebugger
|
|||
|
||||
private void Process_SysCall(object sender, Process.CommandExecutionEnvironment e)
|
||||
{
|
||||
var appendix = "";
|
||||
if (this.insertDebugNewlines)
|
||||
appendix = "\n";
|
||||
switch (e.Additional)
|
||||
{
|
||||
case 0: // Stop execution
|
||||
{
|
||||
this.Stop();
|
||||
this.Reset();
|
||||
break;
|
||||
}
|
||||
case 1: // Print char
|
||||
{
|
||||
this.Output += Encoding.ASCII.GetString(new[] { (byte)e.Input0 });
|
||||
this.Output += Encoding.ASCII.GetString(new[] { (byte)e.Input0 }) + appendix;
|
||||
this.OnPropertyChanged(nameof(Output));
|
||||
break;
|
||||
}
|
||||
case 2: // Print Numeric
|
||||
{
|
||||
this.Output += e.Input0.ToString() + appendix;
|
||||
this.OnPropertyChanged(nameof(Output));
|
||||
break;
|
||||
}
|
||||
|
@ -104,7 +153,7 @@ namespace SuperVM.VisualDebugger
|
|||
|
||||
public void Reset()
|
||||
{
|
||||
this.timer.Stop();
|
||||
this.Stop();
|
||||
this.process.Reset();
|
||||
this.OnVmChanged();
|
||||
}
|
||||
|
@ -185,12 +234,34 @@ namespace SuperVM.VisualDebugger
|
|||
|
||||
public string Output { get; set; }
|
||||
|
||||
public bool AppendBootstrap
|
||||
{
|
||||
get { return this.appendBootstrap; }
|
||||
set
|
||||
{
|
||||
this.appendBootstrap = value;
|
||||
OnPropertyChanged(nameof(AppendBootstrap));
|
||||
}
|
||||
}
|
||||
|
||||
public bool InsertDebugNewlines
|
||||
{
|
||||
get { return this.insertDebugNewlines; }
|
||||
set
|
||||
{
|
||||
this.insertDebugNewlines = value;
|
||||
OnPropertyChanged(nameof(InsertDebugNewlines));
|
||||
}
|
||||
}
|
||||
|
||||
public ICommand StepCommand { get; private set; }
|
||||
public ICommand ResetCommand { get; private set; }
|
||||
public ICommand RecompileCommand { get; private set; }
|
||||
public ICommand StartCommand { get; private set; }
|
||||
public ICommand StopCommand { get; private set; }
|
||||
public ICommand StartSlowCommand { get; private set; }
|
||||
public ICommand LoadFromClipboardCommand { get; private set; }
|
||||
public ICommand LoadFromFileCommand { get; private set; }
|
||||
}
|
||||
|
||||
public class StackItem
|
||||
|
|
Loading…
Reference in a new issue