Create, CreateEx, Destroy, GetSize and Initialize follow the firmware
13.42 export measurements reported on the pull request: bases 0x813F0000
and 0x81770000, the pointer validated first (+0x01), then sample rate
(+0x10/+0x0F), channels (+0x0D/+0x0C) and application (+0x11/+0x10), the
required caller application 2051 for CELT and 2048 for SILK, the 0x17B2
state marker at +0xCC/+0xE8 behind Destroy (+0x16/+0x15) and fixed
728/752-byte GetSize values; a successful create zero-fills the console
state size. The internal encoder keeps the restricted celt and silk
applications whose packet identity the tests compare, float included.
The tests declare entry points through the libraries' Api.hpp instead of
local prototypes, cast states to the opaque encoder types, drop the silk
ctl/cancel/priority/timeout and live-encoder Terminate throw pins and
compare both float sections against opus_encode_float. Ctl,
Encode*WithPriority and the silk cancel and timeout entry points keep
their throwing stubs, and the debt notes carry the measurement with the
remaining gaps.
- libSceOpusCeltEnc and libSceOpusSilkEnc forward Initialize, Terminate,
GetSize, Create, CreateEx, Encode, EncodeFloat and Destroy to bundled
libopus with OPUS_APPLICATION_RESTRICTED_CELT and OPUS_APPLICATION_RESTRICTED_SILK
- state pointers are host registry keys; nothing is written into guest memory,
Create without CreateEx binds an internal context id, and a live CreateEx
encoder makes Terminate throw
- validation mirrors the recovered libSceOpusCeltDec order: channels before
sample rate before application, offsets 0/1/2/3/6/7/8/9/13
- Ctl and the priority, timeout, batch and cancel exports still throw and are
documented in libSceOpusCeltEnc.md and libSceOpusSilkEnc.md
- new guest_opus_celt_enc and guest_opus_silk_enc tests require bit-exact
packets against a raw libopus encoder with the same restricted application,
celt-mode or silk-only TOC values, an alternating sine decoded through
opus_decode, and the negative error paths
Resolve a FreeBSD/ELF tls_index {module, offset} the way the relinker's
DTPMOD64 values are laid out: on Windows through the PE _tls_index the
module word points at and the thread's ThreadLocalStoragePointer, on
Linux through glibc's __tls_get_addr.
A string created from a text source in the default horizontal form (0x10)
reported 0x10. TEKKEN: DARK RESURRECTION (PPSA31371) passes the reported form
to sceFontCreateWritingLine, which only accepts 0x11 and 0x12, so the call
failed and the layout width was 0.
On firmware 13.42 sceFontCreateString decides the direction for a default-form
source and sceFontStringGetWritingForm returns the stored form. The string
gets 0x12 when its first strong character is left to right, 0x11 when it is
right to left, and 0x12 when it has none. Left-to-right and right-to-left marks
count as strong, embeddings and overrides do not, and text between an isolate
initiator and its PDI is skipped. Explicit 0x11 and 0x12 sources keep their
form.
The test follows the table reported on the pull request. Which characters are
strong is decided by Unicode block ranges here, not by the full bidi class
tables.
scePthreadMutexTimedlock on a mutex the caller holds, and
scePthreadRwlockTimedrdlock and scePthreadRwlockTimedwrlock on a rwlock
it holds for writing, returned EDEADLK at once. The console returns
ETIMEDOUT, as the prosper console oracle measured. They now sleep until
the timeout and return ETIMEDOUT, as FreeBSD libthr does. The POSIX
timed locks call these and change with them.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
sceUsbdGetDevice, sceUsbdGetDeviceSpeed, sceUsbdGetMaxPacketSize,
sceUsbdGetMaxIsoPacketSize, sceUsbdOpenDeviceWithVidPid,
sceUsbdSetInterfaceAltSetting, sceUsbdClearHalt and
sceUsbdDetachKernelDriver follow FreeBSD 11.4 libusb10.c over the host
libusb. The packet sizes and the alternate setting checks are done as
FreeBSD does them, so the library records which interfaces are claimed,
and a device stays known while a handle to it is open.
Co-Authored-By: Claude Opus 5.5 <[email protected]>