Commit Graph
5577 Commits
Author SHA1 Message Date
Dean d9162684ee Merge pull request #646 from Celegans12/fix/agc-get-is-trinity-mode
fix(agc): store sceAgcGetIsTrinityMode's flag through its out pointer
2026-10-06 07:47:55 +13:00
Dean a974aebf92 Merge pull request #728 from adriadam10/feat/agcdriver-submit-validation-names
fix(agcdriver): name the four SubmitValidation stubs from their NIDs
2026-10-06 07:47:13 +13:00
Dean f8cfceb2eb Merge pull request #725 from adriadam10/feat/agc-unknown-names
fix(agc): name nine Unimplemented stubs from their NIDs
2026-10-06 07:46:30 +13:00
Dean 64e8667e7c Merge pull request #687 from Celegans12/fix/agc-tessellation-feature
fix(agc): log the Vulkan features after tessellation is enabled
2026-10-06 07:45:46 +13:00
Adrià FranchandClaude 5864b20dcb feat(shader): accept every SDWA selector, clamp and omod on v_ldexp_f16
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:31:38 +02:00
Adrià FranchandClaude b8e1936783 fix(shader): accept clamp and omod on every f16 VOP3 result op
clamp (and omod, ignored while f16 denormals are enabled) were refused or
dropped per op: v_{add,sub,subrev,mul,min,max}_f16, v_ldexp_f16,
v_frexp_mant_f16, v_cvt_norm_{i,u}16_f16, v_{max3,min3,med3,div_fixup}_f16.
They now share one clamp on the f16 bits (clampF16Bits).

Co-Authored-By: Claude <[email protected]>
2026-10-05 20:30:47 +02:00
Adrià FranchandClaude 55f548d6bc feat(libc): implement wcsrtombs_s
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:29:18 +02:00
Dean fdd6519eac Merge pull request #507 from adriadam10/feat/vop3-integer-clamp
fix(shader): saturate VOP3 integer mad/sad results on clamp
2026-10-06 07:27:34 +13:00
Cliff Syner b9c1c8848f feat(libc): implement strnlen_s
The DQbtGaBKlaw import was a throwing stub (libcCyberUnknown17). It is
the NID of "strnlen_s", which C11 K.3.7.4.4 defines as strnlen that
returns 0 for a null pointer.

The removed stub comment from #358 described its call site as
float -> float, which contradicts the hash-verified name; #492 left the
stub untouched for that reason.
2026-10-05 18:26:06 +00:00
alfalfa-starandClaude Opus 5.5 ee2b3be52f fix(relinker): allow duplicate Linux guest exports that no module imports
Guest modules a title opens with sceKernelLoadStartModule are looked up
through their own handle, so several modules may export the same name:
every Wwise plugin exports g_pAKPluginList. On Linux a duplicate now
fails only when the executable or a guest module imports it, as the
provider would be ambiguous. Windows keeps rejecting duplicates.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:21:11 +02:00
Celegans12andClaude Opus 5.5 75e2e7252e fix(agc): log the Vulkan features after tessellation is enabled
The device constructor printed "Vulkan features tessellationAvailable"
before it read VkPhysicalDeviceFeatures and set tessellationShader, so
the line reported 0 on every GPU, including ones that enable the
feature. The rect-list and tessellation paths already read the enabled
value; only the diagnostic was wrong, and it suggested that
tessellation was unavailable.

Print the line right after the feature is enabled. The mesh, depth
clip and unrestricted depth range values it also reports are set
earlier and do not change.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:20:50 +02:00
alfalfa-starandClaude Opus 5.5 1d9d5ab491 fix(libs): keep a $ORIGIN runpath in the patched prx libraries
The NID patcher rebuilds .dynstr keeping only the DT_NEEDED and
DT_SONAME strings, so DT_RUNPATH kept a stale offset and the patched
libraries shipped with an empty runpath. A library could then load only
those sibling prx that the executable already loads itself:
libSceVideoOut.prx needs libSceKeyboard.prx, which a title that does
not import libSceKeyboard never loads, so it fails at startup.

