Commit Graph
14017 Commits
Author SHA1 Message Date
alfalfa-starandClaude Opus 5.5 98ed835123 feat(agc): run COND_INDIRECT_BUFFER branches whose comparison always passes
PPSA14632 (Unreal Engine) writes sceAgcCbBranch(mode 1, compare
function 0, mask 0, reference 0) with a then buffer and a null else
buffer of 0 dwords. It leaves the compare address uninitialised, so it
is sometimes only 4-byte aligned. The writer rejected the null else
buffer and the misaligned compare address, and the driver accepted
opcode 0x3f only as the 4-dword INDIRECT_BUFFER, so the 14-dword branch
would have failed at submission.

sceAgcCbBranch no longer checks the compare address of an always-pass
branch, which reads nothing, or the address of a buffer of 0 dwords.
The driver runs the first buffer of an always-pass COND_INDIRECT_BUFFER
in modes 1 and 2 (if-then and if-then-else) in place of the packet. A
comparison, a predicated branch and other modes throw.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 16:12:31 +02:00
Claude 8d7ff94689 feat(libSceKeyboard): translate the 106-key arrangement in sceKeyboardGetKey2Char
The 106-key (Japanese) arrangement threw. Its alphanumeric layer now
follows the JIS layout of the HID usages: the symbol keys right of the
digits and letters, the Ro key (0x87) and the Yen key (0x89). With the
Kana LED set it still throws, as the kana the console returns are
unknown.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 14:02:11 +00:00
MerijnandClaude Opus 5.5 3cd2ff9140 fix(libkernel): take a redirected delivery from rsp and the live registers
A thread suspended inside a system call returns through sysret, which
overwrites rcx and r11, so the delivery address passed in rcx was
garbage when the redirected thread resumed. PPSA12544 crashed that way
on its SaveDataProcessQueue thread, blocked in a host wait when Unity's
GC raised SIGUSR1. The redirected rip is now an entry stub that takes
the delivery from its fixed place above rsp. It also stores the live
general registers into the delivery's context first: the snapshot taken
while the thread was in the system call still holds the call number in
rax instead of its result, which the restore would have handed back to
the wait.

The guest test raises at a thread blocked on a host mutex in 20 rounds
and expects each delivery once the wait returns; it fails without this
change.

AI-assisted: yes

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 15:41:25 +02:00
alfalfa-starandClaude Opus 5.5 0ec3061a46 fix(recompiler): merge a loop selection where its other arm joins or leaves
A selection inside a loop whose arm either joins the other target or
continues/breaks (`if (a) { if (b) continue; x; }`) got the nearest
common post-dominator as its merge. When the loop exits after the outer
join, that is the outer selection's merge, so both selections shared
it. splitSharedMergeBlocks then inserted a forwarding block in front of
it, recomputed the same merge, and repeated until the budget ran out:
PPSA14632's compute shader 0x1a80ee0000 stopped with "CFG shared merge
splitting exceeded budget: originalBlocks=92 currentBlocks=460".

findSelectionMerge now picks the joined target when the other arm is a
conditional block with the header as its only predecessor, and every
successor of that arm is the joined target or the loop's continue or
merge block. The shader structures with 13 added blocks and no clones
or route variables.

In the result the outer selection header dominates the loop's continue
target, so the test's verifyStructured counted the continue target as a
selection member that branches outside (back to the loop header).
SPIR-V uses structural dominance, where the loop header's edge to its
continue target keeps it out of the selection, so verifyStructured now
skips the continue construct of an enclosing loop. spirv-val accepts
the new test's SPIR-V for both subgroup sizes.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 15:31:45 +02:00
MerijnandClaude Opus 5.5 736ba56d85 fix(avplayer): deliver the frame at a jump while paused
A paused player returned no video at all. Unity's video player prepares
a clip by starting it, pausing, jumping to the start and polling
sceAvPlayerGetVideoDataEx until the frame at the jump arrives, and only
then resumes; PPSA12544 waited there forever on a black screen in its
intro cinematic. While paused, the first frame after a jump is now
delivered (the paused clock rebased to it); other frames are still held
until the player resumes. The guest test pauses, jumps and expects that
one frame and nothing after it.

