Skip to content

prosper v0.1.0

Choose a tag to compare

@github-actions github-actions released this 14 Jul 20:19
93d4dae

What's Changed

  • agc: break the graphics boot blocker — real sceAgcCreateShader + shader-derived pipeline state by @mattias800 in #1
  • agc: first real command buffer executes — SubmitDcb → CommandProcessor by @mattias800 in #2
  • diag: PROSPER_PEEK fault-time field dump + pin the next frontier by @mattias800 in #3
  • test: lock in the AGC submit milestone (Dcb → SubmitDcb → GpuState) by @mattias800 in #4
  • Fix AGC/SPIR-V review findings by @mattias800 in #5
  • diag(RE): 0xba6e08 is a Unity pipeline object — resource-creation premise needs revisiting by @mattias800 in #6
  • Improve MinGW Windows portability by @mattias800 in #7
  • diag(RE): bounded trace answer — 0xba6e08 pipeline object is Unity-internal (no HLE hook) by @mattias800 in #8
  • gpu: resolve_pipeline_state — RenderState (RDNA2) -> Vulkan-ready pipeline state by @mattias800 in #10
  • fix: reject graphics cmpx without export predication by @mattias800 in #12
  • Add Linux and Windows CI by @mattias800 in #9
  • videoout: real 1080p60 display + swapchain scaffolding (+ hypothesis: not the [+0x140] gate) by @mattias800 in #11
  • RE: [+0x140] companion writer chain → pipeline-reflection predicate (root cause narrowed) by @mattias800 in #13
  • RE probe: shader semantics surfaced correctly — mis-relocation bet rejected (raw blob evidence) by @mattias800 in #14
  • diag: trace shader user-data bindings by @mattias800 in #15
  • diag: skip-null-companion probe — systemic (residency pass never ran), stop per-object writer hunt by @mattias800 in #16
  • recompiler: reject unsafe forward scalar branches by @mattias800 in #17
  • diag: null-chain probe — GfxDevice subsystem systematically dead (option b), not a narrow gap by @mattias800 in #18
  • videoout: preserve submitted flip and buffer state by @mattias800 in #19
  • diag: preserve companion watchpoint result by @mattias800 in #21
  • videoout: flip→present path over the display-buffer registry (headless scanout) by @mattias800 in #22
  • hle: reduce startup stubs — UserService getters + libkernel no-ops (audit) by @mattias800 in #23
  • videoout: present receiving side — present_write_frame closes render→present→readback by @mattias800 in #24
  • gpu: build_shader_resources — V# decode + constant-buffer table (resource-binding stage 1) by @mattias800 in #25
  • gpu: build_shader_resources stage 2 — vertex buffers (DIRECT sgpr_base provenance) by @mattias800 in #26
  • Audio support: headless sceAudioOut HLE + optional SDL3 frontend by @mattias800 in #28
  • feat(pad): real game-controller input (libScePad) via Linux evdev by @mattias800 in #27
  • feat(gpu): real game frames — The Messenger's title renders with the game's own shaders by @mattias800 in #33
  • Unblock cutscene-scene loading: ParamGetString + %fs stack-smash fixes (+ map the remaining GC-race wall) by @mattias800 in #35
  • fix(gpu): loading screen rendered upside down — honor the guest viewport (PA_CL_VPORT) by @mattias800 in #38
  • fix(hle): full pread/read (asset-stream corruption) + deepened cutscene-wall findings by @mattias800 in #39
  • Fix %fs stack-smash in fault_handler + pin the cutscene wall to incremental-GC live-object collection by @mattias800 in #36
  • diag: cutscene blocker pinned to IL2CPP GC "Unexpected state" abort (findings + tooling) by @mattias800 in #37
  • feat(gpu): multi-draw executor + backend (opt-in), on the per-draw snapshot foundation by @mattias800 in #34
  • Fix the level1 (cutscene) load crash — GC allocation lock never locked by @mattias800 in #42
  • diag: PROSPER_GUEST_ENV (guest GC env knobs) + GC-collection-is-not-the-sole-blocker finding by @mattias800 in #40
  • diag(cutscene): pinned to a null System.Diagnostics.Stopwatch in Unity's async-load WorkerThread by @mattias800 in #43
  • fix(gc-suspend): guest-%fs cancellation-point landmine + post-#43 cutscene findings by @mattias800 in #44
  • docs(cutscene): tested-and-eliminated hypotheses for the WorkerThread.+0x40 Stopwatch crash by @mattias800 in #45
  • diag(cutscene): crash → streams 80% of the cutscene; final blocker = block-966 deser deadlock by @mattias800 in #46
  • feat(ue4): PPSA17942 boots deep into UE4 engine init — SELF variant, real direct-memory model, sceKernelBatchMap, boot API surface by @mattias800 in #47
  • diag(cutscene): block-966 deadlock = type-tree-less il2cpp MonoBehaviour deser (InventoryItemDefinition) by @mattias800 in #48
  • feat(ue4): allocator pool-view aliasing SOLVED + fault-handler raw-write fix + libSceAmpr trio — UE error handling now runs by @mattias800 in #49
  • diag(cutscene): refine the block-966 wall to a deterministic 3-object deser loop by @mattias800 in #50
  • diag(cutscene): map both remaining blockers — uncaptured color render-state + variable deser/threading by @mattias800 in #51
  • fix(diag): bound PREADLOG/DEEPTRACE stack walk to the thread stack (was faulting worker threads) by @mattias800 in #52
  • fix(gpu): render the color state — absent CB_TARGET_MASK defaults to write-all (fixes the blue screen) by @mattias800 in #53
  • Load PSN.prx so the async worker pool runs — cutscene load/threading wall solved by @mattias800 in #54
  • fix(gpu/recompiler): handle forward s_cbranch_scc0 early-out — unblocks in-game scene shaders by @mattias800 in #55
  • feat(ue4): APR/IoStore read pipeline — engine reads and parses its asset TOC by @mattias800 in #57
  • diag(cutscene): SCENE REACHED (level0-5 boot-through); final blocker = scene-content render-target by @mattias800 in #56
  • fix(gpu/recompiler): recompile the in-game scene shaders (alpha-test discard PS + NGG vccnz VS + v_dot2c) by @mattias800 in #58
  • fix(render): bound texture/buffer copies to committed backing — render no longer crashes reaching the scene by @mattias800 in #59
  • fix(gpu/exec): render the mesh's real vertex count (draws were a degenerate sliver) by @mattias800 in #60
  • Full-history bug hunt: 18 verified fixes from a 405-commit review by @mattias800 in #61
  • docs(claude): GitHub-issues workflow — file found-but-unfixed bugs immediately by @mattias800 in #74
  • docs: cutscene render frontier — status, traced root cause, next step by @mattias800 in #73
  • fix(gpu): RELEASE_MEM stops guess-writing on unknown data_sel; WaitRegMem carries and verifies its real wait parameters by @mattias800 in #75
  • fix(hle/apr): safe size-keyed APR reads — refuse ambiguous/chunk reads loudly by @mattias800 in #76
  • fix(hle/kernel): purge __tls_get_addr DTV on thread exit (stale TLS on recycled ids + leak) by @mattias800 in #77
  • fix(gpu): decode R_DRAW_INDEX so sceAgcDcbDrawIndex draws reach the draw list by @mattias800 in #80
  • fix(hle/equeue): shared-ptr lifetime, real timeout semantics, kqueue coalescing, cancellable timers by @mattias800 in #81
  • fix(hle/videoout): flip-status race, time-based vblank counter, loud GetOutputStatus gap by @mattias800 in #84
  • feat(ue4): IoStore bring-up — pak containers mount, GEngineLoop.PreInit passes, engine reaches RHI init by @mattias800 in #78
  • docs(claude): issue-claim protocol for concurrent agents; Kyty reference calibration by @mattias800 in #85
  • fix(hle/kernel): scePthreadOnce serializes per control (global lock could cross-deadlock) by @mattias800 in #86
  • fix(gpu): decode the T#'s real Gen5 IMG_FMT — texture format/size no longer hardcoded RGBA8 by @mattias800 in #87
  • Real indexed draws in the executor; retire the quad-fan heuristic (Fixes #64) by @mattias800 in #90
  • fix(gpu/exec): render The Messenger's title screen + intro cutscene (per-draw + viewport-scale) by @mattias800 in #93
  • fix(gpu/recompiler): resolve SRSRC for untyped MUBUF ops — never silently binding 2 by @mattias800 in #94
  • fix(hle/apr): APR rsp-capture must not be __thread — static-TLS growth crashed the minimal boot by @mattias800 in #95
  • fix(hle/time): anchor all wall-clock sources to the host real-time clock by @mattias800 in #96
  • docs(claude): area lanes so parallel workstreams don't collide by @mattias800 in #98
  • fix(gpu/exec): scale the guest viewport to the render framebuffer (reduced-res showed only bottom-left crop) by @mattias800 in #103
  • fix(hle/kernel): EventFlag/Sema delete no longer frees the object under blocked waiters (UAF) by @mattias800 in #105
  • fix(hle/mem): sceKernelAvailableDirectMemorySize reports the real largest free block by @mattias800 in #100
  • fix(ue4): SetBuffer no longer maps over live guest heap — boots through RHI/Engine startup (#88) by @mattias800 in #106
  • diag(boot_trace): PROSPER_DUMP_RAWTILE dumps exact padded tiled bytes for offline de-swizzle RE by @mattias800 in #109
  • fix(hle/mem): sceKernelAllocateDirectMemory honors searchStart/searchEnd by @mattias800 in #110
  • diag(gpu/exec): PROSPER_RTLOG — render-target vs sampled-texture correlation by @mattias800 in #111
  • fix(ue4): map-flavor SetBuffer mirror no longer clobbers live heap — boots into online init (#107) by @mattias800 in #114
  • fix(self): va2foff resolves PT_LOAD before DYNAMIC — unblocks PPSA02664 boot (0→1015 imports) by @mattias800 in #116
  • fix(agc): real sceAgcCbNop + sceAgcDcbDmaData appenders — fixes PPSA02664 CreateWorkload crash by @mattias800 in #120
  • fix(hle/libc): printf-family are real variadic functions (%f/stack/%s-past-4th no longer garbage) by @mattias800 in #123
  • fix(recompiler): handle VOP1 v_nop — unblocks PPSA02664 vertex shaders (draws no longer skipped) by @mattias800 in #124
  • fix(loader): resolve mis-based PT_DYNAMIC via containing PT_LOAD — raw-ELF IL2CPP modules parse (PPSA01885 boots through IL2CPP) by @mattias800 in #125
  • docs: prosper-app frontend design (SDL3 window/audio/controllers over the headless core) by @mattias800 in #127
  • feat(gpu): BC1/BC2/BC3 texture decode -> RGBA8 on upload by @mattias800 in #165
  • fix(ue4): deliver async APR read completions — reaches AGC RHI bring-up (#115) by @mattias800 in #166
  • fix(hle): __ctype_get_mb_cur_max returns the MB_CUR_MAX value, not a pointer by @mattias800 in #168
  • fix(recompiler): v_cvt_u32_f32 / v_cvt_i32_f32 saturate like the hardware by @mattias800 in #169
  • fix(host): emulate AMD SSE4a insertq/extrq on Intel hosts — Zen2 guest code runs (PPSA01885 past CreateWorkload) by @mattias800 in #170
  • fix(recompiler): image_sample uses explicit LOD 0 outside the fragment shell by @mattias800 in #171
  • fix(gpu): s_bfe_u64 const-fold sign-extends negative inline constants by @mattias800 in #173
  • feat(frontend): prosper-app — run a PS5 title in a window with audio + controllers (#164) by @mattias800 in #172
  • fix(recompiler): verify a forward branch past s_endpgm is a real early-out before clamping by @mattias800 in #174
  • fix(host): init-fault byte dump survives a wild/null rip and restores page protection by @mattias800 in #176
  • fix(kernel): non-fixed ReserveVirtualRange must search, not echo the hint — fixes MB3 canary corruption (#161) by @mattias800 in #179
  • fix(gpu): map the full CB color-format table in vk_color_format; log unmapped triples once by @mattias800 in #181
  • fix(gpu): enable robustImageAccess at device creation (storage-image OOB contract) by @mattias800 in #182
  • fix(recompiler): apply VOP2 SDWA output modifier (omod/clamp) — unblocks PPSA02664 pixel shaders by @mattias800 in #175
  • fix(hle): honor guest mutex types — Sony/FreeBSD ERRORCHECK default, settype mapped, FreeBSD errnos by @mattias800 in #183
  • fix(recompiler): special ALU operands — track VCC/ttmp scalar scratch, reject unrepresentable reads by @mattias800 in #184
  • fix(hle): sceKernelDlsym honors its module handle via per-module export tables by @mattias800 in #185
  • diag(hle/pad): log scePadOpen/Init for input-init observability by @mattias800 in #195
  • diag(gpu): render-frontier tooling — VS SPIR-V dump, cbuf/pipeline logs, backend isolation switches by @mattias800 in #193
  • fix(gpu): detile derives 4KB-tile geometry from the element size (8/16-bpp support) by @mattias800 in #194
  • fix(hle): guest thread stacks are glibc-owned and reclaimed; attr stacksize honored; registry purged on exit by @mattias800 in #196
  • fix(recompiler): size the LDS array from the shader's real allocation, not a hardcoded 16 KB by @mattias800 in #197
  • feat(frontend): make prosper-app run the game — shared boot_program + live renderer + audio/controllers (#164) by @mattias800 in #192
  • fix(hle): hinted map uses MAP_FIXED_NOREPLACE — stop silently clobbering live mappings by @mattias800 in #198
  • fix(gpu): decode SMEM SOFFSET register + sign-extend the 21-bit immediate by @mattias800 in #199
  • feat(hle/pad): PROSPER_PAD_SCRIPT — timed input for headless menu navigation by @mattias800 in #202
  • diag(host): SSE4A rate probe + SA_ONSTACK fault catcher for mid-load crash triage by @mattias800 in #203
  • fix(agc): EventWrite carries its address and honors the completion write by @mattias800 in #204
  • fix(recompiler): MUBUF idxen+offen applies BOTH VADDR terms (index and byte offset) by @mattias800 in #200
  • fix(recompiler): reject a packed vertex fetch whose element base isn't provably dword-aligned by @mattias800 in #201
  • fix(gpu): GPU EOP timestamp shares the guest TSC clock (RELEASE_MEM data_sel=3) by @mattias800 in #205
  • fix(hle): track the MsgDialog lifecycle — NONE before Open, not spurious FINISHED by @mattias800 in #207
  • fix(recompiler): const-folded vertex fetch uses gl_VertexIndex*stride — real geometry renders (PPSA01885 first in-game frame) by @mattias800 in #206
  • fix(hle): APR completions echo the guest-chosen tag (+ #183 mutex regression) — DOLL reaches first DCBs + flip (#208) by @mattias800 in #209
  • fix(host): fault handler guest-%fs-safe — raw SYS_write + latched env flags (#159) by @mattias800 in #211
  • fix(hle): AGCSHADER dump uses env path + s_endpgm-derived size (#160) by @mattias800 in #212
  • fix(hle): APR id-0 pointer-tag completions are per-request/uncoalesced — DOLL frame loop runs (#210) by @mattias800 in #214
  • fix(loader): DTPMOD64 resolves a cross-module TLS import to the defining module's id by @mattias800 in #215
  • fix(host): guest static-TLS layout uses each module's real PT_TLS p_align by @mattias800 in #216
  • fix(hle): sceKernelLoadStartModule returns ENOENT for a path not in the linked set by @mattias800 in #217
  • diag(agc): surface an unconfirmed GetDataPacketPayloadAddress packet type loudly by @mattias800 in #218
  • fix(recompiler): v_interp_mov reads a flat (provoking-vertex) attribute, not a smooth blend by @mattias800 in #219
  • fix(gpu): keep textures off bindings 2/3 so a texture-first shader can't collide the hardwired cbufs by @mattias800 in #220
  • fix(hle): libSceAudioOut2 null-device backend — stabilizes DOLL frame loop (refs #213, #222) by @mattias800 in #224
  • fix(hle): Windows sceKernelWaitOnAddress honors the guest timeout (mirror the Linux path) by @mattias800 in #223
  • fix(hle): sceKernelWaitOnAddress honors the guest timeout by default; drop the 5 s cap by @mattias800 in #221
  • ci: build the Linux desktop app (prosper-app) with SDL3 + Vulkan by @mattias800 in #225
  • fix(gpu): recompile mask=0xF draws — packed dyn-vfetch alignment + register-offset V# load by @mattias800 in #226
  • fix(agc/hle): four post-load walls — DOLL runs deep, dispatches flow, no OOM (Fixes #222, refs #213/#82) by @mattias800 in #231
  • feat(frontend): keyboard controls for prosper-app by @mattias800 in #230
  • feat(render): render-to-texture via a color-target RGBA cache (opt-in) by @mattias800 in #233
  • fix(hle): deliver every GPU EOP completion (coalesce=false) — unblocks The Messenger's scene activation by @mattias800 in #236
  • fix(render): decode single-channel (R8) sampled textures instead of reading them as RGBA8 by @mattias800 in #237
  • fix(gpu): lower alpha-test/clip() discard branches so cutout+text draws recompile by @mattias800 in #239
  • docs: point agents at the PS5 3.20 firmware library NID↔name database by @mattias800 in #243
  • tools(il2cpp): PS5 PRX->ELF flattener for IL2CPP symbolication by @mattias800 in #242
  • fix(agc): implement w1KFAHVqpaU final-buffer submit variant + guest-thread-names (refs #232) by @mattias800 in #244
  • test(snapshot): local golden-image rendering regression guard + AGENTS.md docs by @mattias800 in #227
  • feat(hle/pad): implement the 4 remaining libScePad imports (full Messenger coverage) by @mattias800 in #245
  • feat(tools): screenshot — capture a PNG every N rendered frames from a game run by @mattias800 in #246
  • diag(gpu): PROSPER_DRAWDIAG + DUMP_ATLAS-by-address for the caption investigation by @mattias800 in #247
  • tools(il2cpp): resolve.py address→C# symbolicator + complete the setup recipe by @mattias800 in #249
  • diag(host): PROSPER_FAULT_SKIP — step past a specific crash for bring-up by @mattias800 in #250
  • fix(gpu): correct GFX10 SW_4KB_S within-tile element order — kills the cross-game texture dither by @mattias800 in #251
  • fix(host): preload PSNCore.prx/PSNCommon.prx so the Unity PSN plugin init resolves by @mattias800 in #252
  • feat(tools): screenshot --seconds — capture on a wall-clock interval by @mattias800 in #253
  • fix(hle/agc): DOLL async-loading stability — #241 free-list + EOP/APR completion ordering (Fixes #241, refs #232) by @mattias800 in #254
  • fix(hle): sceUserServiceGetGamePresets must return success — restores ALL gamepad input (Fixes #234) by @mattias800 in #255
  • fix(gpu): 8-bpp SW_4KB_S de-swizzle — R8 caption-font atlas was scrambled (refs #102) by @mattias800 in #256
  • fix(hle): GetDisplaySafeAreaInfo fills ratio=1.0 + #232 reframe (GameThread ticks; PlayGo/SaveData is the gate) by @mattias800 in #258
  • feat(hle): DOLL scePlayGo/sceSaveData/sceNpTrophy2/sceShare service layer — save flow completes (refs #232) by @mattias800 in #259
  • fix(gpu): honor the game's S# sampler (filter + wrap) instead of a hardcoded LINEAR/clamp by @mattias800 in #260
  • fix(gpu): vertex fetch spans the indexed range, not the per-glyph V# (refs #257) by @mattias800 in #265
  • fix(gpu): implement the stencil test — masks now clip (title shimmer, UI) (Fixes #264) by @mattias800 in #266
  • fix(gpu): decode + apply T# DST_SEL channel swizzle (Fixes #261) by @mattias800 in #268
  • feat(render): PROSPER_RTT_PERTARGET — per-color-target render + RTT caching by @mattias800 in #269
  • feat(render): PROSPER_DUMP_CONTENT — capture intermittent content frames by @mattias800 in #267
  • fix(gpu): implement DOLL's Gen5 indexed-draw builders — first UE4 scene geometry renders (Fixes #232) by @mattias800 in #271
  • fix(gpu): carry T# sRGB flag + document the gamma-space finding (refs #263) by @mattias800 in #272
  • fix(gpu): decode remaining S# sampler fields; apply border color + LOD (Fixes #262) by @mattias800 in #274
  • fix(gpu): resolve EUD-resident shader descriptors — The Messenger's text is now VISIBLE (Fixes #257) by @mattias800 in #276
  • feat(gpu): recompile DOLL's failing shaders — 995→85 skipped draws (−91%) (refs #273) by @mattias800 in #277
  • fix(hle): default system language to US English (configurable via PROSPER_SYS_LANG) by @mattias800 in #280
  • fix(hle): serialize AGC submits — DOLL survives scene-begin (host GpuState race) (Fixes #278) by @mattias800 in #281
  • diag: log SIGILL faulting bytes + guest canary on __stack_chk_fail (refs #283) by @mattias800 in #285
  • fix(pad): ScePadControllerInformation is 28 bytes, not 32 — stops a guest stack overflow (Fixes #283) by @mattias800 in #287
  • feat(gpu): GFX10 SW_64KB_S / SW_64KB_R_X texture de-swizzle (Fixes #288) by @mattias800 in #291
  • fix(gpu): BC4/BC5/BC7 texture decode + real-bpt fp16 upload (Fixes #290) by @mattias800 in #293
  • fix(gpu): map UE4 scene-color fmt 36 (R11G11B10F) + unify RTT gate + RT-sample write-back (refs #294) by @mattias800 in #295
  • feat(gpu): flip-anchored present + RT persistence + UE4 SRT descriptor resolution + gather4_lz_o (refs #294) by @mattias800 in #296
  • feat(gpu): DOLL recompiler frontier — CF structurizer (if/else, execz, waterfalls), DPP derivatives, VOP3P/f16, int attrs (refs #273) by @mattias800 in #297
  • feat(input-replay): record/replay routes + deterministic checkpoints (#302, all 4 steps) by @mattias800 in #301
  • fix(gpu): fold MUBUF SOFFSET/inst-offset into dynamic vertex-fetch V# bases — real Slate UI vertex attributes (refs #273) by @mattias800 in #303
  • diag(ue4): DOLL loading-progression verdict (STALLED at front-end patch/entitlement gate) + reusable progress diagnostics (refs #306) by @mattias800 in #307
  • test(tile): lock 16-byte-element SW_64KB_S detile (block-unaligned BC7) — DOLL banner tiling proven correct (refs #304) by @mattias800 in #308
  • diag(render): black-scene probes (TEXCOMMIT/ALPHA1/CBLOG) — refs #300 by @mattias800 in #311
  • fix(hle): honest offline signed-out console — DOLL advances past the loading screen to an interactive title/menu (Fixes #306) by @mattias800 in #313
  • fix(gpu): use the game's real fast-clear colour, not hardcoded debug blue (#309) by @mattias800 in #314
  • fix(gpu): auto-detect DOLL's unannounced 32-bit index buffers — real UMG/Slate quads (Fixes #304) by @mattias800 in #318
  • fix(gpu): apply the S# anisotropy sampler field (#275) by @mattias800 in #317
  • test(gpu): Messenger VS/PS recompile guard against silent re-blue (#228) by @mattias800 in #321
  • perf(render): reuse one Vulkan device across render_draws_rgba calls by @mattias800 in #322
  • fix(gpu): stencil REPLACE writes STENCILOPVAL, not STENCILTESTVAL by @mattias800 in #284
  • fix(hle): implement libkernel/posix signal + time-conversion stubs (#190) by @mattias800 in #323
  • feat(hle): implement libSceAvPlayer lifecycle (valid handle + IsActive done) by @mattias800 in #326
  • feat(gpu): sceAgcDcbJump + SetPredication/SetPacketPredication — execute DOLL's predicated backbuffer-composite segments (refs #319) by @mattias800 in #327
  • fix(hle): stop a no-op shadowing scePthreadGetprio/Getaffinity (#330) by @mattias800 in #331
  • docs: tell agents to work in their own git worktree (shared main checkout) by @mattias800 in #332
  • fix(hle): honest sceKernelAio* + pipe-drain completion-write model + #312 attribution tooling (refs #312) by @mattias800 in #328
  • fix(gpu): recompile 2D_ARRAY image_sample instead of rejecting the shader (refs #325) by @mattias800 in #336
  • docs: on a Windows host, run git through PowerShell (not WSL) by @mattias800 in #334
  • test(hle): lock the fill-contract of the boot-critical service getters by @mattias800 in #335
  • test(hle): guard against the register_fn double-registration shadow class (#330) by @mattias800 in #333
  • fix(gpu): execute AGC DMA_DATA immediate fills — the #312 consumed-marker label-init protocol leg (refs #312) by @mattias800 in #337
  • feat(hle): implement libSceImeDialog + libSceSaveData memory API (#191) by @mattias800 in #340
  • fix(hle): memory HLE returns real SCE error codes, not raw errno 0x16 by @mattias800 in #341
  • feat(gpu): divergent execz-exit loops, BC6H, cube sampling + per-pc descriptor provenance — all 4 title-composite PSes recompile (refs #273) by @mattias800 in #346
  • feat(hle): implement libSceIme keyboard API (#186) by @mattias800 in #345
  • feat(hle): implement libSceAjm decode lifecycle (headless) (#187) by @mattias800 in #348
  • fix(hle): guard g_tls_mods/g_unwind_mods against realloc during runtime module load (Fixes #344) by @mattias800 in #350
  • feat(hle): PlatformUi backend hook — frontend can service ImeDialog (#347) by @mattias800 in #349
  • feat(hle): route MsgDialog + ErrorDialog through the PlatformUi hook (#347) by @mattias800 in #351
  • feat(app): SDL3 PlatformUi — real message boxes for MsgDialog/ErrorDialog (#347) by @mattias800 in #353
  • fix(hle): correct sceAvPlayerInitEx ABI (error-code + out-param handle) by @mattias800 in #355
  • fix(hle): ImeDialog status uses its own enum (Finished=2), not common-dialog 3 by @mattias800 in #356
  • feat(hle): Ime keyboard presence via the PlatformUi hook (#347) by @mattias800 in #359
  • feat(app): ImeDialog text entry — real SDL text field via a main-thread pump (#347) by @mattias800 in #357
  • diag(render): PROSPER_RENDER_LAST bounds the live-render window by @mattias800 in #360
  • feat(gpu): WAIT_REG_MEM barrier model (per-address ordering + EOP visibility contract), opt-in — and the measured demolition of the #312 wait-ordering hypothesis (refs #312) by @mattias800 in #361
  • fix(hle/mem): prot 0 maps to PROT_NONE, not a default RW (#342) by @mattias800 in #362
  • diag(gpu): generalized per-draw kill-isolation harness (PROSPER_DRAW_ISO / PROSPER_ISO_AT) by @mattias800 in #363
  • fix(loader): mask the SELF data-segment key to 12 bits (#339) by @mattias800 in #364
  • fix(loader): make an unhandled TLS relocation loud, not silent (#338) by @mattias800 in #365
  • fix(hle/pad): DeviceClassGetExtendedInformation writes 0x14, not 0x20 (stack overrun) by @mattias800 in #402
  • fix(hle/service): sceSystemServiceReceiveEvent returns NO_EVENT, not garbage-success by @mattias800 in #403
  • fix(gpu): live renderer uses the game's fast-clear colour, not debug blue (#367) by @mattias800 in #404
  • fix(hle/libc): register missing conversion/sort/tokenize/scan thunks by @mattias800 in #405
  • fix(hle/file): implement sceKernelFtruncate (was fake-success -> corrupt saves) by @mattias800 in #407
  • fix(gpu): back-face stencil honours DB_DEPTH_CONTROL.BACKFACE_ENABLE (#377) by @mattias800 in #406
  • fix(hle/np): register sceNpGetNpId / sceNpGetAccountId as signed-out (complete #306) by @mattias800 in #408
  • fix(gpu): propagate decoded S# sampler + T# swizzle to live textures (#369) by @mattias800 in #409
  • fix(hle/file): implement sceKernelRename (was fake-success -> lost atomic saves) by @mattias800 in #410
  • fix(gpu): map RectList/QuadList topologies; log unmapped prim types (#384) by @mattias800 in #411
  • fix(hle/time): sceKernelSleep returns seconds-remaining (0), not the input by @mattias800 in #412
  • fix(hle/kernel): implement scePthreadMutexTimedlock / CondTimedwait (were faking success) by @mattias800 in #414
  • fix(gpu): skip zero-vertex-count draws instead of fabricating geometry (#400) by @mattias800 in #413
  • fix(hle/time): periodic AddTimerEvent + distinct HR-timer filter (-15) by @mattias800 in #415
  • fix(hle/appcontent): add-content enumeration returns no-DLC truth, not garbage count by @mattias800 in #416
  • fix(gpu): correct SW_4KB_S within-tile order for 2/8/16-byte elements (#379) by @mattias800 in #417
  • fix(hle/mem): implement sceKernelAvailableFlexibleMemorySize (was uninitialized budget) by @mattias800 in #418
  • fix(hle/file): loop sceKernelWrite/Pwrite to the full-write contract by @mattias800 in #419
  • fix(hle/service): ParamGetInt ENTER_BUTTON_ASSIGN defaults to Cross, not Circle by @mattias800 in #421
  • fix(gpu): sceAgcCbNop(dcb,1) must not underflow the PM4 length field (#401) by @mattias800 in #420
  • fix(gpu): extract + resolve separate alpha blend (CB_BLEND0_CONTROL) (#381) by @mattias800 in #422
  • fix(recompiler): s_max_i32/s_max_u32 SCC is >= (not >) on ties (#397) by @mattias800 in #423
  • fix(gpu): clear depth to guest DB_DEPTH_CLEAR / compare-op default, not 0.5 (#371) by @mattias800 in #425
  • fix(hle/mem): sceKernelMunmap rejects a zero-length unmap with EINVAL by @mattias800 in #424
  • fix(hle/kernel): implement scePthreadMutexattrGettype (was uninitialized out) by @mattias800 in #426
  • fix(hle/file): implement sceKernelTruncate (path-based sibling of ftruncate) by @mattias800 in #428
  • fix(gpu): set-0 (vertex) textures need VERTEX stageFlags, not fragment-only (#376) by @mattias800 in #427
  • fix(hle/time): register _nanosleep, Gettimezone, ClockGetres, clock_settime by @mattias800 in #429
  • fix(gpu): bounds-check EUD descriptor reads in build_shader_resources (#375) by @mattias800 in #430
  • fix(hle/savedata): persist SaveDataMemory slots to disk (survive restart) by @mattias800 in #432
  • fix(hle/file): implement readv/writev/preadv/pwritev/getdirentries by @mattias800 in #434
  • fix(gpu): guard the fold-time WAIT_REG_MEM label read (#380) by @mattias800 in #433
  • fix(hle/libc): posix_memalign returns EINVAL for a bad alignment, not ENOMEM by @mattias800 in #435
  • fix(gpu): const-fold must not fold an untracked SOFFSET to 0 (#398) by @mattias800 in #436
  • fix(hle/kernel): scePthreadAttrSetdetachstate really sets it (was a no-op leak) by @mattias800 in #437
  • fix(hle/pad): register scePadOpenExt and scePadIsValidHandle by @mattias800 in #438
  • fix(hle/np): CheckNpAvailability/Reachability signed-out; register CommonDialogIsUsed by @mattias800 in #441
  • feat(gpu): log a one-time diagnostic for unhandled GFX10 tile_modes (#383) by @mattias800 in #439
  • docs(gpu): correct DecodedImageDescriptor.type SQ_RSRC_IMG enum comment (#378) by @mattias800 in #440
  • refactor(gpu): remove dead/divergent R_* sub-op block from pm4_registers.hpp (#385) by @mattias800 in #443
  • fix(gpu): expose rendered-frame dims so scaled-render screenshots aren't dropped (#399) by @mattias800 in #444
  • fix(render): restore the RTT live renderer reverted by #360 (reconciled with #404/#409) + #300 pass-order + #319 root-cause by @mattias800 in #431
  • fix(gpu): resolve EUD-resident textures in build_shader_resources (#382) by @mattias800 in #445
  • fix(recompiler): image_sample_l on a 2D_ARRAY takes LOD from the 4th coord, not the slice (#373) by @mattias800 in #446
  • fix(recompiler): buffer_load_format_* default-fills missing components (0,0,0,1) (#368) by @mattias800 in #447
  • fix(gpu): guard the fold-time WAIT_REG_MEM 'not satisfied' diagnostic read (#448) by @mattias800 in #459
  • fix(hle/kernel): 4-arg pthread_create must not read a4 as a thread name by @mattias800 in #463
  • fix(hle/file): route the AIO write path through write_full (was raw pwrite) by @mattias800 in #467
  • fix(gpu): resolve EUD-resident paired samplers in build_shader_resources (#451) by @mattias800 in #468
  • fix(hle/savedata): sceSaveDataDirNameSearch enumerates real saves (#299) by @mattias800 in #470
  • fix(gpu): widen vertex-texture upload barrier to the VERTEX stage (#454) by @mattias800 in #471
  • fix(hle/libc): implement the Annex-K bounded functions (were fake-success no-ops) by @mattias800 in #472
  • fix(hle/appcontent): sceAppContentAppParamGetInt reports SKU_FLAG = FULL, not 0 by @mattias800 in #473
  • fix(gpu): cap the indexed-draw vertex range to prevent a multi-GB VB upload (#461) by @mattias800 in #474
  • fix(hle/mem): non-named MapFlexibleMemory must not read a4 as a name (wild strncpy) by @mattias800 in #475
  • fix(hle/service): four service getters stop returning garbage/wrong out-params by @mattias800 in #477
  • fix(gpu): const-fold invalidates BOTH dwords of a 64-bit SOP1 dest (#460) by @mattias800 in #476
  • fix(recompiler): s_mul_hi_i32 is gfx10 SOP2 opcode 0x36, not 0x37 (#462) by @mattias800 in #469
  • fix(hle/file): implement lstat and fsync (were fake-success) by @mattias800 in #478
  • fix(gpu): reject over-length PM4 packets in begin_packet + WriteData (#450) by @mattias800 in #479
  • fix(recompiler): v_cmpx writes EXEC only, not VCC (#464) by @mattias800 in #480
  • fix(recompiler): clamp bitfield-extract so Offset+Count <= 32 (avoid SPIR-V UB) (#455) by @mattias800 in #481
  • fix(gpu): latch depth and stencil clear independently (#457) by @mattias800 in #482
  • fix(gpu): guard the pend-queue completion write against an unmapped target (#449) by @mattias800 in #483
  • docs: refresh READMEs to current state by @mattias800 in #484
  • fix(hle/kernel): implement scePthreadRwlockTimedrd/wrlock (were faking success) by @mattias800 in #487
  • fix(hle/libc): register rand/srand/rand_r (rand() was a constant 0) by @mattias800 in #488
  • fix(gpu): honor guest cull/front-face/polygon mode (PA_SU_SC_MODE_CNTL) (#456) by @mattias800 in #486
  • fix(hle/file): implement dup/dup2 (were fake-success returning fd 0 = stdin) by @mattias800 in #489
  • fix(hle/libc): portable rand_r — unbreak the MinGW/Windows build by @mattias800 in #492
  • fix(hle/kernel): implement the scePthreadSem* semaphore family (were faking success) by @mattias800 in #491
  • fix(recompiler): v_cvt_pkrtz saturates f16 overflow instead of emitting Inf (#452) by @mattias800 in #490
  • test(savedata): make test_savedata_ime hermetic across ctest runs by @mattias800 in #493
  • fix(hle/kernel): implement the scePthreadBarrier* family (were faking success) by @mattias800 in #494
  • fix(hle/time): timer event data is expirations-since-last-read, not a running total by @mattias800 in #496
  • feat(tools): re/xref.py — cross-reference finder for unsymbolicated PS5 modules by @mattias800 in #495
  • fix(hle/audio): sceAudioOutOutputs returns one grain, not the sum over ports by @mattias800 in #497
  • fix(gpu): in-SGPR cbufs set only sgpr_base, not srt_offset (no by_srt_offset false-match) (#453) by @mattias800 in #498
  • fix(hle/mem): implement sceKernelReleaseFlexibleMemory (was fake-success -> VA leak) by @mattias800 in #500
  • docs(charter): document the RE toolbox + tell agents to build tools, not avoid them by @mattias800 in #499
  • diag(hwbp): PROSPER_HWBP_ARGS prints SysV arg registers per hit by @mattias800 in #503
  • fix(gpu): stencil ONES op writes 0xFF; pick the REPLACE reference per op (#466) by @mattias800 in #501
  • fix(hle/mem): implement sceKernelMtypeprotect (was fake-success -> dropped protection) by @mattias800 in #502
  • fix(gpu): map aliased CB packed formats COLOR_10_11_11(0x6)/COLOR_10_10_10_2(0x8) (#465) by @mattias800 in #504
  • fix(gpu): #312 pend-queue drain serialization + suppress ReleaseMem freelist stomps (partial) by @mattias800 in #505
  • diag(#312): POOLSHIFT tripwire exonerates the GPU write path for the 0x20015f00 byte-shift by @mattias800 in #506
  • diag(#312): value-triggered pool-shift instruments + off-by-one-address localization by @mattias800 in #507
  • feat(input): frame-anchored PROSPER_PAD_SCRIPT (f: = flip N) — deterministic state-reach (#302) by @mattias800 in #509
  • diag+fix(#312): capture the MallocBinned3 corruptor — prosper's GPU value-1 fence write forges a freelist pointer (HOST) by @mattias800 in #510
  • fix(gpu): don't latch depth clear from an ALWAYS-compare draw — Messenger menu no longer black (Fixes #508) by @mattias800 in #511
  • diag(#312): label free-state WAF guard — strictly-correct, does not close; residual is GPU-side-undetectable by @mattias800 in #512
  • docs: replace stale Messenger render frontier by @mattias800 in #517
  • feat(gpu): add immutable realized-submit capture replay by @mattias800 in #519
  • fix(gpu): retain color-disabled depth/stencil passes by @mattias800 in #521
  • fix(gpu): restore Messenger grading LUT producer by @mattias800 in #528
  • feat(gpu): validate SPIR-V descriptor contracts by @mattias800 in #529
  • fix(gpu): persist guest depth-stencil surfaces by @mattias800 in #532
  • fix(gpu): correct guest front-face mapping by @mattias800 in #534
  • fix(hle/time): PROSPER_DET_CLOCK flip-paced clock — fixes the frozen title shimmer (Fixes #240) by @mattias800 in #513
  • fix(tool): capture raw scanout before renderer frames by @mattias800 in #536
  • fix(hle): honor Dead Cells memory initialization contracts by @mattias800 in #538
  • fix(gpu): track depth-stencil aspect validity by @mattias800 in #541
  • docs: update current project status by @mattias800 in #543
  • fix(hle): initialize AGC resource name limit by @mattias800 in #544
  • fix(tool): diagnose screenshot output failures by @mattias800 in #548
  • fix(hle): return a valid guest process id by @mattias800 in #553
  • feat(hle): add a silent NGS2 lifecycle by @mattias800 in #554
  • docs: update the Dead Cells frontier by @mattias800 in #556
  • feat(tool): add screenshot render warmup by @mattias800 in #557
  • fix(tool): list content-metric snapshots by @mattias800 in #559
  • test(snapshot): add Dead Cells splash guard by @mattias800 in #560
  • feat(input): load reusable pad routes by @mattias800 in #561
  • feat(input): record replayable pad routes by @mattias800 in #562
  • feat(checkpoint): add Messenger story route by @mattias800 in #563
  • fix(hle): complete Dead Cells service contracts by @mattias800 in #564
  • feat(input): add Dead Cells gameplay route by @mattias800 in #567
  • feat(gpu): capture temporal RTT replay seeds by @mattias800 in #570
  • fix(agc): correct CbDispatch argument order by @mattias800 in #572
  • fix(agc): confirm type-0 data packet payload by @mattias800 in #575
  • fix(agc): bind Dead Cells compute programs by @mattias800 in #578
  • docs: refresh current compatibility frontier by @mattias800 in #579
  • fix(agc): derive compute groups from thread counts by @mattias800 in #581
  • feat(gpu): execute buffer compute dispatches by @mattias800 in #582
  • feat(gpu): trace guest writer provenance by @mattias800 in #585
  • fix(gpu): preserve mixed submit order by @mattias800 in #587
  • feat(gpu): trace live resource versions by @mattias800 in #589
  • feat(gpu): compute-dispatch fail-trace for PROSPER_DYNTRACE_FAIL (#590) by @mattias800 in #591
  • feat(screenshot): add capture manifests and assertions (#593) by @mattias800 in #597
  • feat(gpu): record native submit and present timelines (#594) by @mattias800 in #598
  • feat(gpu): materialize selected timeline submits by @mattias800 in #599
  • feat(gpu): graph captured resource dependencies by @mattias800 in #600
  • gpu: record prior producer identities in timelines by @mattias800 in #601
  • gpu: replay an exact predecessor capsule by @mattias800 in #602
  • gpu: capture deduplicated submit closure bundles by @mattias800 in #605
  • gpu: trace full temporal target lifetimes by @mattias800 in #607
  • gpu: scale exact temporal capture bundles by @mattias800 in #609
  • feat(gpu): deterministic playable closure debugging by @mattias800 in #612
  • fix(gpu): honor compute HTILE fast clears by @mattias800 in #616
  • gpu: structure uniform VCC exit loops by @mattias800 in #619
  • GPU capture: retain failed operation diagnostics by @mattias800 in #620
  • tools: stabilize Dead Cells splash guard by @mattias800 in #621
  • docs: cross-platform porting plan (Windows, macOS, Android) by @mattias800 in #610
  • port: run prosper core on macOS (x86_64 under Rosetta 2), boot Blasphemous 2 into guest code by @mattias800 in #613
  • ci: add macOS (x86_64 / Rosetta 2) build+test job by @mattias800 in #622
  • tools: add stable gameplay timeline selectors by @mattias800 in #623
  • feat(gpu): checkpoint persistent depth stencil state by @mattias800 in #625
  • port(win): Windows guest-execution substrate foundation (compile+link, boot not yet verified) by @mattias800 in #624
  • gpu: structure proven-uniform VCC control flow (loops + forward ifs) in the compute shell (#590) by @mattias800 in #627
  • port(win): Windows guest boots multi-threaded into the frame loop (lazy-commit + worker-thread ABI/TLS) by @mattias800 in https://github.com/mattias800/ps5ys/pull/628
  • gpu: fold const-fold descriptor uses into the compute resource table (#590) by @mattias800 in https://github.com/mattias800/ps5ys/pull/629
  • fix(gpu/recompiler): Dead Cells gameplay composition — MRT0 color output + dropped compute dispatch (Fixes #566) by @mattias800 in https://github.com/mattias800/ps5ys/pull/626
  • fix(win): commit one guest page on reserved first touch by @mattias800 in https://github.com/mattias800/ps5ys/pull/632
  • docs: refresh Dead Cells status after composition fix by @mattias800 in https://github.com/mattias800/ps5ys/pull/637
  • fix(loader): preload optional Unity FMOD plugins by @mattias800 in https://github.com/mattias800/ps5ys/pull/640
  • fix(agc): emit DCB debug marker packets by @mattias800 in https://github.com/mattias800/ps5ys/pull/643
  • fix(http): implement local URI parsing by @mattias800 in https://github.com/mattias800/ps5ys/pull/645
  • fix(kernel): leave host FS active on thread return by @mattias800 in https://github.com/mattias800/ps5ys/pull/647
  • fix(input): make slow-render routes observable by @mattias800 in https://github.com/mattias800/ps5ys/pull/649
  • fix(gpu): complete Blasphemous 2 first gameplay by @mattias800 in https://github.com/mattias800/ps5ys/pull/650
  • port(win): build + initialize the live Vulkan renderer on Windows by @mattias800 in https://github.com/mattias800/ps5ys/pull/655
  • port(win): reserve-alignment + worker-stack registration + sync diagnostics (job-system stall pinpointed) by @mattias800 in https://github.com/mattias800/ps5ys/pull/658
  • docs(porting): localize the Windows stall to the Unity GC-helper init handshake by @mattias800 in https://github.com/mattias800/ps5ys/pull/659
  • gpu: execute compute dispatches with image bindings (#590) by @mattias800 in https://github.com/mattias800/ps5ys/pull/656
  • fix(win): native Win32 futex for sceKernelWaitOnAddress (fixes lost-wakeup boot wedge) + sync diagnostics by @mattias800 in https://github.com/mattias800/ps5ys/pull/663
  • fix(win): implement positioned/vectored file IO (pread/pwrite/*v) — unblocks Unity asset streaming by @mattias800 in https://github.com/mattias800/ps5ys/pull/665
  • docs(porting): Windows guest streams assets + drives GPU PM4; next frontier = EOP-completion handshake by @mattias800 in https://github.com/mattias800/ps5ys/pull/666
  • fix(win): wake GPU-label waiters via native WakeByAddress (GPU->CPU futex wake was a no-op) by @mattias800 in https://github.com/mattias800/ps5ys/pull/667
  • Fix intermittent Dead Cells texture-memory crash by @mattias800 in https://github.com/mattias800/ps5ys/pull/668
  • docs(win): HANDOFF — Windows core boots to the first GPU fence; stack-arg ABI is the next fix by @mattias800 in https://github.com/mattias800/ps5ys/pull/670
  • Fix Windows VEH recovery entry ABI by @mattias800 in https://github.com/mattias800/ps5ys/pull/671
  • Forward guest stack arguments through HLE import bridge by @mattias800 in https://github.com/mattias800/ps5ys/pull/674
  • Improve guest binary reference tooling by @mattias800 in https://github.com/mattias800/ps5ys/pull/677
  • fix(hle/pad): headless default presents one connected controller (Fixes #680) by @mattias800 in https://github.com/mattias800/ps5ys/pull/681
  • Fix Windows binary file reads by @mattias800 in https://github.com/mattias800/ps5ys/pull/679
  • Fix Windows GC exception delivery by @mattias800 in https://github.com/mattias800/ps5ys/pull/684
  • test(ppsa02664): input route reaching the gameplay scene (repro for #320) by @mattias800 in https://github.com/mattias800/ps5ys/pull/687
  • feat(win): validate native frontend through Messenger gameplay by @mattias800 in https://github.com/mattias800/ps5ys/pull/689
  • feat(macos): realtime harness app (prosper-app) on macOS via SDL3 + MoltenVK by @mattias800 in https://github.com/mattias800/ps5ys/pull/685
  • feat(macos): guest %fs TLS via trap-and-emulate — boots into Unity GPU init by @mattias800 in https://github.com/mattias800/ps5ys/pull/692
  • docs(gpu): tag blend-factor decode (#320) by @mattias800 in https://github.com/mattias800/ps5ys/pull/696
  • fix(win): preserve direct-memory physical aliases by @mattias800 in https://github.com/mattias800/ps5ys/pull/699
  • feat(win): add one-command native frontend launcher by @mattias800 in https://github.com/mattias800/ps5ys/pull/700
  • gpu(recompiler): materialize small u64 constants via OpUConvert (MoltenVK vertex-shader fix, #693) by @mattias800 in https://github.com/mattias800/ps5ys/pull/701
  • macos: use LunarG SDK MoltenVK for rendering (resolves the #693 shader-compile blocker in practice) by @mattias800 in https://github.com/mattias800/ps5ys/pull/703
  • diag(avplayer): log full sceAvPlayer call sequence via PROSPER_SVCLOG (#324) by @mattias800 in https://github.com/mattias800/ps5ys/pull/706
  • feat(video): sceAvPlayer playback lifecycle + video-backend seam (#705) by @mattias800 in https://github.com/mattias800/ps5ys/pull/708
  • perf(gpu): remove live renderer CPU bottlenecks by @mattias800 in https://github.com/mattias800/ps5ys/pull/704
  • Add Prosper logo and compatibility guide by @mattias800 in https://github.com/mattias800/ps5ys/pull/709
  • fix(loader): keep Linux guest-FS stubs within import slots by @mattias800 in https://github.com/mattias800/ps5ys/pull/698
  • Adopt Pixel Portal as the Prosper logo by @mattias800 in https://github.com/mattias800/ps5ys/pull/711
  • Fix PC-keyed scalar buffers in UE scene color by @mattias800 in https://github.com/mattias800/ps5ys/pull/682
  • fix(capture): fault-safe stage-table build on unmapped user_data (#713) by @mattias800 in https://github.com/mattias800/ps5ys/pull/717
  • Improve renderer throughput and publish the Windows app by @mattias800 in https://github.com/mattias800/ps5ys/pull/716

Full Changelog: https://github.com/mattias800/ps5ys/commits/v0.1.0