예제 #1
0
        public virtual void initNewPsp(bool fromSyscall)
        {
            moduleLoaded = false;

            HLEModuleManager.Instance.stopModules();
            NIDMapper.Instance.unloadAll();
            RuntimeContext.reset();

            if (!fromSyscall)
            {
                // Do not reset the profiler if we have been called from sceKernelLoadExec
                Profiler.reset();
                GEProfiler.reset();
                // Do not reset the clock if we have been called from sceKernelLoadExec
                Clock.reset();
            }

            Processor.reset();
            Scheduler.reset();

            Memory mem = Memory.Instance;

            if (!fromSyscall)
            {
                // Clear all memory, including VRAM.
                mem.Initialise();
            }
            else
            {
                // Clear all memory excepted VRAM.
                // E.g. screen is not cleared when executing syscall sceKernelLoadExec().
                mem.memset(MemoryMap.START_SCRATCHPAD, (sbyte)0, MemoryMap.SIZE_SCRATCHPAD);
                mem.memset(MemoryMap.START_RAM, (sbyte)0, MemoryMap.SIZE_RAM);
            }

            Battery.initialize();
            Wlan.initialize();
            SceModule.ResetAllocator();
            SceUidManager.reset();
            HLEUidObjectMapping.reset();
            ProOnlineNetworkAdapter.init();

            if (State.fileLogger != null)
            {
                State.fileLogger.resetLogging();
            }
            MemorySections.Instance.reset();

            HLEModuleManager.Instance.init();
            Managers.reset();
            Modules.SysMemUserForUserModule.start();
            Modules.SysMemUserForUserModule.FirmwareVersion = firmwareVersion;
            Modules.ThreadManForUserModule.start();
        }