AI-assisted: yes

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 15:20:51 +02:00
Adrià FranchandClaude 04ed454f75 feat(libSceSystemService): implement Disable/ReenableMusicPlayer
Co-Authored-By: Claude <[email protected]>
2026-10-06 15:16:45 +02:00
Adrià FranchandClaude c7abfa89b2 feat(libSceRazorCpu): implement sceRazorCpuFlushOccurred
Co-Authored-By: Claude <[email protected]>
2026-10-06 15:12:53 +02:00
Adrià FranchandClaude 7389b2581f feat(libc): implement std::_Fiopen
Co-Authored-By: Claude <[email protected]>
2026-10-06 15:09:04 +02:00
Fishybeing 38824ec524 fix(http): count sceHttpParseStatusLine as implemented
Its only NotImplemented_nid_no_patch call guarded the int range limit on the consumed byte count, so tools/progress.py listed the implemented function as missing. Throw std::out_of_range like sceHttpParseResponseHeader does for the same limit.
2026-10-06 14:57:53 +02:00
Fishybeing 5f1c45c223 fix(libkernel): correct the MemoryPool.hpp include guard
The guard tested CORE_LIBS_PRX_LIBKERNEL_... but defined CORE_LIBS_PRX_LINKERNEL_..., so it never took effect and GCC reports -Wheader-guard.
2026-10-06 14:57:51 +02:00
Fishybeing 5a04d3cc9e build(windows): guard NOMINMAX before including windows.h
Four sources defined NOMINMAX unconditionally, which redefines the macro the build already passes and warns on every MinGW build. Use the #ifndef guard the rest of the tree uses.
2026-10-06 14:57:48 +02:00
Adrià FranchandClaude a546bbef93 feat(libc): implement collate<char>::_Getcat
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:53:47 +02:00
Adrià FranchandClaude 99260427f4 feat(libc): support %n in wide formatting
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:45:44 +02:00
Celegans12 5e18e84f33 feat(ajm): implement sceAjmBatchJobControl
sceAjmBatchJobControl threw. It now appends a control job that keeps
the sideband input pointer and runs at sceAjmBatchStart: RESET (bit 13)
clears the context as sceAjmBatchJobClearContext does, INITIALIZE
(bit 14) initializes the codec, and SIDEBAND_GAPLESS_DECODE (bit 45)
overwrites the gapless total and skip counts, in this order.

