Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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;
            }
        }
Exemplo n.º 3
0
        public void SendFlag(bool value)
        {
            AppFlag appFlag = Pool.Get <AppFlag>();

            appFlag.value = value;
            AppResponse appResponse = Pool.Get <AppResponse>();

            appResponse.flag = appFlag;
            Send(appResponse);
        }
Exemplo n.º 4
0
        public static void Set(AppFlag flag, ref string option)
        {
            var value = Get(flag);

            if (value == null)
            {
                return;
            }
            option = value;
        }
Exemplo n.º 5
0
 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");
 }
Exemplo n.º 6
0
        static DeviceLoader()
        {
            if (AppFlag.GetVariable("VM_TRACE"))
            {
                OnTrace += Console.WriteLine;
            }

            AssemblyLoadContext.Default.Resolving += (context, name) =>
            {
                var assemblyPath = $"./{name.Name}.dll";
                return(context.LoadFromAssemblyPath(assemblyPath));
            };
        }
Exemplo n.º 7
0
        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}”");
            }
        }
Exemplo n.º 8
0
        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}”");
            }
        }
Exemplo n.º 9
0
        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}”");
            }
        }
Exemplo n.º 10
0
        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);
                }
            }
        }
Exemplo n.º 11
0
        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;
            }
        }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
0
 public static bool GetBool(AppFlag flag, bool defaultValue = false)
 {
     Set(flag, ref defaultValue);
     return(defaultValue);
 }
Exemplo n.º 14
0
 public static bool Has(AppFlag flag)
 {
     return(_args != null && _args.ContainsKey(flag));
 }
Exemplo n.º 15
0
 public static string Get(AppFlag flag)
 {
     return(_args != null && _args.ContainsKey(flag) ? _args[flag] : FlagDefaultValueAttribute.GetValue(flag));
 }
Exemplo n.º 16
0
 public static void Set(AppFlag flag, ref string option) {
     var value = Get(flag);
     if (value == null) return;
     option = value;
 }
Exemplo n.º 17
0
 public static double GetDouble(AppFlag flag, double defaultValue = 0d) {
     Set(flag, ref defaultValue);
     return defaultValue;
 }
Exemplo n.º 18
0
 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;
     }
 }
Exemplo n.º 19
0
 public static bool Has(AppFlag flag) {
     return _args != null && _args.ContainsKey(flag);
 }
Exemplo n.º 20
0
 public static bool GetBool(AppFlag flag, bool defaultValue = false) {
     Set(flag, ref defaultValue);
     return defaultValue;
 }
Exemplo n.º 21
0
 public static double GetDouble(AppFlag flag, double defaultValue = 0d)
 {
     Set(flag, ref defaultValue);
     return(defaultValue);
 }
Exemplo n.º 22
0
 internal static string FlagToArgString(AppFlag flag) {
     return "-" + (_regex ?? (_regex = new Regex(@"[A-Z]", RegexOptions.Compiled))).Replace(flag.ToString(), x => "-" + x.Value.ToLower());
 }
Exemplo n.º 23
0
 internal static string FlagToArgString(AppFlag flag)
 {
     return("-" + (_regex ?? (_regex = new Regex(@"[A-Z]", RegexOptions.Compiled))).Replace(flag.ToString(), x => "-" + x.Value.ToLower()));
 }
Exemplo n.º 24
0
 public static string Get(AppFlag flag) {
     return _args != null && _args.ContainsKey(flag) ? _args[flag] : null;
 }