Commit Graph
11 Commits
Author SHA1 Message Date
Dean 66d362c782 Merge pull request #12836 from hypermoist/feat/np-object-operators
feat(libSceNpCommon): implement the sce::np::Object new and delete operators
2026-10-30 22:49:46 +13:00
hypermoistandClaude Opus 5.5 228adbf903 test(libSceNpCommon): run the Object size-wrap row with a succeeding allocator
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 16:10:39 +13:00
hypermoistandClaude Opus 5.5 67bab6bdfe fix(libSceNpCommon): store the high hex digit before checking the low one in sceNpStrParseHex
sceNpStrParseHex and sceNpStrnParseHex in firmware 13.60 write the high
nibble of each byte before they read the low digit, so a refused low digit
leaves that byte as the high nibble shifted left by four.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 03:10:33 +13:00
hypermoistandClaude Opus 5.5 2d12b228ab test(libSceNpCommon): pin the stored allocator, header tail and size wrap of the Object operators
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 01:25:53 +13:00
hypermoistandClaude Opus 5.5 72cde05a64 feat(libSceNpCommon): implement the sce::np::Object new and delete operators
The ten operators allocate an object behind a 16-byte header that keeps its
allocator and free it through that allocator, as libSceNpCommon.sprx of
firmware 13.60 does (read from disassembly, not measured on a console). Five
were NotImplemented stubs; the other five were not exported.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-30 00:58:39 +13:00
MarcZX10 e6083ad5c5 test(libSceNpCommon): escape into a filled buffer, size a null-destination query, split a surrogate pair
sceNpUtilJsonEscape has to stay inside a partly filled 16 byte buffer and refuse
one without a terminator, sceNpUtilJsonUnescape has to report the length of a
query with a null destination and size 0, and sceNpUtilJsonGetOneChar has to
reject a high surrogate that is not followed by a second unicode escape.
2026-10-28 04:25:02 +00:00
Alexandre Figueiredo da3e88a21d feat(libSceNpCommon): forward sceNpCloseEventFlag to sceKernelCloseEventFlag 2026-10-25 00:10:14 +01:00
boykopovar f38d29fd08 refactor(sdk): add canonical headers for remaining libraries 2026-10-24 23:17:42 +03:00
hypermistandClaude Opus 5.5 702d85e0bc fix(libSceNpCommon): check for a queued callout before writing it
sceNpCalloutStartOnCtx64 cleared and filled the entry before looking for
it in the queue, so restarting a queued callout cut off every callout
queued after it and changed its deadline while the callout thread could
read it. The entry is now written only after the duplicate check under
the context mutex. sceNpArchInit and sceNpArchTerm now hold a lock, so a
second caller no longer returns before the global heap exists. Both
differences from the firmware are recorded in the debt document.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_013XFS3FUfBtqCVfwmBrRQ6q
2026-10-24 00:57:29 +13:00
hypermist b98f2f82e1 Merge remote-tracking branch 'upstream/main' into feat/npcommon-runtime
# Conflicts:
#	core/libs/prx/libSceNpCommon/PendingExports.cpp
2026-10-22 21:27:04 +13:00
hypermistandClaude Opus 5.5 736ee67caf feat(libSceNpCommon): implement 94 more of the module's exports
Builds on #9037. Adds threads, event flags, semaphores, atomics, heaps
and kernel memory, callout contexts, time and SDK version queries,
base64 and hex codecs, integer and string helpers, JSON escaping, URL
encoding, online id strings, language codes, title ids and debug output.
The behaviour follows libSceNpCommon.sprx from firmware 12.00, read
from disassembly.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01RbLgECLQ2bpDM7oe2urGZK
2026-10-22 00:23:37 +13:00