Example #1
0
        public IProcessContext Create(KernelContext context, ulong pid, ulong addressSpaceSize, InvalidAccessHandler invalidAccessHandler, bool for64Bit)
        {
            MemoryManagerMode mode = context.Device.Configuration.MemoryManagerMode;

            if (!MemoryBlock.SupportsFlags(MemoryAllocationFlags.ViewCompatible))
            {
                mode = MemoryManagerMode.SoftwarePageTable;
            }

            switch (mode)
            {
            case MemoryManagerMode.SoftwarePageTable:
                var memoryManager = new MemoryManager(context.Memory, addressSpaceSize, invalidAccessHandler);
                return(new ArmProcessContext <MemoryManager>(pid, _cpuEngine, _gpu, memoryManager, for64Bit));

            case MemoryManagerMode.HostMapped:
            case MemoryManagerMode.HostMappedUnsafe:
                bool unsafeMode = mode == MemoryManagerMode.HostMappedUnsafe;
                var  memoryManagerHostMapped = new MemoryManagerHostMapped(context.Memory, addressSpaceSize, unsafeMode, invalidAccessHandler);
                return(new ArmProcessContext <MemoryManagerHostMapped>(pid, _cpuEngine, _gpu, memoryManagerHostMapped, for64Bit));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #2
0
 public HLEConfiguration(VirtualFileSystem virtualFileSystem,
                         LibHacHorizonManager libHacHorizonManager,
                         ContentManager contentManager,
                         AccountManager accountManager,
                         UserChannelPersistence userChannelPersistence,
                         IRenderer gpuRenderer,
                         IHardwareDeviceDriver audioDeviceDriver,
                         MemoryConfiguration memoryConfiguration,
                         IHostUiHandler hostUiHandler,
                         SystemLanguage systemLanguage,
                         RegionCode region,
                         bool enableVsync,
                         bool enableDockedMode,
                         bool enablePtc,
                         bool enableInternetAccess,
                         IntegrityCheckLevel fsIntegrityCheckLevel,
                         int fsGlobalAccessLogMode,
                         long systemTimeOffset,
                         string timeZone,
                         MemoryManagerMode memoryManagerMode,
                         bool ignoreMissingServices,
                         AspectRatio aspectRatio,
                         float audioVolume)
 {
     VirtualFileSystem      = virtualFileSystem;
     LibHacHorizonManager   = libHacHorizonManager;
     AccountManager         = accountManager;
     ContentManager         = contentManager;
     UserChannelPersistence = userChannelPersistence;
     GpuRenderer            = gpuRenderer;
     AudioDeviceDriver      = audioDeviceDriver;
     MemoryConfiguration    = memoryConfiguration;
     HostUiHandler          = hostUiHandler;
     SystemLanguage         = systemLanguage;
     Region                = region;
     EnableVsync           = enableVsync;
     EnableDockedMode      = enableDockedMode;
     EnablePtc             = enablePtc;
     EnableInternetAccess  = enableInternetAccess;
     FsIntegrityCheckLevel = fsIntegrityCheckLevel;
     FsGlobalAccessLogMode = fsGlobalAccessLogMode;
     SystemTimeOffset      = systemTimeOffset;
     TimeZone              = timeZone;
     MemoryManagerMode     = memoryManagerMode;
     IgnoreMissingServices = ignoreMissingServices;
     AspectRatio           = aspectRatio;
     AudioVolume           = audioVolume;
 }
Example #3
0
        public static void Initialize(string titleIdText, string displayVersion, bool enabled, MemoryManagerMode memoryMode)
        {
            Wait();

            PtcProfiler.Wait();
            PtcProfiler.ClearEntries();

            Logger.Info?.Print(LogClass.Ptc, $"Initializing Profiled Persistent Translation Cache (enabled: {enabled}).");

            if (!enabled || string.IsNullOrEmpty(titleIdText) || titleIdText == TitleIdTextDefault)
            {
                TitleIdText    = TitleIdTextDefault;
                DisplayVersion = DisplayVersionDefault;

                CachePathActual = string.Empty;
                CachePathBackup = string.Empty;

                Disable();

                return;
            }

            TitleIdText    = titleIdText;
            DisplayVersion = !string.IsNullOrEmpty(displayVersion) ? displayVersion : DisplayVersionDefault;
            _memoryMode    = memoryMode;

            string workPathActual = Path.Combine(AppDataManager.GamesDirPath, TitleIdText, "cache", "cpu", ActualDir);
            string workPathBackup = Path.Combine(AppDataManager.GamesDirPath, TitleIdText, "cache", "cpu", BackupDir);

            if (!Directory.Exists(workPathActual))
            {
                Directory.CreateDirectory(workPathActual);
            }

            if (!Directory.Exists(workPathBackup))
            {
                Directory.CreateDirectory(workPathBackup);
            }

            CachePathActual = Path.Combine(workPathActual, DisplayVersion);
            CachePathBackup = Path.Combine(workPathBackup, DisplayVersion);

            PreLoad();
            PtcProfiler.PreLoad();

            Enable();
        }
        public IProcessContext Create(KernelContext context, long pid, ulong addressSpaceSize, InvalidAccessHandler invalidAccessHandler, bool for64Bit)
        {
            MemoryManagerMode mode = context.Device.Configuration.MemoryManagerMode;

            switch (mode)
            {
            case MemoryManagerMode.SoftwarePageTable:
                return(new ArmProcessContext <MemoryManager>(pid, _gpu, new MemoryManager(addressSpaceSize, invalidAccessHandler), for64Bit));

            case MemoryManagerMode.HostMapped:
            case MemoryManagerMode.HostMappedUnsafe:
                bool unsafeMode = mode == MemoryManagerMode.HostMappedUnsafe;
                return(new ArmProcessContext <MemoryManagerHostMapped>(pid, _gpu, new MemoryManagerHostMapped(addressSpaceSize, unsafeMode, invalidAccessHandler), for64Bit));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        public IProcessContext Create(KernelContext context, ulong addressSpaceSize, InvalidAccessHandler invalidAccessHandler)
        {
            MemoryManagerMode mode = context.Device.Configuration.MemoryManagerMode;

            switch (mode)
            {
            case MemoryManagerMode.SoftwarePageTable:
                return(new ArmProcessContext <MemoryManager>(new MemoryManager(addressSpaceSize, invalidAccessHandler)));

            case MemoryManagerMode.HostMapped:
            case MemoryManagerMode.HostMappedUnsafe:
                ARMeilleure.Optimizations.UnsafeHostMappedMemory = mode == MemoryManagerMode.HostMappedUnsafe;
                return(new ArmProcessContext <MemoryManagerHostMapped>(new MemoryManagerHostMapped(addressSpaceSize, invalidAccessHandler)));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }