u_strCompareIter compares two UCharIterator texts in code unit or code
point order as ICU 78.1's ustring.cpp does, driving the guest iterators
through their move, next, current and previous callbacks in ICU's order.
u_getUnicodeVersion reports Unicode 17.0, the data version of ICU 78.1.
A null callback that ICU would call throws std::invalid_argument, and the
final difference wraps instead of overflowing. The debt entry records
that neither export was compared with a console.
The constructors, destructors, AddRef and Release of sce::np::RefObject
follow libSceNpCommon.sprx of firmware 13.60, checked against 7,200
firmware results.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Queue 0's idle store wrote every pending storage image back to guest memory
in one pass once the queues had been idle for 50 ms. In a title's movies
that is about 15 upscaled 3840x2176 targets (~0.5 GB) per pass, and the
title's next flip waited ~0.6 s behind it, about every 3 s.
The idle store now writes back 4 MiB at a time, in the block units the
images already track, and stops as soon as queue 0 has queued work or
another queue is running; the rest stays pending for the next idle period.
The quiet period is unchanged.
Implement scePlayGoRequestOptionalChunk, scePlayGoGetRequiredDisc,
scePlayGoRequestNextChunk and scePlayGoSetInstallSpeed2 with the argument
checks and error codes that pgo_stub and rps5e agree on: a null option or
output is BAD_POINTER, an optional chunk type above 2 is BAD_OPTIONAL_TYPE,
scenario bits from 5 up are BAD_SCENARIO_CONFIGURATION, a non-null reserved
pointer or a nonzero reserved argument is INVALID_ARGUMENT, a speed above
FULL is BAD_SPEED and SUSPENDED is EPERM. Every chunk is installed, so the
required disc is 0 and no next chunk is pending.
scePlayGoSetInstallSpeed2 takes no handle and returns NOT_INITIALIZED before
scePlayGoInitialize or after scePlayGoTerminate, so the library now records
whether it is initialized.
Remove the debt entry that listed three of these exports as unknown and
throwing, and record the initialization checks the sources make that are
not applied, and that PrefetchOptionalChunk keeps its no-op.
Thirteen exports threw. In firmware 13.42 they all give fixed answers
while the profiler is not initialized, and only
sceRazorCpuInitializeInternal, which still throws, initializes it: the
fiber, workload and GPU marker sync calls return 0, the data tag storage
size is 0, the capture calls return 0x80580000, the marker callback
setters only store the callback, and sceRazorCpuInitializeGpuMarkerContext
accepts a context whose first byte is 1 and returns a plain 22 otherwise.
Co-Authored-By: Claude Opus 5.5 <[email protected]>