diff --git a/src/SharpEmu.Libs/Kernel/KernelPthreadExtendedCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelPthreadExtendedCompatExports.cs index 9ccaaa5a..a7985993 100644 --- a/src/SharpEmu.Libs/Kernel/KernelPthreadExtendedCompatExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelPthreadExtendedCompatExports.cs @@ -717,6 +717,35 @@ public static class KernelPthreadExtendedCompatExports return (int)OrbisGen2Result.ORBIS_GEN2_OK; } + [SysAbiExport( + Nid = "FXPWHNk8Of0", + ExportName = "scePthreadAttrGetschedparam", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libKernel")] + public static int PthreadAttrGetschedparam(CpuContext ctx) + { + var attrAddress = ctx[CpuRegister.Rdi]; + var schedParamAddress = ctx[CpuRegister.Rsi]; + if (attrAddress == 0 || schedParamAddress == 0) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT; + } + + PthreadAttrState state; + lock (_stateGate) + { + state = GetOrCreateAttrStateLocked(attrAddress); + } + + if (!TryWriteInt32(ctx, schedParamAddress, state.SchedPriority)) + { + return (int)OrbisGen2Result.ORBIS_GEN2_ERROR_MEMORY_FAULT; + } + + ctx[CpuRegister.Rax] = 0; + return (int)OrbisGen2Result.ORBIS_GEN2_OK; + } + [SysAbiExport( Nid = "DzES9hQF4f4", ExportName = "scePthreadAttrSetschedparam", diff --git a/src/SharpEmu.Libs/Kernel/KernelRuntimeCompatExports.cs b/src/SharpEmu.Libs/Kernel/KernelRuntimeCompatExports.cs index 167c6c8d..d210bc04 100644 --- a/src/SharpEmu.Libs/Kernel/KernelRuntimeCompatExports.cs +++ b/src/SharpEmu.Libs/Kernel/KernelRuntimeCompatExports.cs @@ -752,6 +752,7 @@ public static class KernelRuntimeCompatExports _nextReservedVirtualBase = Math.Max(_nextReservedVirtualBase, mappedAddress + length); } + KernelMemoryCompatExports.RegisterReservedVirtualRange(mappedAddress, length); return (int)OrbisGen2Result.ORBIS_GEN2_OK; }