sceNetResolverStartNtoa refuses a timeout from 1 to 999999 with EINVAL
before the resolver is looked up, and takes 0 as 1000000, as a run of
firmware 13.42's module shows.
sceRudpGetContextStatus refuses a negative id, a null status and a size
outside 1 to 0x30 with 0x80770004 before it looks the id up, and writes
the idle block with 0xFFFFFFFF at bytes 4-7, as firmware 10.71 and 13.42
readings show. sceRudpCreateContext checks initialization before its null
id pointer.
Bytes 81 8D 8E 8F 90 9D 9E of Cp1254 and 81 8A 8D 8E 8F 90 9A 9D 9E of
Cp1258 now answer 0x805C0020 both ways instead of mapping to C1 controls,
and sceCesUtf32ToSbc answers 0x805C0015 for a surrogate, as a sweep on a
PS5 measured and a firmware 13.42 run of the module agrees.
A sampler rack or a custom sampler rack whose max_waveform_blocks is 0 or above
32 now returns 0x804A8053 from sceNgs2RackQueryBufferSize, sceNgs2RackCreate
and sceNgs2RackCreateWithAllocator, checked before the peak meter and buffer
count checks as the PS5 module does. Main checked only a custom sampler rack
with 0 and accepted any count for a sampler rack, taking 0 as 1.
The PS4 build keeps main's behaviour: no limit for sampler racks, and 0x804A8053
for a custom sampler rack with 0. PS4 11.00 takes 1 to 16 on sampler racks and
returns 0x804A0106, but the PS4 library reads the PS5 rack option layout, so it
cannot apply that.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
scePthreadCondSignalto and pthread_cond_signalto_np answered EPERM for a
handle that is not a live thread, where a PS5 on firmware 13.60 returns
ESRCH. The check sits between the null-thread and not-waiting checks, as
that console orders them.
In firmware 13.42 sceAudio3dPortOpenEx only sets the flag that skips
the PS4-process AudioOut2 advances, which this library never makes, so
it now opens like sceAudio3dPortOpen. A PS4-process open reports an
open port before an unsupported buffer mode or bed count, as the
firmware does, and the debt entry records the advances after an open
and a push for a PS4 SDK of 0x11000000 or later.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Store sceKernelIsPs4Process at sceAudio3dInitialize as firmware 13.42
does and follow its PS4-process answers: bed write2 rejects route 1 on a
2-bed port, audio out open rejects port type 3 with param bit 17 and
checks like a PS5 process otherwise, and a repeated initialize returns
NOT_READY before the reserved check. Formats 6 and 7 throw for a PS4
process because the firmware rewrites them by PS4 SDK version, which
this project cannot read yet. Test the outputs loop and its reports.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Choose the firmware 13.42 PS5 rules or the earlier answers by
sceKernelIsPs4Process for the port open, open ex, create and bed write2
route checks, read the port id for a call report only when a call
handler is registered, as the firmware does, and report a null
parameter pointer from sceAudio3dAudioOutOutputs without pointer
arithmetic on null.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceAudio3dPortOpenEx, sceAudio3dPortDestroy, sceAudio3dPortGetStatus,
sceAudio3dReportRegisterHandler and sceAudio3dReportUnregisterHandler are
implemented, and sceAudio3dPortOpen, sceAudio3dPortCreate, the object
and audio out calls and the port close follow the checks of firmware
13.42's libSceAudio3d.sprx for a PS5 process.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Version 50 is skipped, so a request with that number is refused instead
of being read in the version 49 layout.
The one-lane tessellation evaluation debt entry now states that only a
v_readlane_b32 of a constant lane throws: a lane selector held in a
register is not checked and reads the invocation's own value, as on the
vertex path.
sceSysUtilSendSystemNotificationWithText builds the 0xc30-byte request
the 13.42 library builds (kind 5, the type at +0xc, at most 179
characters of text at +0x2d, an empty text for a null message) and
returns what sceKernelSendNotificationRequest returns. That call now
prints kind 5 requests as it prints kind 0 ones.
Replaces #9081 by @shanu337.
Under APS5_NGS2_PS4_LIBRARY the sampler filter param 0x1000000a is parsed as
shadPS4's OrbisNgs2SamplerVoiceFilterParam (index 0x8, location 0xC, type
0x10, 32-bit channel mask 0x14, fc, q and level from 0x18, size 0x30), the
way the custom param 0x40001300 already is, and goes through the new filter
code. main read KytyPS5's layout (type 0x10, 64-bit mask 0x18); neither is
measured on PS4 11.00. Types 0 and 1 at location 1 are accepted, anything
else throws as on main. Raw-byte tests in ngs2_core_render cover the layout.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Under APS5_NGS2_PS4_LIBRARY the sampler filter param 0x1000000a is parsed in
the layout main used (type at 0x10, 64-bit mask at 0x18, fc at 0x20) instead
of the PS5 layout, as the custom param 0x40001300 already is, and goes
through the new filter code. Raw-byte tests in ngs2_core_render cover it.
The two filter debt entries name the module and firmware versions measured,
say the runs were on a PC with host math imports and not on a console, point
to the result records, and keep the PS4 differences gap-first. The title is
left out of the debt text; only the title ID stays.
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Firmware 4.03 bodies at 0x20cb0 (image) and 0x20f50 (pattern) recovered:
frame magic/sticky/parameter checks with error store at +4 and hook,
record-pool u16 free-run allocation under the pool mutex, 0x80 record
header (type 0x40/0x50, sequence, payload at +0x80), descriptor memcpy
of mode bytes, and same-sequence queue append bumping frame+0x28.
libSceFont links libkernel for scePthreadMutexLock/Unlock; guest test
covers validation, record bytes, queue order and the allocator.
The two binds whose answers nobody has measured still throw, with their
debt lines, but the test no longer pins that. The debt entries for Bind,
Listen and Accept say the run was under an emulator, and the Accept entry
says which of its arguments were run.
Firmware 4.03 body at 0x20f50 takes ten integer arguments with the\noutput pointer last - the PPSA20397 libSceFontGsm.prx caller rotates\nsix registers and pushes four stack arguments, no float registers.\nUpdate the declaration, stub and signature assertion, and record the\nverified offsets and record/queue semantics in the debt file.
sceRudpBind takes the socket id, virtual port and mux mode and checks
them; mux mode 2 with vport 0 takes 0x2711 and on from a per-socket
counter. sceRudpSetEventHandler checks initialization and a null
handler, and sceRudpEnd clears the handler. sceRudpListen and
sceRudpAccept follow the run: no peer ever connects here, so accept
returns WOULDBLOCK while non-blocking and otherwise waits until the
context is terminated. Cases the run did not cover throw.