From d31138fccab8ff2770997f5e1c3e51ea7dba8fb9 Mon Sep 17 00:00:00 2001 From: ParantezTech <12572227+par274@users.noreply.github.com> Date: Thu, 8 Oct 2026 17:28:24 +0300 Subject: [PATCH] [Json] Track the global special-float handler Co-authored-by: Sekai <140012992+SekaixX@users.noreply.github.com> --- src/SharpEmu.Libs/Json/JsonExports.cs | 19 +++++++++++++++++++ src/SharpEmu.Libs/Json/JsonValueModel.cs | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/src/SharpEmu.Libs/Json/JsonExports.cs b/src/SharpEmu.Libs/Json/JsonExports.cs index ba3fc3d..cd7f629 100644 --- a/src/SharpEmu.Libs/Json/JsonExports.cs +++ b/src/SharpEmu.Libs/Json/JsonExports.cs @@ -141,6 +141,25 @@ public static class JsonExports InitializerSetGlobalNullAccessCallback(ctx); #pragma warning restore SHEM004 + [SysAbiExport( + Nid = "i1393UBWu1U", + ExportName = "_ZN3sce4Json11Initializer28setGlobalSpecialFloatHandlerEPFKNS0_5ValueENS0_12FunctionTypeEdPS3_PvPbES6_", + Target = Generation.Gen4 | Generation.Gen5, + LibraryName = "libSceJson")] + public static int InitializerSetGlobalSpecialFloatHandler(CpuContext ctx) + { + var thisAddress = ctx[CpuRegister.Rdi]; + if (thisAddress == 0) + { + return SetReturn(ctx, (int)OrbisGen2Result.ORBIS_GEN2_ERROR_INVALID_ARGUMENT); + } + + JsonObjectHeap.GlobalSpecialFloatHandler = ctx[CpuRegister.Rsi]; + JsonObjectHeap.GlobalSpecialFloatHandlerContext = ctx[CpuRegister.Rdx]; + TraceJson("Initializer.setGlobalSpecialFloatHandler", thisAddress, ctx[CpuRegister.Rsi]); + return SetReturn(ctx, 0); + } + [SysAbiExport( Nid = "WSOuge5IsCg", ExportName = "_ZN3sce4Json14InitParameter2C1Ev", diff --git a/src/SharpEmu.Libs/Json/JsonValueModel.cs b/src/SharpEmu.Libs/Json/JsonValueModel.cs index b5415d8..945dd6a 100644 --- a/src/SharpEmu.Libs/Json/JsonValueModel.cs +++ b/src/SharpEmu.Libs/Json/JsonValueModel.cs @@ -87,6 +87,10 @@ internal static class JsonObjectHeap public static ulong GlobalNullAccessCallbackContext; + public static ulong GlobalSpecialFloatHandler; + + public static ulong GlobalSpecialFloatHandlerContext; + public static void SetValue(ulong address, JsonValueState state) => Values[address] = state; public static void RemoveValue(ulong address) => Values.TryRemove(address, out _); @@ -106,5 +110,7 @@ internal static class JsonObjectHeap Strings.Clear(); GlobalNullAccessCallback = 0; GlobalNullAccessCallbackContext = 0; + GlobalSpecialFloatHandler = 0; + GlobalSpecialFloatHandlerContext = 0; } }