Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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
                       ));
        }
Exemple #4
0
        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);
        }