diff --git a/Ryujinx.Core/OsHle/Kernel/SvcSystem.cs b/Ryujinx.Core/OsHle/Kernel/SvcSystem.cs index 48e8ce385a..f7f627ece3 100644 --- a/Ryujinx.Core/OsHle/Kernel/SvcSystem.cs +++ b/Ryujinx.Core/OsHle/Kernel/SvcSystem.cs @@ -14,6 +14,7 @@ namespace Ryujinx.Core.OsHle.Kernel partial class SvcHandler { private const int AllowedCpuIdBitmask = 0b1111; + private ulong IsVirtualAddressMemoryEnabled = 0; private const bool EnableProcessDebugging = false; @@ -297,6 +298,9 @@ namespace Ryujinx.Core.OsHle.Kernel ThreadState.X1 = MemoryRegions.MapRegionSize; break; + case 16: + ThreadState.X1 = IsVirtualAddressMemoryEnabled; + break; default: throw new NotImplementedException($"SvcGetInfo: {InfoType} {Handle} {InfoId}"); } diff --git a/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs b/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs index 3ecdf15c50..6b03cc4091 100644 --- a/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs +++ b/Ryujinx.Core/OsHle/Services/Acc/IAccountServiceForApplication.cs @@ -15,6 +15,7 @@ namespace Ryujinx.Core.OsHle.Services.Acc { { 0, GetUserCount }, { 3, ListOpenUsers }, + { 4, GetLastOpenedUser }, { 5, GetProfile }, { 100, InitializeApplicationInfo }, { 101, GetBaasAccountManagerForApplication } @@ -37,6 +38,13 @@ namespace Ryujinx.Core.OsHle.Services.Acc return 0; } + public long GetLastOpenedUser(ServiceCtx Context) + { + Logging.Stub(LogClass.ServiceAcc, "Stubbed"); + + return 0; + } + public long GetProfile(ServiceCtx Context) { MakeObject(Context, new IProfile()); diff --git a/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs b/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs index ca4e368a68..d2e7569970 100644 --- a/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs +++ b/Ryujinx.Core/OsHle/Services/Am/IApplicationFunctions.cs @@ -14,11 +14,13 @@ namespace Ryujinx.Core.OsHle.Services.Am { m_Commands = new Dictionary() { - { 1, PopLaunchParameter }, - { 20, EnsureSaveData }, - { 21, GetDesiredLanguage }, - { 22, SetTerminateResult }, - { 40, NotifyRunning } + { 1, PopLaunchParameter }, + { 20, EnsureSaveData }, + { 21, GetDesiredLanguage }, + { 22, SetTerminateResult }, + { 40, NotifyRunning }, + { 66, InitializeGameplayRecording }, + { 67, SetGameplayRecordingState }, }; } @@ -74,6 +76,20 @@ namespace Ryujinx.Core.OsHle.Services.Am return 0; } + public long InitializeGameplayRecording(ServiceCtx Context) + { + //TODO: Stubbed + + return 0; + } + + public long SetGameplayRecordingState(ServiceCtx Context) + { + //TODO: Stubbed + + return 0; + } + private byte[] MakeLaunchParams() { //Size needs to be at least 0x88 bytes otherwise application errors. diff --git a/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs b/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs index 3afee1a16c..90822636a6 100644 --- a/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs +++ b/Ryujinx.Core/OsHle/Services/FspSrv/IFileSystemProxy.cs @@ -15,10 +15,11 @@ namespace Ryujinx.Core.OsHle.Services.FspSrv { { 1, SetCurrentProcess }, { 18, OpenSdCardFileSystem }, + { 22, CreateSaveData }, { 51, OpenSaveDataFileSystem }, { 200, OpenDataStorageByCurrentProcess }, { 203, OpenPatchDataStorageByCurrentProcess }, - { 1005, GetGlobalAccessLogMode } + { 1005, GetGlobalAccessLogMode }, }; } @@ -34,6 +35,13 @@ namespace Ryujinx.Core.OsHle.Services.FspSrv return 0; } + public long CreateSaveData(ServiceCtx Context) + { + //TODO: Stubbed + + return 0; + } + public long OpenSaveDataFileSystem(ServiceCtx Context) { MakeObject(Context, new IFileSystem(Context.Ns.VFs.GetGameSavesPath())); diff --git a/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs b/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs index cc5f95cd31..a91558a50b 100644 --- a/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs +++ b/Ryujinx.Core/OsHle/Services/Nv/INvDrvServices.cs @@ -31,12 +31,13 @@ namespace Ryujinx.Core.OsHle.Services.Nv { m_Commands = new Dictionary() { - { 0, Open }, - { 1, Ioctl }, - { 2, Close }, - { 3, Initialize }, - { 4, QueryEvent }, - { 8, SetClientPid }, + { 0, Open }, + { 1, Ioctl }, + { 2, Close }, + { 3, Initialize }, + { 4, QueryEvent }, + { 8, SetClientPid }, + { 13, FinishInitialize }, }; IoctlCmds = new Dictionary<(string, int), ServiceProcessIoctl>() @@ -165,6 +166,13 @@ namespace Ryujinx.Core.OsHle.Services.Nv return 0; } + public long FinishInitialize(ServiceCtx Context) + { + //TODO: Stubbed + + return 0; + } + private long NvGpuAsIoctlBindChannel(ServiceCtx Context) { long Position = Context.Request.GetSendBuffPtr(); diff --git a/Ryujinx.Core/OsHle/Services/Vi/IHOSBinderDriver.cs b/Ryujinx.Core/OsHle/Services/Vi/IHOSBinderDriver.cs index b1b7a26828..6c58e98ba6 100644 --- a/Ryujinx.Core/OsHle/Services/Vi/IHOSBinderDriver.cs +++ b/Ryujinx.Core/OsHle/Services/Vi/IHOSBinderDriver.cs @@ -24,7 +24,8 @@ namespace Ryujinx.Core.OsHle.Services.Vi { { 0, TransactParcel }, { 1, AdjustRefcount }, - { 2, GetNativeHandle } + { 2, GetNativeHandle }, + { 3, TransactParcel }, //TransactParcelAuto }; ReleaseEvent = new KEvent();