The patcher now keeps DT_RPATH and DT_RUNPATH strings, and the prx
libraries are linked with a $ORIGIN runpath instead of the build
directory, so they find each other wherever they are copied.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:20:14 +02:00
Adrià FranchandClaude 3f2e5150c2 feat(libc): implement _Xtime_get_ticks
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:16:11 +02:00
Dean 33e9a12159 Merge pull request #511 from adriadam10/feat/sdwa-vop2-float-selectors
feat(shader): accept every SDWA selector on VOP2 float ops
2026-10-06 07:13:44 +13:00
Dean b6c889d208 Merge pull request #625 from DotDebian/fix/mimg-address-instruction-dimension
fix(shader): locate image LOD, mip and sample index by the instruction's dimension
2026-10-06 07:13:30 +13:00
Adrià FranchandClaude 68b71c971a feat(libc): implement _FDtest, _FInf and _FNan
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:10:34 +02:00
alfalfa-starandClaude Opus 5.5 d7f3b7c494 feat(voiceqos): implement sceVoiceQoSInit
A title passes a work memory block and app type 0x20000000, and turns
voice chat off when initialization fails. Initialization now records
the library as initialized and succeeds. A null or empty memory block,
another app type and a second initialization throw, as their error
codes are unknown.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 20:09:25 +02:00
Adrià FranchandClaude ea65b7e5be fix(agcdriver): name the four SubmitValidation stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:03:12 +02:00
Adrià FranchandClaude 357fd7e806 fix(agc): name nine Unimplemented stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 20:01:01 +02:00
MerijnandClaude Opus 5.5 3b8ef5bc4f feat(libkernel): record exception handlers
sceKernelInstallExceptionHandler and sceKernelRemoveExceptionHandler threw.
They now keep one handler per allowed signal (SIGHUP, SIGILL, SIGFPE,
SIGBUS, SIGSEGV, SIGUSR1, as in shadPS4): another signal or a null handler
returns EINVAL, a second handler for a signal returns EAGAIN, and removing
clears it. Delivery is not implemented and is recorded in the technical
debt; sceKernelRaiseException still throws.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:59:03 +02:00
Adrià FranchandClaude 6d81cce0db fix(libkernel): name three Unimplemented stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:58:20 +02:00
Adrià FranchandClaude 85f16c56ee fix(libkernel): name five sceCoredump stubs from their NIDs
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:55:41 +02:00
alfalfa-starandClaude Opus 5.5 ba8c8c4b05 feat(libkernel): implement sceKernelGetModuleInfoFromAddr
A title's libc.prx calls it from __cxa_thread_atexit with flags 2 and
stores the returned module id in the destructor record. The 0x1A8-byte
info reports the name, id, TLS block, init and fini procedures,
eh_frame_hdr and eh_frame, and up to four load segments of the image
containing the address. The id is the loader handle when the image was
opened through sceKernelLoadStartModule and otherwise a stable id from
the same range. Unknown flags and st_size values throw.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:55:15 +02:00
Adrià FranchandClaude afe2b14a84 feat(libc): implement div
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:53:39 +02:00
Adrià FranchandClaude fbf0099790 feat(libc): implement std::_Xrange_error and the range_error type
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:49:33 +02:00
MerijnandClaude Opus 5.5 65e5c9932c feat(libkernel): implement sceKernelCheckedReleaseDirectMemory
Release direct memory only when the whole range is allocated: a misaligned
start or length returns EINVAL, a zero length succeeds, and a range that
leaves direct memory or covers an unallocated page returns ENOENT without
releasing anything, as in shadPS4. The check and the release run under
the pool lock.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:47:51 +02:00
MerijnandClaude Opus 5.5 d52a5f0169 feat(relinker): relink needed modules outside the module directories
Unity titles keep modules the executable needs in Media/Modules
(PPSA12544: Il2cppUserAssemblies.prx and PS5Util.prx), outside sce_module
and prx, so they were left as host libraries and startup failed to load
them. A DT_NEEDED module of the executable that is not in a module
directory is now searched for under the input directory and relinked like
the others; two ELF files with the name are ambiguous. Guest outputs keep
their directory relative to the input instead of only its last component.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:41:59 +02:00
Adrià FranchandClaude e923bea317 feat(savedata): implement the PS4 transfer mount and directory search
Rename the two unknown libSceSaveData.native stubs to
sceSaveDataTransferringMountPs4 (RjMlsR8EXrw) and
sceSaveDataDirNameSearchPs4 (X4MYzukPc3g). There is no PS4 save area:
the mount returns NOT_FOUND like sceSaveDataTransferringMount, and the
search reports zero hits.

