From d5721f34b250a30ae2fbd78dac61bccece872605 Mon Sep 17 00:00:00 2001 From: MathiasDevelopes <25400788+MathiasDevelopes@users.noreply.github.com> Date: Fri, 9 Oct 2026 17:29:35 +0200 Subject: [PATCH] feat(libScePsml): build libScePsml from the libScePsml_debug source Titles that link the release module libScePsml.prx failed to start because no host library had that name; PPSA25344 links it. libScePsml and libScePsml_debug are now built from the same source. scePsmlMfsrGetDispatchMfsrPacket1000, which PPSA25344 imports, is added without an implementation. Co-Authored-By: Claude Opus 5.5 (1M context) --- core/libs/prx/libScePsml/CMakeLists.txt | 2 ++ core/libs/prx/libScePsml_debug/CMakeLists.txt | 5 ++--- core/libs/prx/libScePsml_debug/Export.cpp | 5 +++++ core/libs/prx/libScePsml_debug/PsmlLibrary.cmake | 5 +++++ docs/dev/TechnicalDebt.md | 1 + 5 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 core/libs/prx/libScePsml/CMakeLists.txt create mode 100644 core/libs/prx/libScePsml_debug/PsmlLibrary.cmake diff --git a/core/libs/prx/libScePsml/CMakeLists.txt b/core/libs/prx/libScePsml/CMakeLists.txt new file mode 100644 index 000000000..121b19bff --- /dev/null +++ b/core/libs/prx/libScePsml/CMakeLists.txt @@ -0,0 +1,2 @@ +include(${CMAKE_CURRENT_SOURCE_DIR}/../libScePsml_debug/PsmlLibrary.cmake) +add_sce_psml_library(libScePsml) diff --git a/core/libs/prx/libScePsml_debug/CMakeLists.txt b/core/libs/prx/libScePsml_debug/CMakeLists.txt index 3fd929d07..ae4867fdc 100644 --- a/core/libs/prx/libScePsml_debug/CMakeLists.txt +++ b/core/libs/prx/libScePsml_debug/CMakeLists.txt @@ -1,6 +1,5 @@ -add_library(libScePsml_debug SHARED EXCLUDE_FROM_ALL Export.cpp) -target_include_directories(libScePsml_debug PRIVATE ${LIBS_INCLUDE_DIR}) -configure_windows_unwind(libScePsml_debug) +include(${CMAKE_CURRENT_SOURCE_DIR}/PsmlLibrary.cmake) +add_sce_psml_library(libScePsml_debug) if(BUILD_TESTING) add_test_executable(guest_psml_tests ${LIBS_INCLUDE_DIR}/tests/GuestPsml.cpp) diff --git a/core/libs/prx/libScePsml_debug/Export.cpp b/core/libs/prx/libScePsml_debug/Export.cpp index 3eaf69d18..d85faa0ae 100644 --- a/core/libs/prx/libScePsml_debug/Export.cpp +++ b/core/libs/prx/libScePsml_debug/Export.cpp @@ -75,6 +75,11 @@ int APS5_VABI scePsmlMfsrIsCaptureInProgress() { return 0; } +int APS5_VABI scePsmlMfsrGetDispatchMfsrPacket1000() { + NotImplemented_nid_no_patch(__func__); + return 0; +} + int APS5_VABI scePsmlMfsrGetDispatchMfsrPacket900() { NotImplemented_nid_no_patch(__func__); return 0; diff --git a/core/libs/prx/libScePsml_debug/PsmlLibrary.cmake b/core/libs/prx/libScePsml_debug/PsmlLibrary.cmake new file mode 100644 index 000000000..69fe16dbf --- /dev/null +++ b/core/libs/prx/libScePsml_debug/PsmlLibrary.cmake @@ -0,0 +1,5 @@ +function(add_sce_psml_library target) + add_library(${target} SHARED EXCLUDE_FROM_ALL ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Export.cpp) + target_include_directories(${target} PRIVATE ${LIBS_INCLUDE_DIR}) + configure_windows_unwind(${target}) +endfunction() diff --git a/docs/dev/TechnicalDebt.md b/docs/dev/TechnicalDebt.md index 8f2178189..18d0c0662 100644 --- a/docs/dev/TechnicalDebt.md +++ b/docs/dev/TechnicalDebt.md @@ -148,6 +148,7 @@ Throughout the project, every function at every stage either **does exactly what - [sceAudioOut2PortCreate](../../core/libs/prx/libSceAudioOut/src/AudioOut2Port.cpp) (libSceAudioOut) - 12 channels are assumed to be L R C LFE Ls Rs Lb Rb Ltf Rtf Ltb Rtb as in KytyPS5's 12-to-8 fold, and 6 and 8 channels to be its first 6 and 8; no title or SDK header confirms the order - [sceAudioOut2PortCreate](../../core/libs/prx/libSceAudioOut/src/AudioOut2Port.cpp) (libSceAudioOut) - the stereo fold is assumed, not the console's downmix: C at -3 dB into both sides, Ls/Rs, Lb/Rb and Ltf/Rtf at -3 dB and Ltb/Rtb at -6 dB into their own side, LFE dropped - [scePsmlMfsrGetContextBufferRequirement1100, scePsmlMfsrCreateContext1100, scePsmlMfsrGetDispatchMfsrPacket1100](../../core/libs/prx/libScePsml_debug/Export.cpp) (libScePsml_debug) - argument layouts unknown; only 0x8A810001 (not initialized) is returned +- [scePsmlMfsrGetDispatchMfsrPacket1000](../../core/libs/prx/libScePsml_debug/Export.cpp) (libScePsml) - unknown signature, imported by PPSA25344; declared without parameters. libScePsml and libScePsml_debug are built from the same source - [scePngEncEncode](../../core/libs/prx/libScePngEnc/Export.cpp) (libScePngEnc) - whether rows may stay unfiltered when `filter_type` names a subset of the filters is unknown; as in shadPS4, they may only for 0 and for the all-filters mask - [sceJpegEncEncode](../../core/libs/prx/libSceJpegEnc/Export.cpp) (libSceJpegEnc) - `restart_interval` follows SharpProspero's field doc (0 none, -1 every row of blocks, positive a block count); a positive value is taken as the JPEG DRI interval in MCUs and -1 as one restart per MCU row, which no reference confirms. Other negative values throw - [sceVoiceQoSInit](../../core/libs/prx/libSceVoiceQoS/Export.cpp) (libSceVoiceQoS) - `0x804E0905` for a second initialization comes from [prosper](https://github.com/mattias800/prosper)'s reading of the module and was not measured: on a PS5 a valid call blocks inside a homebrew payload, so it never returns there. The app type and the block are not used, as no endpoint is implemented