public static void Run(Dictionary <string, string> args) { CpuSettings cpuSettings = SettingsManager.GetSettings <CpuSettings>(); RunnerSettings settings = new RunnerSettings(); HlCompilerSettings hls = SettingsManager.GetSettings <HlCompilerSettings>(); MemorySettings ms = SettingsManager.GetSettings <MemorySettings>(); MemoryBusSettings mbs = SettingsManager.GetSettings <MemoryBusSettings>(); ArgumentSyntaxParser.Parse( args, settings, hls, ms, mbs, cpuSettings ); SettingsManager.SaveSettings(hls); SettingsManager.SaveSettings(ms); SettingsManager.SaveSettings(mbs); SettingsManager.SaveSettings(cpuSettings); if (settings.InputFiles == null) { return; } string origPath = Directory.GetCurrentDirectory(); Directory.SetCurrentDirectory(settings.WorkingDir); foreach (string f in settings.InputFiles) { string file = Path.GetFullPath(f); file = RunPreRunSteps(settings, file); if (file == null || !File.Exists(file)) { EventManager <ErrorEvent> .SendEvent(new FileNotFoundEvent( file, true )); continue; } Logger.LogMessage(LoggerSystems.Console, "Run File: '{0}'", file); uint[] fileCode = File.ReadAllBytes(file).ToUInt(); if (settings.TrimMemoryToProgram) { ms.Size = ( uint )fileCode.Length; SettingsManager.SaveSettings(ms); } MemoryBus bus = CreateBus(mbs); Cpu cpu = new Cpu(bus, cpuSettings.CpuResetAddr, cpuSettings.CpuIntAddr); if (settings.LoadDebugSymbols) { cpu.SymbolServer.LoadSymbols(file); if (settings.AdditionalSymbols != null) { foreach (string symPath in settings.AdditionalSymbols) { cpu.SymbolServer.LoadSymbols(symPath); } } cpu.SetInterruptHandler(InterruptHandler); } cpu.LoadBinary(fileCode); cpu.Run(); } Directory.SetCurrentDirectory(origPath); }