The sideband input holds the gapless decode first, then the codec's
initialize parameters: 8 bytes for ATRAC9, 12 for Opus, none for MP3.
The output is the 8-byte result. Other flags, INITIALIZE for other
codecs, and other sizes throw. SIDEBAND_GAPLESS_DECODE without RESET
throws too: RPCSX and shadPS4 keep zero counts there. The bits and the
order follow shadPS4 (PS4), the overwrite with RESET follows RPCSX, and
the sizes follow the one title seen.
2026-10-06 14:45:10 +02:00
alfalfa-starandClaude Opus 5.5 b6176624aa fix(pad): return INVALID_HANDLE from scePadReadState for an unknown handle
PPSA14632 calls scePadReadState (eboot 0x4593a8) for the open pad and
then for a second pad slot it never opened, whose handle is 0. The
title skips only negative handles and ignores the result, but
scePadReadState threw for any handle other than the open one. It now
returns PAD_ERROR_INVALID_HANDLE (0x80920003), as the other pad
functions do and as shadPS4's scePadRead does for an unknown handle;
scePadRead passes it on.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 14:43:00 +02:00
Adrià FranchandClaude 5784515e13 fix(libs): use the referenced NGS2 handle and session signaling argument error codes
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:39:02 +02:00
alfalfa-starandClaude Opus 5.5 70864694d3 fix(audioout): accept a 3D latency of 1 in sceAudioOut2Set3DLatency
PPSA14632 calls sceAudioOut2Set3DLatency(0xFF, 1) during its audio
setup (eboot 0x5613e2c) and fails the setup on a nonzero return. Only
latency 2 from PPSA26344 was accepted, so the call threw. Latency 1 and
2 are now accepted for the system user; 0, 3 and other users still
throw.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 14:36:20 +02:00
Adrià FranchandClaude 109f120595 feat(kernel): apply the memory type in sceKernelMtypeprotect
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:32:47 +02:00
Adrià FranchandClaude ca6557aed1 feat(kernel): reject invalid sceKernelBatchMap2 entries with EINVAL
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:27:48 +02:00
Adrià FranchandClaude fe557fb0e2 feat(kernel): lazily initialize the adaptive static mutex initializer
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:23:25 +02:00
Adrià FranchandClaude 1311e6e455 feat(kernel): support getrusage RUSAGE_THREAD on Linux
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:19:40 +02:00
Adrià FranchandClaude 263cb6626c feat(jpegenc): honor the encode restart interval
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:16:07 +02:00
Adrià FranchandClaude 803f1b0e71 feat(videodec2): implement sceVideodec2GetAvcPictureInfo
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:11:24 +02:00
Adrià FranchandClaude 232719f9f8 feat(libs): implement sceWebBrowserDialogGetStatus
Co-Authored-By: Claude <[email protected]>
2026-10-06 14:06:52 +02:00
Yossi Yadgar e998b2dd66 feat(agc): choose the Vulkan device by name with ANYPS5_GPU 2026-10-06 14:55:12 +03:00
Adrià FranchandClaude f617b40a45 feat(tools): add a hardware oracle for RDNA instruction semantics
Co-Authored-By: Claude <[email protected]>
2026-10-06 13:54:28 +02:00
Slick Daddy d2d96ad5cc style(cmake): restore indent on test foreach in BUILD_TESTING block 2026-10-06 14:45:28 +03:00
Aryan RawatandClaude Opus 5.5 8ef51df303 feat(playerinvitationdialog): implement scePlayerInvitationDialogGetResult
scePlayerInvitationDialogGetResult makes the common dialog checks of
sceWebBrowserDialogGetResult: NOT_INITIALIZED before the dialog is
initialized, ARG_NULL for a null result and NOT_FINISHED until the
dialog finishes. The dialog shows no UI and sends no invitation, so the
finished dialog reports USER_CANCELED with error code 0. The 40-byte
result layout (error code, result, 32 reserved bytes) is taken from
SharpProspero.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 11:42:02 +00:00
ahirm-finarth 29888493b5 fix(shader): preserve pixel export mappings in replay 2026-10-06 16:41:45 +05:30
LeandroLP23andClaude Opus 5.5 6b69c70a02 feat(font): implement sceFontWritingLineGetOrderingSpace
Report the spacing the writing line applies: the modelled line places
each run at the sum of the previous advances, so every space is 0.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-06 12:31:30 +02:00
ebosido444-ai e14184b915 feat(libc): implement std_execute_once
The plain-named twin of std::_Execute_once delegates to that symbol and inherits its call_once semantics; the name-equivalence assumption is recorded in TechnicalDebt. Registers guest_std_execute_once_tests.
2026-10-06 13:11:41 +03:00
Adrià FranchandClaude 7db0a80b19 libSceHttp: keep sceHttpUriSweepPath inside srcSize, cite shadPS4
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:52:27 +02:00
Adrià FranchandClaude 9bcd676774 libSceNet: link libc into the guest net test for MinGW exception handling
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:51:42 +02:00
Adrià FranchandClaude 92d79996c7 libSceNet: implement sceNetSendmsg and sceNetRecvmsg
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:51:42 +02:00
Adrià FranchandClaude 16285b473f libSceHttp: classify the relative reference without host validation in sceHttpUriMerge
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:51:34 +02:00
Adrià FranchandClaude 0207e28f88 feat(libSceHttp): implement sceHttpUriMerge
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:51:34 +02:00
Adrià FranchandClaude e6d0c9c9b0 feat(libSceHttp): implement sceHttpUriSweepPath
Co-Authored-By: Claude <[email protected]>
2026-10-06 11:51:26 +02:00
Mehran 39e7a36221 perf(agc): query unit shadows without copying the overlap list 2026-10-06 12:49:15 +03:00
Mehran d37366a5d8 perf(agc): reset the PM4 queue state without a 48 KiB stack temporary 2026-10-06 12:49:13 +03:00
ebosido444-ai 999da59a7c fix(tools): read multi-line Depends on lists in pr_overlap 2026-10-06 12:45:44 +03:00
Merijn f98d73abc0 Merge branch 'main' of https://github.com/boykopovar/AnyPS5 into fix/savedata-repeated-initialize
# Conflicts:
#	docs/dev/TechnicalDebt.md
2026-10-06 11:40:46 +02:00
Dean 5895ea721a Merge pull request #814 from adriadam10/feat/kernel-aio-batch
feat(libkernel): Aio batch submit, wait, cancel and delete
2026-10-06 22:34:58 +13:00
Dean 77b96c6c00 Merge pull request #813 from adriadam10/feat/http-offline-noops
feat(libSceHttp): add sceHttpSetResponseHeaderMaxSize, sceHttpRedirectCacheFlush, sceHttpsUnloadCert
2026-10-06 22:34:16 +13:00
Dean 2f7c9e5914 Merge pull request #812 from adriadam10/feat/ngs2-system-state
feat(ngs2): system sample rate, user data and lock
2026-10-06 22:33:34 +13:00
Dean 5d6ee4669a Merge pull request #808 from adriadam10/feat/kernel-get-direct-memory-type
feat(libkernel): implement sceKernelGetDirectMemoryType
2026-10-06 22:32:51 +13:00
Dean 88ca57d7af Merge pull request #806 from adriadam10/feat/kernel-vectored-io
feat(libkernel): sceKernelReadv, Writev, Preadv and Pwritev
2026-10-06 22:32:09 +13:00
Dean 1e6b1cb7eb Merge pull request #804 from adriadam10/feat/rtc-format-rfc2822
feat(rtc): implement sceRtcFormatRFC2822 and the RFC 2822/3339 local-time formatters
2026-10-06 22:31:59 +13:00
Dean dd9b95790e Merge pull request #782 from adriadam10/feat/rtc-parse-datetime-rfc2822
feat(rtc): parse RFC 2822 and asctime strings in sceRtcParseDateTime
2026-10-06 22:31:17 +13:00
Dean 3365f98d1b Merge pull request #781 from adriadam10/feat/ngs2-custom-submixer-userfx
feat(ngs2): custom submixer rack with UserFx2 modules
2026-10-06 22:30:35 +13:00
Dean 25f76f27d9 Merge pull request #800 from Celegans12/docs/narrow-subgroup-exec
docs: record how EXEC written as a value is read on narrow subgroups
2026-10-06 22:29:53 +13:00