diff options
Diffstat (limited to 'Ryujinx.HLE/HOS')
| -rw-r--r-- | Ryujinx.HLE/HOS/Horizon.cs | 53 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs | 4 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs | 6 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs | 2 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs | 2 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs | 2 |
6 files changed, 50 insertions, 19 deletions
diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index 5873223e..334cba12 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -94,7 +94,7 @@ namespace Ryujinx.HLE.HOS internal KEvent VsyncEvent { get; private set; } - internal Keyset KeySet { get; private set; } + public Keyset KeySet { get; private set; } private bool _hasStarted; @@ -453,9 +453,7 @@ namespace Ryujinx.HLE.HOS Nacp controlData = new Nacp(controlFile.AsStream()); TitleName = CurrentTitle = controlData.Descriptions[(int)State.DesiredTitleLanguage].Title; - TitleID = metaData.Aci0.TitleId.ToString("x16"); - - CurrentTitle = controlData.Descriptions[(int)State.DesiredTitleLanguage].Title; + TitleID = metaData.Aci0.TitleId.ToString("x16"); if (string.IsNullOrWhiteSpace(CurrentTitle)) { @@ -551,18 +549,51 @@ namespace Ryujinx.HLE.HOS if (asetVersion == 0) { ulong iconOffset = reader.ReadUInt64(); - ulong iconSize = reader.ReadUInt64(); + ulong iconSize = reader.ReadUInt64(); ulong nacpOffset = reader.ReadUInt64(); - ulong nacpSize = reader.ReadUInt64(); + ulong nacpSize = reader.ReadUInt64(); ulong romfsOffset = reader.ReadUInt64(); - ulong romfsSize = reader.ReadUInt64(); + ulong romfsSize = reader.ReadUInt64(); if (romfsSize != 0) { Device.FileSystem.SetRomFs(new HomebrewRomFsStream(input, obj.FileSize + (long)romfsOffset)); } + + if (nacpSize != 0) + { + input.Seek(obj.FileSize + (long)nacpOffset, SeekOrigin.Begin); + using (MemoryStream stream = new MemoryStream(reader.ReadBytes((int)nacpSize))) + { + ControlData = new Nacp(stream); + } + + metaData.TitleName = ControlData.Descriptions[(int)State.DesiredTitleLanguage].Title; + + if (string.IsNullOrWhiteSpace(metaData.TitleName)) + { + metaData.TitleName = ControlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Title)).Title; + } + + metaData.Aci0.TitleId = ControlData.PresenceGroupId; + + if (metaData.Aci0.TitleId == 0) + { + metaData.Aci0.TitleId = ControlData.SaveDataOwnerId; + } + + if (metaData.Aci0.TitleId == 0) + { + metaData.Aci0.TitleId = ControlData.AddOnContentBaseId - 0x1000; + } + + if (metaData.Aci0.TitleId.ToString("x16") == "fffffffffffff000") + { + metaData.Aci0.TitleId = 0000000000000000; + } + } } else { @@ -578,8 +609,8 @@ namespace Ryujinx.HLE.HOS ContentManager.LoadEntries(); - TitleID = CurrentTitle = metaData.Aci0.TitleId.ToString("x16"); - TitleName = metaData.TitleName; + TitleName = CurrentTitle = metaData.TitleName; + TitleID = metaData.Aci0.TitleId.ToString("x16"); ProgramLoader.LoadStaticObjects(this, metaData, new IExecutable[] { staticObject }); } @@ -687,7 +718,9 @@ namespace Ryujinx.HLE.HOS // It's only safe to release resources once all threads // have exited. ThreadCounter.Signal(); - ThreadCounter.Wait(); + //ThreadCounter.Wait(); // FIXME: Uncomment this + // BODY: Right now, guest processes don't exit properly because the logic waits for them to exit. + // BODY: However, this doesn't happen when you close the main window so we need to find a way to make them exit gracefully Scheduler.Dispose(); diff --git a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs index beb376f6..c6283afd 100644 --- a/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs +++ b/Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs @@ -60,8 +60,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process public KProcessCapabilities Capabilities { get; private set; } - public long TitleId { get; private set; } - public long Pid { get; private set; } + public ulong TitleId { get; private set; } + public long Pid { get; private set; } private long _creationTimestamp; private ulong _entrypoint; diff --git a/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs b/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs index ba9f54bf..7431d7dd 100644 --- a/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs +++ b/Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs @@ -4,8 +4,8 @@ namespace Ryujinx.HLE.HOS.Kernel.Process { public string Name { get; private set; } - public int Category { get; private set; } - public long TitleId { get; private set; } + public int Category { get; private set; } + public ulong TitleId { get; private set; } public ulong CodeAddress { get; private set; } public int CodePagesCount { get; private set; } @@ -17,7 +17,7 @@ namespace Ryujinx.HLE.HOS.Kernel.Process public ProcessCreationInfo( string name, int category, - long titleId, + ulong titleId, ulong codeAddress, int codePagesCount, int mmuFlags, diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs index 094e1935..6525628f 100644 --- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs +++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs @@ -285,7 +285,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall break; - case 18: value = process.TitleId; break; + case 18: value = (long)process.TitleId; break; case 20: value = (long)process.UserExceptionContextAddress; break; diff --git a/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs index 16bfc00e..ab425cff 100644 --- a/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs +++ b/Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs @@ -225,7 +225,7 @@ namespace Ryujinx.HLE.HOS.Services.FspSrv { SaveSpaceId saveSpaceId = (SaveSpaceId)context.RequestData.ReadInt64(); - long titleId = context.RequestData.ReadInt64(); + ulong titleId = context.RequestData.ReadUInt64(); UInt128 userId = context.RequestData.ReadStruct<UInt128>(); diff --git a/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs b/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs index 36775b07..97fa1d74 100644 --- a/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs +++ b/Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs @@ -40,8 +40,6 @@ namespace Ryujinx.HLE.HOS.SystemState internal string ActiveAudioOutput { get; private set; } - public bool DiscordIntegrationEnabled { get; set; } - public bool DockedMode { get; set; } public ColorSet ThemeColor { get; set; } |
