Example #1
0
        static protected string RunExecutableAndGetOutput(string PspAutoTestsFolder, string FileName)
        {
            var OutputString = "";

            GC.Collect();

            var PspEmulatorContext = new PspEmulatorContext(PspConfig);

            ConsoleUtils.CaptureOutput(() =>
            {
                PspEmulatorContext.SetInstanceType <PspMemory, NormalPspMemory>();
                PspEmulatorContext.SetInstanceType <GpuImpl, GpuImplMock>();
                PspEmulatorContext.SetInstanceType <PspAudioImpl, AudioImplMock>();
                PspEmulatorContext.SetInstanceType <HleOutputHandler, HleOutputHandlerMock>();

                var Start = DateTime.Now;
                PspEmulatorContext.GetInstance <HleModuleManager>();
                var End = DateTime.Now;
                Console.WriteLine(End - Start);

                var GpuImpl = PspEmulatorContext.GetInstance <GpuImpl>();
                GpuImpl.InitSynchronizedOnce();

                var PspRunner = PspEmulatorContext.GetInstance <PspRunner>();
                PspRunner.StartSynchronized();
                {
                    try
                    {
                        //PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/test.cso");
                        PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/cube.cso");
                        PspRunner.CpuComponentThread._LoadFile(FileName);
                        if (!PspRunner.CpuComponentThread.StoppedEndedEvent.WaitOne(TimeSpan.FromSeconds(5)))
                        {
                            Console.Error.WriteLine("Timeout!");
                        }
                    }
                    catch (Exception Exception)
                    {
                        Console.Error.WriteLine(Exception);
                    }
                }

                PspRunner.StopSynchronized();
            },
                                       //Capture: false
                                       Capture: true
                                       );

            var HleOutputHandlerMock = (HleOutputHandlerMock)PspEmulatorContext.GetInstance <HleOutputHandler>();

            OutputString = HleOutputHandlerMock.OutputString;

            return(OutputString);
        }
Example #2
0
		public void SetUp()
		{
			PspConfig = new PspConfig();
			PspConfig.HleModulesDll = Assembly.GetExecutingAssembly();
			PspEmulatorContext = new PspEmulatorContext(PspConfig);
			PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
			PspEmulatorContext.SetInstanceType<GpuImpl, GpuImplNull>();
			PspEmulatorContext.SetInstanceType<PspAudioImpl, AudioImplNull>();
			Memory = PspEmulatorContext.GetInstance<PspMemory>();
			ThreadManager = PspEmulatorContext.GetInstance<HleThreadManager>();

			Processor = PspEmulatorContext.GetInstance<CpuProcessor>();
			MipsAssembler = new MipsAssembler(new PspMemoryStream(Memory));
		}
Example #3
0
 public static void ClassInit(TestContext context)
 {
     PspConfig = new PspConfig();
     PspEmulatorContext = new PspEmulatorContext(PspConfig);
     PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
     Memory = PspEmulatorContext.GetInstance<PspMemory>();
 }
