public static async Task Main(string[] args) { if (Environment.GetEnvironmentVariable("MANAGED_DEBUGGER_WAIT") == "1") { HandleDebugger(); } InitializeProcess(); var bus = new Bus(); InitializeFlags(bus); if (AppFlag.GetVariable("VM_TRACE")) { DeviceLoader.OnTrace += Console.WriteLine; } DeviceLoader.AutoGrub(bus.Add); InitializeMemory(bus, args); while (bus.State.halt == 0) { bus.cpu.Step(); await Task.Delay(1).ConfigureAwait(false); } bus.Unload(); }
public static void Set(AppFlag flag, ref bool option) { var value = Get(flag); if (value == null) { if (Has(flag)) { option = true; } return; } if (value == "1" || string.Equals(value, "true", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "yes", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "ok", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "y", StringComparison.OrdinalIgnoreCase)) { option = true; } else if (value == "0" || string.Equals(value, "false", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "no", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "not", StringComparison.OrdinalIgnoreCase) || string.Equals(value, "n", StringComparison.OrdinalIgnoreCase)) { option = false; } }
public void SendFlag(bool value) { AppFlag appFlag = Pool.Get <AppFlag>(); appFlag.value = value; AppResponse appResponse = Pool.Get <AppResponse>(); appResponse.flag = appFlag; Send(appResponse); }
public static void Set(AppFlag flag, ref string option) { var value = Get(flag); if (value == null) { return; } option = value; }
public static void InitializeFlags(Bus bus) { /* @0x11 */ bus.State.tc = AppFlag.GetVariable("VM_TRACE"); /* @0x12 */ bus.State.ec = AppFlag.GetVariable("VM_ERROR", true); /* @0x13 */ bus.State.km = AppFlag.GetVariable("VM_KEEP_MEMORY"); /* @0x14 */ bus.State.fw = AppFlag.GetVariable("VM_MEM_FAST_WRITE"); }
static DeviceLoader() { if (AppFlag.GetVariable("VM_TRACE")) { OnTrace += Console.WriteLine; } AssemblyLoadContext.Default.Resolving += (context, name) => { var assemblyPath = $"./{name.Name}.dll"; return(context.LoadFromAssemblyPath(assemblyPath)); }; }
public static void Set(AppFlag flag, ref double option) { var value = Get(flag); if (value == null) { return; } if (!double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out option)) { MessageBox.Show($"Can’t parse option value: “{value}”"); } }
public static void Set(AppFlag flag, ref TimeSpan option) { var value = Get(flag); if (value == null) { return; } if (!TryParse(value, ref option)) { MessageBox.Show($"Can’t parse option value: “{value}”"); } }
public static void SetSize(AppFlag flag, ref long option) { var value = Get(flag); if (value == null) { return; } if (!ParseSize(value, out option)) { MessageBox.Show($"Can’t parse option value: “{value}”"); } }
public static void InitializeMemory(Bus bus, params string[] args) { if (bus.State.halt != 0) { return; } if (!args.Any()) { bus.State.Load("<chip>", 0xB00B5000); } else { var nameFile = Path.Combine(Path.GetDirectoryName(args.First()), Path.GetFileNameWithoutExtension(args.First())); var file = new FileInfo($"{nameFile}.dlx"); var bios = new FileInfo($"{nameFile}.bios"); var pdb = new FileInfo($"{nameFile}.pdb"); if (AppFlag.GetVariable("VM_ATTACH_DEBUGGER") && pdb.Exists) { bus.AttachDebugger(new Debugger(DebugSymbols.Open(File.ReadAllBytes(pdb.FullName)))); } if (bios.Exists) { var asm = AncientAssembly.LoadFrom(bios.FullName); var bytes = asm.GetILCode(); var meta = asm.GetMetaILCode(); bus.State.Load("<bios>", CastFromBytes(bytes)); bus.State.LoadMeta(meta); } if (file.Exists) { var asm = AncientAssembly.LoadFrom(file.FullName); var bytes = asm.GetILCode(); var meta = asm.GetMetaILCode(); bus.State.Load("<exec>", CastFromBytes(bytes)); bus.State.LoadMeta(meta); } else { bus.State.Load("<chip>", 0xB00B5000); } } }
public static async Task Main(string[] args) { if (AppFlag.GetVariable("MANAGED_DEBUGGER_WAIT")) { HandleDebugger(); } InitializeProcess(); var bus = new Bus(); InitializeFlags(bus); if (AppFlag.GetVariable("VM_TRACE")) { DeviceLoader.OnTrace += Console.WriteLine; } Module.Boot(bus); InternalVMFunctions.Boot(bus); DeviceLoader.Boot(bus.Add); if (AppFlag.GetVariable("REPL")) { Console.WriteLine("@ Ancient VM Interactive @".Pastel(Color.Green)); InteractiveConstruction(bus); } else { InitializeMemory(bus, args); } while (bus.State.halt == 0) { bus.cpu.Step(); } bus.Unload(); }
public static bool GetBool(AppFlag flag, bool defaultValue = false) { Set(flag, ref defaultValue); return(defaultValue); }
public static bool Has(AppFlag flag) { return(_args != null && _args.ContainsKey(flag)); }
public static string Get(AppFlag flag) { return(_args != null && _args.ContainsKey(flag) ? _args[flag] : FlagDefaultValueAttribute.GetValue(flag)); }
public static void Set(AppFlag flag, ref string option) { var value = Get(flag); if (value == null) return; option = value; }
public static double GetDouble(AppFlag flag, double defaultValue = 0d) { Set(flag, ref defaultValue); return defaultValue; }
public static void Set(AppFlag flag, ref int option) { var value = Get(flag); if (value == null) return; if (!int.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out option)) { option = 0; } }
public static bool Has(AppFlag flag) { return _args != null && _args.ContainsKey(flag); }
public static bool GetBool(AppFlag flag, bool defaultValue = false) { Set(flag, ref defaultValue); return defaultValue; }
public static double GetDouble(AppFlag flag, double defaultValue = 0d) { Set(flag, ref defaultValue); return(defaultValue); }
internal static string FlagToArgString(AppFlag flag) { return "-" + (_regex ?? (_regex = new Regex(@"[A-Z]", RegexOptions.Compiled))).Replace(flag.ToString(), x => "-" + x.Value.ToLower()); }
internal static string FlagToArgString(AppFlag flag) { return("-" + (_regex ?? (_regex = new Regex(@"[A-Z]", RegexOptions.Compiled))).Replace(flag.ToString(), x => "-" + x.Value.ToLower())); }
public static string Get(AppFlag flag) { return _args != null && _args.ContainsKey(flag) ? _args[flag] : null; }