public override void Help() { CpuSettings cpuSettings = SettingsManager.GetSettings <CpuSettings>(); RunnerSettings settings = new RunnerSettings(); HlCompilerSettings hls = SettingsManager.GetSettings <HlCompilerSettings>(); MemorySettings ms = SettingsManager.GetSettings <MemorySettings>(); MemoryBusSettings mbs = SettingsManager.GetSettings <MemoryBusSettings>(); HelpSubSystem.WriteSubsystem("vis run", settings, hls, ms, mbs, cpuSettings); }
public static Cpu Create( IEnumerable <string> args, CpuSettings cpuSettings = null, RunnerSettings settings = null, HlCompilerSettings hls = null, MemorySettings ms = null, MemoryBusSettings mbs = null) { Logger.LogMessage(LoggerSystems.Console, "Creating CPU..."); cpuSettings = cpuSettings ?? SettingsManager.GetSettings <CpuSettings>(); settings = settings ?? new RunnerSettings(); hls = hls ?? SettingsManager.GetSettings <HlCompilerSettings>(); ms = ms ?? SettingsManager.GetSettings <MemorySettings>(); mbs = mbs ?? SettingsManager.GetSettings <MemoryBusSettings>(); ArgumentSyntaxParser.Parse( args.ToArray(), settings, hls, ms, mbs, cpuSettings ); SettingsManager.SaveSettings(hls); SettingsManager.SaveSettings(ms); SettingsManager.SaveSettings(mbs); SettingsManager.SaveSettings(cpuSettings); if (settings.InputFiles == null) { Logger.LogMessage(LoggerSystems.Console, "No Files Specified"); return(null); } MemoryBus bus = CreateBus(mbs); Cpu cpu = new Cpu(bus, cpuSettings.CpuResetAddr, cpuSettings.CpuIntAddr); return(cpu); }
private static MemoryBus CreateBus(MemoryBusSettings settings, params Peripheral[] additionalPeripherals) { List <Peripheral> ps = settings.MemoryDevices.Select( x => new Memory( SettingsManager. GetSettings <MemorySettings>( x ) ) ). Concat(additionalPeripherals). Concat(Peripheral.GetExtensionPeripherals()). ToList(); foreach (PeripheralImporter peripheralImporter in Peripheral.GetPeripheralImporters()) { ps.AddRange(peripheralImporter.GetPeripherals(ps)); } return(new MemoryBus( ps )); }
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); }