Example #4
0
        public void ElfLoaderConstructorTest()
        {
            var PspConfig          = new PspConfig();
            var PspEmulatorContext = new PspEmulatorContext(PspConfig);

            PspEmulatorContext.SetInstanceType <PspMemory, LazyPspMemory>();
            var Memory          = PspEmulatorContext.GetInstance <PspMemory>();
            var MemoryStream    = new PspMemoryStream(Memory);
            var MemoryPartition = new MemoryPartition(PspMemory.MainOffset, PspMemory.MainOffset + PspMemory.MainSize);

            var ElfLoader = new ElfLoader();

            ElfLoader.Load(File.OpenRead("../../../TestInput/minifire.elf"));
            ElfLoader.AllocateAndWrite(MemoryStream, MemoryPartition);
            Assert.AreEqual(1, ElfLoader.ProgramHeaders.Length);
            Assert.AreEqual(3, ElfLoader.SectionHeaders.Length);

            Assert.AreEqual(
                "['','.rodata.sceModuleInfo']".Replace('\'', '"'),
                ElfLoader.SectionHeadersByName.Keys.ToJson()
                );

            //ElfLoader.LoadAllocateMemory(MemoryPartition);
            //ElfLoader.LoadWriteToMemory(MemoryStream);

            //var ModuleInfo = ElfLoader.ModuleInfo;

            var PC = ElfLoader.Header.EntryPoint;

            //var GP = ModuleInfo.GP;

            Assert.AreEqual(0x08900008, (int)PC);
            //Assert.AreEqual(0x00004821, (int)GP);
        }
        public void TestMethod1()
        {
            var Config = new PspConfig();
            var PspEmulatorContext = new PspEmulatorContext(Config);
            PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();

            var PspMemory = PspEmulatorContext.GetInstance<PspMemory>();
            var PspMemoryStream = new PspMemoryStream(PspMemory);
            var MipsAssembler = new MipsAssembler(PspMemoryStream);
            var DynarecFunctionCompilerTask = PspEmulatorContext.GetInstance<DynarecFunctionCompilerTask>();
            var CpuProcessor = PspEmulatorContext.GetInstance<CpuProcessor>();
            var CpuThreadState = new CpuThreadState(CpuProcessor);

            MipsAssembler.Assemble(@"
                .code 0x08000000
                addi r1, r1, 1
                jr r31
                nop
            ");

            var DynarecFunction = DynarecFunctionCompilerTask.GetFunctionForAddress(PspMemory.MainSegment.Low);

            Assert.AreEqual(0, CpuThreadState.GPR[1]);
            DynarecFunction.Delegate(CpuThreadState);
            Assert.AreEqual(1, CpuThreadState.GPR[1]);
        }
Example #6
0
        public void ElfLoaderConstructorTest()
        {
            var PspConfig = new PspConfig();
            var PspEmulatorContext = new PspEmulatorContext(PspConfig);
            PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
            var Memory = PspEmulatorContext.GetInstance<PspMemory>();
            var MemoryStream = new PspMemoryStream(Memory);
            var MemoryPartition = new MemoryPartition(PspMemory.MainOffset, PspMemory.MainOffset + PspMemory.MainSize);

            var ElfLoader = new ElfLoader();

            ElfLoader.Load(File.OpenRead("../../../TestInput/minifire.elf"));
            ElfLoader.AllocateAndWrite(MemoryStream, MemoryPartition);
            Assert.AreEqual(1, ElfLoader.ProgramHeaders.Length);
            Assert.AreEqual(3, ElfLoader.SectionHeaders.Length);

            Assert.AreEqual(
                "['','.rodata.sceModuleInfo']".Replace('\'', '"'),
                ElfLoader.SectionHeadersByName.Keys.ToJson()
            );

            //ElfLoader.LoadAllocateMemory(MemoryPartition);
            //ElfLoader.LoadWriteToMemory(MemoryStream);

            //var ModuleInfo = ElfLoader.ModuleInfo;

            var PC = ElfLoader.Header.EntryPoint;
            //var GP = ModuleInfo.GP;

            Assert.AreEqual(0x08900008, (int)PC);
            //Assert.AreEqual(0x00004821, (int)GP);
        }
Example #7
0
 public static void ClassInit(TestContext context)
 {
     PspConfig          = new PspConfig();
     PspEmulatorContext = new PspEmulatorContext(PspConfig);
     PspEmulatorContext.SetInstanceType <PspMemory, LazyPspMemory>();
     Memory = PspEmulatorContext.GetInstance <PspMemory>();
 }
		public void SetUp()
		{
			PspConfig = new PspConfig();
			PspEmulatorContext = new PspEmulatorContext(PspConfig);
			PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();

			Processor = PspEmulatorContext.GetInstance<CpuProcessor>();
			MipsAssembler = new MipsAssembler(new PspMemoryStream(PspEmulatorContext.GetInstance<PspMemory>()));
		}
        public void SetUp()
        {
            PspConfig          = new PspConfig();
            PspEmulatorContext = new PspEmulatorContext(PspConfig);
            PspEmulatorContext.SetInstanceType <PspMemory, LazyPspMemory>();

            Processor     = PspEmulatorContext.GetInstance <CpuProcessor>();
            MipsAssembler = new MipsAssembler(new PspMemoryStream(PspEmulatorContext.GetInstance <PspMemory>()));
        }
Example #10
0
        public void SetUp()
        {
            var PspEmulatorContext = new PspEmulatorContext(new PspConfig());

            PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
            SetMocks(PspEmulatorContext);

            PspEmulatorContext.InjectDependencesTo(this);
            Initialize();
        }
Example #11
0
 public void CreateDelegateTest()
 {
     var PspConfig = new PspConfig();
     var PspEmulatorContext = new PspEmulatorContext(PspConfig);
     PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();
     var Memory = PspEmulatorContext.GetInstance<PspMemory>();
     var Processor = PspEmulatorContext.GetInstance<CpuProcessor>();
     var CpuThreadState = new CpuThreadState(Processor);
     var MipsEmiter = new MipsMethodEmiter(new MipsEmiter(), Processor, 0);
     CpuThreadState.GPR[1] = 1;
     CpuThreadState.GPR[2] = 2;
     CpuThreadState.GPR[3] = 3;
     MipsEmiter.OP_3REG_Unsigned(1, 2, 2, () => { MipsEmiter.SafeILGenerator.BinaryOperation(SafeBinaryOperator.AdditionSigned); });
     MipsEmiter.OP_3REG_Unsigned(0, 2, 2, () => { MipsEmiter.SafeILGenerator.BinaryOperation(SafeBinaryOperator.AdditionSigned); });
     MipsEmiter.OP_2REG_IMM_Signed(10, 0, 1000, () => { MipsEmiter.SafeILGenerator.BinaryOperation(SafeBinaryOperator.AdditionSigned); });
     MipsEmiter.CreateDelegate()(CpuThreadState);
     Assert.AreEqual(4, CpuThreadState.GPR[1]);
     Assert.AreEqual(0, CpuThreadState.GPR[0]);
     Assert.AreEqual(1000, CpuThreadState.GPR[10]);
 }
Example #12
0
        public void CreateDelegateTest()
        {
            var PspConfig          = new PspConfig();
            var PspEmulatorContext = new PspEmulatorContext(PspConfig);

            PspEmulatorContext.SetInstanceType <PspMemory, LazyPspMemory>();
            var Memory         = PspEmulatorContext.GetInstance <PspMemory>();
            var Processor      = PspEmulatorContext.GetInstance <CpuProcessor>();
            var CpuThreadState = new CpuThreadState(Processor);
            var MipsEmiter     = new MipsMethodEmiter(new MipsEmiter(), Processor);

            CpuThreadState.GPR[1] = 1;
            CpuThreadState.GPR[2] = 2;
            CpuThreadState.GPR[3] = 3;
            MipsEmiter.OP_3REG_Unsigned(1, 2, 2, OpCodes.Add);
            MipsEmiter.OP_3REG_Unsigned(0, 2, 2, OpCodes.Add);
            MipsEmiter.OP_2REG_IMM_Signed(10, 0, 1000, OpCodes.Add);
            MipsEmiter.CreateDelegate()(CpuThreadState);
            Assert.AreEqual(4, CpuThreadState.GPR[1]);
            Assert.AreEqual(0, CpuThreadState.GPR[0]);
            Assert.AreEqual(1000, CpuThreadState.GPR[10]);
        }
		public void TestMethod1()
		{
			var Config = new PspConfig();
			var PspEmulatorContext = new PspEmulatorContext(Config);
			PspEmulatorContext.SetInstanceType<PspMemory, LazyPspMemory>();

			var DynarecFunctionCompiler = PspEmulatorContext.GetInstance<DynarecFunctionCompiler>();
			var CpuProcessor = PspEmulatorContext.GetInstance<CpuProcessor>();
			var CpuThreadState = new CpuThreadState(CpuProcessor);
			
			var DynarecFunction = DynarecFunctionCompiler.CreateFunction(
				new InstructionArrayReader(MipsAssembler.StaticAssembleInstructions(@"
					addi r1, r1, 1
					jr r31
					nop
				")),
				 0
			);

			Assert.AreEqual(0, CpuThreadState.GPR[1]);
			DynarecFunction.Delegate(CpuThreadState);
			Assert.AreEqual(1, CpuThreadState.GPR[1]);
		}
Example #14
0
        void CreateNewContextAndRemoveOldOne()
        {
            ContextInitializedFlag = false;
            ContextInitialized.Reset();
            {
                // Stops the current context if it has one already.
                if (PspRunner != null)
                {
                    PspRunner.StopSynchronized();

                    PspEmulatorContext.GetInstance <PspMemory>().Dispose();
                    PspEmulatorContext.GetInstance <GpuImpl>().StopSynchronized();
                    PspEmulatorContext.GetInstance <PspAudioImpl>().StopSynchronized();

                    PspRunner          = null;
                    PspEmulatorContext = null;
                    GC.Collect();
                }

                foreach (var FileName in new [] {
                    Path.GetDirectoryName(typeof(Program).Assembly.Location) + @"\CSPspEmu.Hle.Modules.dll",
                    Application.ExecutablePath,
                })
                {
                    if (File.Exists(FileName))
                    {
                        PspConfig.HleModulesDll = Assembly.LoadFile(FileName);
                        break;
                    }
                }
                //

                PspEmulatorContext = new PspEmulatorContext(PspConfig);

                {
                    PspEmulatorContext.SetInstanceType <GpuImpl, OpenglGpuImpl>();
                    PspEmulatorContext.SetInstanceType <PspAudioImpl, PspAudioOpenalImpl>();

#if RELEASE
                    PspEmulatorContext.SetInstanceType <PspMemory, FastPspMemory>();
#else
                    PspEmulatorContext.SetInstanceType <PspMemory, NormalPspMemory>();
#endif

                    /*
                     * if (PspConfig.UseFastAndUnsaferMemory)
                     * {
                     *      PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();
                     * }
                     * else
                     * {
                     *      PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
                     * }
                     */
                }

                PspRunner = PspEmulatorContext.GetInstance <PspRunner>();
                PspRunner.StartSynchronized();

                var GpuImpl = PspEmulatorContext.GetInstance <GpuImpl>();
                GpuImpl.InitSynchronizedOnce();
            }
            ContextInitializedFlag = true;
            ContextInitialized.Set();
        }
Example #15
0
		protected static string RunExecutableAndGetOutput(string PspAutoTestsFolder, string FileName, out string CapturedOutput, string FileNameBase)
		{
			var OutputString = "";

			IHleIoDriver HostDriver = null;

			using (var PspEmulatorContext = new PspEmulatorContext(PspConfig))
			{
				CapturedOutput = ConsoleUtils.CaptureOutput(() =>
				{
					//Console.Error.WriteLine("[0]");
					//PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
					PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();

					//PspEmulatorContext.SetInstanceType<GpuImpl, GpuImplMock>();
					PspEmulatorContext.SetInstanceType<GpuImpl, OpenglGpuImpl>();

					PspEmulatorContext.SetInstanceType<PspAudioImpl, AudioImplNull>();
					PspEmulatorContext.SetInstanceType<HleOutputHandler, HleOutputHandlerMock>();
					//Console.Error.WriteLine("[1]");

					PspConfig.FileNameBase = FileNameBase;

					var Start = DateTime.UtcNow;
					PspEmulatorContext.GetInstance<HleModuleManager>();
					var End = DateTime.UtcNow;
					Console.WriteLine(End - Start);

					//Console.Error.WriteLine("[a]");

					// GPU -> NULL
					//PspEmulatorContext.SetInstanceType<GpuImpl>(typeof(GpuImplOpenglEs));
					PspEmulatorContext.SetInstanceType<GpuImpl>(typeof(GpuImplNull));

					var GpuImpl = PspEmulatorContext.GetInstance<GpuImpl>();
					//GpuImpl.InitSynchronizedOnce();

					//Console.Error.WriteLine("[b]");

					var PspRunner = PspEmulatorContext.GetInstance<PspRunner>();
					PspRunner.StartSynchronized();

					//Console.Error.WriteLine("[c]");

					{
						try
						{
							//PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/test.cso");
							PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/cube.cso");
							//Console.Error.WriteLine("[2]");

							var HleIoManager = PspEmulatorContext.GetInstance<HleIoManager>();
							HostDriver = HleIoManager.GetDriver("host:");

							try { HostDriver.IoRemove(null, "/__testoutput.txt"); } catch { }
							try { HostDriver.IoRemove(null, "/__testerror.txt"); } catch { }

							PspRunner.CpuComponentThread._LoadFile(FileName);
							//Console.Error.WriteLine("[3]");
							if (!PspRunner.CpuComponentThread.StoppedEndedEvent.WaitOne(TimeSpan.FromSeconds(10)))
							{
								Console.Error.WriteLine("Timeout!");
							}
						}
						catch (Exception Exception)
						{
							Console.Error.WriteLine(Exception);
						}
					}

					PspRunner.StopSynchronized();
					GC.Collect();

					using (var test_output = HostDriver.OpenRead("/__testoutput.txt"))
					{
						OutputString = test_output.ReadAllContentsAsString();
					}
				},
					//Capture: false
				Capture: true
				);

				//var HleOutputHandlerMock = (HleOutputHandlerMock)PspEmulatorContext.GetInstance<HleOutputHandler>();
				//OutputString = HleOutputHandlerMock.OutputString;
			}

			return OutputString;
		}
Example #16
0
        void CreateNewContextAndRemoveOldOne()
        {
            ContextInitializedFlag = false;
            ContextInitialized.Reset();
            {
                // Stops the current context if it has one already.
                if (PspRunner != null)
                {
                    PspRunner.StopSynchronized();

                    PspEmulatorContext.GetInstance<PspMemory>().Dispose();
                    PspEmulatorContext.GetInstance<GpuImpl>().StopSynchronized();
                    PspEmulatorContext.GetInstance<PspAudioImpl>().StopSynchronized();

                    PspRunner = null;
                    PspEmulatorContext = null;
                    GC.Collect();
                }

                PspConfig.HleModulesDll = typeof(HleModulesRoot).Assembly;

                /*
                foreach (var FileName in new [] {
                    Path.GetDirectoryName(typeof(Program).Assembly.Location) + @"\CSPspEmu.Hle.Modules.dll",
                    Application.ExecutablePath,
                })
                {
                    if (File.Exists(FileName))
                    {
                        PspConfig.HleModulesDll = Assembly.LoadFile(FileName);
                        break;
                    }
                }
                */
                //

                PspEmulatorContext = new PspEmulatorContext(PspConfig);

                {
                    // GPU
                    PspPluginImpl.SelectWorkingPlugin<GpuImpl>(PspEmulatorContext,
                        typeof(OpenglGpuImpl),
                        typeof(GpuImplSoft),
                        typeof(GpuImplNull)
                    );

                    // AUDIO
                    PspPluginImpl.SelectWorkingPlugin<PspAudioImpl>(PspEmulatorContext,
                        typeof(PspAudioOpenalImpl),
                        typeof(PspAudioWaveOutImpl),
                        typeof(AudioAlsaImpl),
                        typeof(AudioImplNull)
                    );

                    // Memory
                    if (PspConfig.StoredConfig.UseFastMemory)
                    {
                        PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();
                    }
                    else
                    {
                        PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
                    }
                }

                PspEmulatorContext.GetInstance<PspDisplay>().VBlankEventCall += new Action(PspEmulator_VBlankEventCall);

                PspRunner = PspEmulatorContext.GetInstance<PspRunner>();
                PspRunner.StartSynchronized();

                var GpuImpl = PspEmulatorContext.GetInstance<GpuImpl>();
                GpuImpl.InitSynchronizedOnce();
            }
            ContextInitializedFlag = true;
            ContextInitialized.Set();
        }
Example #17
0
		protected override void SetMocks(PspEmulatorContext PspEmulatorContext)
		{
			PspEmulatorContext.SetInstanceType<PspRtc, PspRtcMock>();
			(PspEmulatorContext.GetInstance<PspRtc>() as PspRtcMock).sceRtcTest = this;
		}
Example #18
0
        protected static string RunExecutableAndGetOutput(string PspAutoTestsFolder, string FileName)
        {
            var OutputString = "";

            GC.Collect();

            var PspEmulatorContext = new PspEmulatorContext(PspConfig);

            ConsoleUtils.CaptureOutput(() =>
            {
                PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
                PspEmulatorContext.SetInstanceType<GpuImpl, GpuImplMock>();
                PspEmulatorContext.SetInstanceType<PspAudioImpl, AudioImplMock>();
                PspEmulatorContext.SetInstanceType<HleOutputHandler, HleOutputHandlerMock>();

                var Start = DateTime.Now;
                PspEmulatorContext.GetInstance<HleModuleManager>();
                var End = DateTime.Now;
                Console.WriteLine(End - Start);

                var GpuImpl = PspEmulatorContext.GetInstance<GpuImpl>();
                GpuImpl.InitSynchronizedOnce();

                var PspRunner = PspEmulatorContext.GetInstance<PspRunner>();
                PspRunner.StartSynchronized();
                {
                    try
                    {
                        //PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/test.cso");
                        PspRunner.CpuComponentThread.SetIso(PspAutoTestsFolder + "/../input/cube.cso");
                        PspRunner.CpuComponentThread._LoadFile(FileName);
                        if (!PspRunner.CpuComponentThread.StoppedEndedEvent.WaitOne(TimeSpan.FromSeconds(5)))
                        {
                            Console.Error.WriteLine("Timeout!");
                        }
                    }
                    catch (Exception Exception)
                    {
                        Console.Error.WriteLine(Exception);
                    }
                }

                PspRunner.StopSynchronized();
            },
            //Capture: false
            Capture: true
            );

            var HleOutputHandlerMock = (HleOutputHandlerMock)PspEmulatorContext.GetInstance<HleOutputHandler>();
            OutputString = HleOutputHandlerMock.OutputString;

            return OutputString;
        }
Example #19
0
 protected override void SetMocks(PspEmulatorContext PspEmulatorContext)
 {
     PspEmulatorContext.SetInstanceType<PspRtc, PspRtcMock>();
 }
Example #20
0
        void CreateNewContextAndRemoveOldOne()
        {
            ContextInitializedFlag = false;
            ContextInitialized.Reset();
            {
                // Stops the current context if it has one already.
                if (PspRunner != null)
                {
                    PspRunner.StopSynchronized();

                    PspEmulatorContext.GetInstance<PspMemory>().Dispose();
                    PspEmulatorContext.GetInstance<GpuImpl>().StopSynchronized();
                    PspEmulatorContext.GetInstance<PspAudioImpl>().StopSynchronized();

                    PspRunner = null;
                    PspEmulatorContext = null;
                    GC.Collect();
                }

                foreach (var FileName in new [] {
                    Path.GetDirectoryName(typeof(Program).Assembly.Location) + @"\CSPspEmu.Hle.Modules.dll",
                    Application.ExecutablePath,
                })
                {
                    if (File.Exists(FileName))
                    {
                        PspConfig.HleModulesDll = Assembly.LoadFile(FileName);
                        break;
                    }
                }
                //

                PspEmulatorContext = new PspEmulatorContext(PspConfig);

                {
                    PspEmulatorContext.SetInstanceType<GpuImpl, OpenglGpuImpl>();
                    PspEmulatorContext.SetInstanceType<PspAudioImpl, PspAudioOpenalImpl>();

            #if RELEASE
                    PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();
            #else
                    PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
            #endif
                    /*
                    if (PspConfig.UseFastAndUnsaferMemory)
                    {
                        PspEmulatorContext.SetInstanceType<PspMemory, FastPspMemory>();
                    }
                    else
                    {
                        PspEmulatorContext.SetInstanceType<PspMemory, NormalPspMemory>();
                    }
                    */
                }

                PspRunner = PspEmulatorContext.GetInstance<PspRunner>();
                PspRunner.StartSynchronized();

                var GpuImpl = PspEmulatorContext.GetInstance<GpuImpl>();
                GpuImpl.InitSynchronizedOnce();
            }
            ContextInitializedFlag = true;
            ContextInitialized.Set();
        }