Co-Authored-By: Claude <[email protected]>
2026-10-05 19:41:59 +02:00
MerijnandClaude Opus 5.5 de93a9492c feat(libkernel): load the relinked module for a guest module path
dlopen and sceKernelLoadStartModule passed the guest path to the host
loader, which cannot load the original ELF module. When a relinked module
<path>.guest.prx exists beside it, that module is loaded instead; for a
module the executable already loaded at startup the host loader returns
the same module. PPSA12544 loads /app0/Media/Modules/Il2CppUserAssemblies.prx
at startup and resolves IL2CPP functions through it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:41:47 +02:00
Adrià FranchandClaude 9b9194e543 feat(libSceShare): sceShareCaptureScreenshotExtended
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:35:25 +02:00
Adrià FranchandClaude cf7c599087 feat(libs): implement scePlayGoDialogGetStatus
Rename the NOAMxY2EGS0 stub and return the dialog's current status
without advancing it.

Co-Authored-By: Claude <[email protected]>
2026-10-05 19:32:16 +02:00
Adrià FranchandClaude 7bcdc6f578 feat(http): name sceHttpSetInflateGZIPEnabled and sceHttpSetRequestStatusCallback
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:29:54 +02:00
MerijnandClaude Opus 5.5 845e4dd942 fix(libs): drop exports implemented elsewhere
OQ-dzhlnM28, qBS714-Jr3g and tB59hFLH3SA are _sceLibcInternalThreadDtors,
_sceLibcInternalThreadAtexit and _sceLibcInternalForceTlsDestructor,
implemented in libSceLibcInternal by #641. dbOlWdppb4o is implemented by
#651.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:26:15 +02:00
MerijnandClaude Opus 5.5 4a548c0ba5 feat(libkernel): implement sceKernelGetOperationMode
NH6xARDOVv8 is the NID of sceKernelGetOperationMode. PPSA12544 passes two
int outputs and logs them as mode and submode; both are reported as 0.
B2n8aDorSH4 and PZQhiiLXRFs are sceKernelSyncOnAddressWait32 and
sceKernelSyncOnAddressWait64, implemented by #633, and are no longer added
as unimplemented exports.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:25:52 +02:00
MerijnandClaude Opus 5.5 8f6328242d feat(libs): add exports imported by PPSA12544
Implement scePthreadGetschedparam and scePthreadSetschedparam on top of
the thread priority, POSIX utimes and fsync on top of sceKernelUtimes
and sceKernelFsync, and sceUserServiceGetAccessibilityZoomFollowFocus
like the other accessibility queries. Add the remaining imports of
PPSA12544 as unimplemented exports and record unknown NIDs and
signatures in the technical debt.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:25:52 +02:00
Adrià FranchandClaude 4136a04ba7 feat(ulobjmgr): register and unregister object
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:25:46 +02:00
Adrià FranchandClaude ce4bdbf2eb feat(libc): strtoimax and logbf
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:22:12 +02:00
Adrià FranchandClaude f3e783b6cb feat(libs): implement sceNpTrophy2UnregisterUnlockCallback
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:14:49 +02:00
MerijnandClaude Opus 5.5 b530c9b784 feat(libkernel): implement sceKernelIsStack
Track the stack range of each running guest thread and answer
sceKernelIsStack from the calling thread's stack (the host limits for an
adopted thread) or from that registry. A mapped address outside every
stack succeeds with null bounds and an unmapped one returns EACCES; the
output pointers may be null.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:08:45 +02:00
MerijnandClaude Opus 5.5 67d2c3c0a3 feat(userservice): implement sceUserServiceGetAgeLevel
Report age level 0 for the initial user and reject other users and a null
output like the other user queries. The meaning of the value is unknown and
recorded in the technical debt; PPSA12544 only stores it for its user
profile.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:05:50 +02:00
Adrià FranchandClaude fa996bbccb fix(shader): saturate VOP3 integer mad/sad results on clamp
Co-Authored-By: Claude <[email protected]>
2026-10-05 19:05:34 +02:00
boykopovar 0518f0e021 Merge pull request #677 from adriadam10/test/flat-cache-bits-ci-time
test(shader): keep the flat cache bits test within CI's time limit
2026-10-05 19:58:55 +03:00
MerijnandClaude Opus 5.5 8e96e48fbd fix(libkernel): report reserved virtual ranges in sceKernelVirtualQuery
A range reserved with sceKernelReserveVirtualRange is registered as not
readable, and sceKernelVirtualQuery only searched readable registrations,
so a query inside a reservation fell back to the host and returned EACCES.
Reserved ranges are now tracked until a direct or flexible mapping or an
unmap covers them, and a query inside one succeeds with the reserved piece
as its extent, protection 0 and is_committed clear. PPSA12544's allocator
queries a reservation before committing it and treated the error as a
failed commit, then wrote to the inaccessible range.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 18:56:15 +02:00
Celegans12andClaude Opus 5.5 d3e2e53a7c feat(videoout): accept the STRICT_COLORIMETRY buffer option
sceVideoOutRegisterBuffers2 and sceVideoOutSubmitChangeBufferAttribute2
threw for every buffer attribute option other than 0. PPSA26344 builds
its display buffers with option 8 through the libSceAgc helper linked
into it, so its first registration failed.

