mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-06 13:30:00 +00:00
3.9 KiB
3.9 KiB
libSceFontGs.native technical debt
Unknown function info
- sceFontGraphicsAgcSurfaceInit (libSceFontGs.native) - still throws through
NotImplemented_nid_no_patch. The libSceFontGsm.prx body (PPSA13197 unwrapped ELF, VA 0x39e0, size 0x324) validates surface format/attributes, writes a large AGC surface descriptor through a deep helper tree and returns 0x8a6cXXXX family errors; the full object layout it produces is not yet mapped, so no general implementation exists. - sceFontSelectGraphicsAgc (libSceFontGs.native) - throws for index 0 and returns
nullptrfor other indices. Verified bodies disagree on index 0: the 4.03libSceFontGs.native.sprxbody isxor eax,eax; ret(VA 0x250; SHA-2566c72c3ff5785d6bc68984de885d19a812f98626d45d2909794c31f489926101c), while the newerlibSceFontGsm.prxbody returns a backend descriptor pointer for index 0 (3890: 31 c0 / xor eax,eax; 85 ff / test edi,edi; 48 8d 0d 85 07 03 00 / lea rcx,[rip->0x34020]; 48 0f 44 c1 / cmove rax,rcx; c3 / ret). The repository targets the 13.60 export table, and no 13.60 native body provingnullptris available, so index 0 stays unimplemented until the descriptor table is mapped. Thenullptrfor index != 0 is verified by both bodies. - FontAgcSurface producer (libSceFontGs.native) - the object consumed by
sceFontGraphicsAgcDrawupFillTextureImage/sceFontGraphicsAgcDrawupFillTexturePattern(tag byte 0x58 at +0x0d, mode at +0x0f, busy flag at +0x1c, fill object at +0x28, initialized flag at +0x38) is produced by an export outside the six bridge functions (the FontGsmsceFontGraphicsAgcSurfaceInitpath does not set +0x38), so its producer is not yet identified; the layout is firmware-verified from the libSceFontGsm.prx bridge bodies. - FontAgcSequence producer (libSceFontGs.native) - the sequence object consumed by
sceFontGraphicsSequenceGetAgcCommandsForJump/...ForSubmit(tag 0xf80 at +0x00, lock bit at +0x1b, commands descriptor at +0x28) is produced bysceFontGraphicsStructureCanvasSequencein libSceFont, which is itself still a stub; the descriptor layout (+0x28 first stream, +0x30 first size, +0x34 second count, +0x38 second stream) is firmware-verified.
Notes
- The four drawup/sequence bridge exports are transliterated from the
libSceFontGsm.prxbodies (PPSA13197sce_module/, SHA-2560c7ebf7f36aba76df09cba3509bf91e4a716c58963ce3f70198eeadec3527cd9):XKfh4naaANE@0x3890 (select),PwZEP8ZBK2Y@0x38a0 (image),z-m061OoEqQ@0x3950 (pattern),qEGeDXvL3fc@0x39e0 (surface-init),6zxuBlsGF0I@0x3d10 (submit),CeSI7C4ihjo@0x3dc0 (jump). The image bridge head —38a0: mov eax,0x80460002; test rdx,rdx; je; movq [rdx],0, thencmpb [rsi+0xd],0x58,cmpq [rsi],0,cmpl [rsi+0x38],1— matches the implemented tag/head/initialized ordering. - The drawup bridges forward to
sceFontGraphicsDrawupFillTextureImageObject/...PatternObjectincore/libs/prx/libSceFont/src/Graphics.cppthrough the same export boundary firmware uses (FontGsm PLT importsCfkpBe2CqBQ/FL0unhGcFvIfromlibSceFont-module). - Nothing in PPSA13197 imports the six bridge NIDs: they appear only in the bundled
libSceFontGsm.prx's own export table (module tag#F=libSceFontGsmitself; its import table lists onlylibSceLibcInternal,libSceFont-module,libSceAgcDriver,libSceAgc). No guest module binds them againstlibSceFontGs.nativein this title; the exports are implemented here becauselibSceFontGs.nativeis the canonical provider module for these NIDs in the 13.60 inventory.