public static void Main() { using (var file = File.Open("Config.json", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read)) { /* Create an instance of the emulator machine */ Machine machine = new Machine(); /* Load configuration */ try { machine.ImportConfig(JsonConvert.DeserializeObject<ExpandoObject>(new StreamReader(file).ReadToEnd())); } catch { logger.Trace("Config.json was not valid, skipped configuration merge"); } finally { /* Clear the configuration file */ file.SetLength(0); file.Flush(); } /* WPF Start */ App app = new App(); app.InitializeComponent(); app.Run(); /* Save configuration */ var writer = new StreamWriter(file); writer.Write(JsonConvert.SerializeObject(machine.ExportConfig(), Formatting.Indented)); writer.Flush(); machine.Dispose(); } }
private void TestBootSequence(Cartridge cart) { Machine machine = new Machine(); machine.SystemBootMode = BootMode.HLE_IPL_OLD; machine.DeviceRCP.DevicePI.MountCartridge(cart); Debugger debugger = new Debugger(); debugger.BreakOnBootMode = DebuggerBootEvent.PostBoot; debugger.DebugOnBreak = true; var mockedCPUEngine = new Mock<ExecutionEngine>(); var mockedRCPEngine = new Mock<ExecutionEngine>(); machine.DeviceCPU.Engine = mockedCPUEngine.Object; machine.DeviceRCP.Engine = mockedRCPEngine.Object; machine.Initialize(); machine.Run(); ExecutionState state = machine.DeviceCPU.State; /* CP0 Testing */ Assert.Equal(0x0000001FUL, state.CP0Regs[CP0RegName.Random]); Assert.Equal(0x00005000UL, state.CP0Regs[CP0RegName.Count]); Assert.Equal(0x0000005CUL, state.CP0Regs[CP0RegName.Cause]); Assert.Equal(0x007FFFF0UL, state.CP0Regs[CP0RegName.Context]); Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.EPC]); Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.BadVAddr]); Assert.Equal(0xFFFFFFFFUL, state.CP0Regs[CP0RegName.ErrorEPC]); Assert.Equal(0x0006E463UL, state.CP0Regs[CP0RegName.Config]); Assert.Equal(0x34000000UL, state.CP0Regs[CP0RegName.SR]); /* PIF Testing */ AssertPIFCodes( Cartridge.Current.RomImage.Region, Cartridge.Current.RomImage.BootRomInformation.CIC, state); debugger.Continue(); machine.Stop(); machine.Dispose(); }