Option 8, VIDEO_OUT_BUFFER_ATTRIBUTE_OPTION_STRICT_COLORIMETRY (name
and value from KytyPS5), is now accepted and presented as option 0;
every other option still throws. What the console changes for it is
unknown and recorded in TechnicalDebt. The rejection now names the
tiling mode, pitch, aspect ratio and option it was given.

video_out_flip_tests decode checks that option 8 describes the same
buffer as option 0 and that options 1, 32 and 40 are rejected.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 18:53:26 +02:00
Celegans12andClaude Opus 5.5 4450965721 feat(voiceqos): declare the missing libSceVoiceQoS exports
libSceVoiceQoS exported only sceVoiceQoSInit, so a title that imports
the rest of the library failed at load on unresolved imports.

Declare sceVoiceQoSEnd, the local and remote endpoint create and delete
functions, sceVoiceQoSConnect, sceVoiceQoSDisconnect, both endpoint
attribute setters, sceVoiceQoSReadPacket and sceVoiceQoSWritePacket.
Each calls NotImplemented_nid_no_patch and reads no arguments, so the
imports resolve and a call still stops with the function's name.
sceVoiceQoSInit is unchanged. Their behaviour follows in a later change,
once a title is seen to reach them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 18:53:18 +02:00
Celegans12andClaude Opus 5.5 e30336c815 feat(razor): implement sceRazorCpuPushMarkerStatic and sceRazorCpuPopMarker
Ghost of Yotei (PPSA26344) imports both functions, so its import
resolution failed at startup. Markers only feed an attached Razor
capture. AnyPS5 hosts none and sceRazorCpuIsCapturing reports 0, so,
like the other libSceRazorCpu exports, both do nothing and return 0.

The push signature comes from the title's calls (a string literal,
0x80ffffff, 2). TechnicalDebt lists both functions with the assumed
signatures. guest_razor_cpu covers nested and unbalanced markers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 18:53:15 +02:00
boykopovar a4c290f50b Merge pull request #644 from Celegans12/feat/psml-mfsr-unavailable
feat(psml): implement the MFSR 1100 calls for hardware without PSSR
2026-10-05 19:52:11 +03:00
MerijnandClaude Opus 5.5 f524a27a8f fix(relinker): accept absolute symbols in guest modules
Guest modules may define symbols in SHN_ABS (0xfff1), for example the
151 library marker symbols of PPSA12544's Il2cppUserAssemblies.prx.
The reader no longer rejects them or checks their value as a mapped
address, relocations against them write the absolute value without a
base relocation, and they are not exported: a PE export is an RVA, so an
import of one fails at startup as an unresolved import. Other special
sections are still rejected.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 18:37:35 +02:00
LexroidandClaude Opus 5.5 3e65449c40 feat(libSceAgcDriver): implement sceAgcDriverSubmitMultiDcbs and sceAgcDriverAgrSubmitMultiDcbs
Both submit each DCB of the address and size arrays to the graphics queue
in array order, as sceAgcDriverSubmitDcb does for one. A count of 0 is
accepted without reading the arrays; null arrays with a non-zero count and
arrays outside guest memory throw.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 19:07:20 +03:00
Celegans12andClaude Opus 5.5 62c70fb1d5 fix(libkernel): state the size of a direct memory backing Windows cannot create
On Windows each direct memory allocation is backed by a page-file
section that CreateFileMappingW commits in full. When the system commit
limit cannot cover it, the title stopped with "create direct memory
backing: Insufficient system resources exist to complete the requested
service", which did not say how much was requested.

The error now states the requested size in bytes and MiB, and the
runtime layout notes in USAGE.md describe the commit requirement and
the page file. Allocation behaviour is unchanged: committing at
allocation matches the console, where allocated direct memory is
always backed by physical memory.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-05 17:52:04 +02:00