aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS')
-rw-r--r--Ryujinx.HLE/HOS/Horizon.cs53
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/KProcess.cs4
-rw-r--r--Ryujinx.HLE/HOS/Kernel/Process/ProcessCreationInfo.cs6
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcSystem.cs2
-rw-r--r--Ryujinx.HLE/HOS/Services/FspSrv/IFileSystemProxy.cs2
-rw-r--r--Ryujinx.HLE/HOS/SystemState/SystemStateMgr.cs2
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; }