Main restructured the libSceHmd2 debt file since c547deaac: the
Additional callable exports section with the inventory table, the
Mirroring/PredictedDisplayTime/SetRenderConfig functional bullet
(carrying the session measurements from this pull request's
discussion), the Older callable NIDs bullet, and the Unknown
CBkVZi9WhVo entry. The parameter-submission bullet conflicted with
this branch's measured rows; the resolution keeps the measured rows
and main's ending.
48 KiB
libSceHmd2 technical debt
Additional callable exports
- Additional callable exports - 11 entries present in both version-labelled images are import-resolution declarations only. Neither label independently authenticates retail firmware provenance. These NIDs are absent from the pinned public 3.20 catalogue. Parameter lists, return types and behavior are unverified; parameterless
intdeclarations are placeholders, not verified ABI contracts. Every entry throws throughNotImplemented_nid_no_patch. Unidentified names use literal NID aliases. No runtime functionality is implemented. Data exports require separate layout and ownership analysis. Identified candidate names match their NIDs in the public symbol database or supplemental catalog.
| Name | NID |
|---|---|
Unknown |
7Qwh+itD9r4 |
Unknown |
Ec6R1zHrEmA |
Unknown |
FBUEhH9tQ1A |
Unknown |
GLtAhJ6E2io |
Unknown |
Ijl+flgyR7Q |
Unknown |
PcdNgERzCos |
Unknown |
UbHtTtGRplE |
Unknown |
dvGkONYMdJg |
Unknown |
fY41qRGCvTM |
Unknown |
n9wYmNVt6S4 |
Unknown |
wDDAIxOeaqg |
Silent stubs
- libSceHmd2 has no PS VR2 runtime: Initialize returns unsupported-feature, so normal calls never reach initialized device behavior. The reprojection session exports below answer the measured no-session behaviour; the remaining reprojection and gaze operations retain their throwing bodies. All five size/alignment queries answer measured constants. Device setup, headset tracking and rendering are not implemented.
- the libSceHmd2 reprojection session follows KytyPS5's state machine with the layouts its static_asserts pin:
sceHmd2ReprojectionQueryBufferSizeAlignanswers the 0x100828-byte, 0x100-aligned requirement a retail PS5's firmware 13.60 reports for every argument while the process's positional setting is unset (measured in this pull request's discussion; KytyPS5's 16-byte state is not what the console answers) and, aftersceHmd2ReprojectionSetAllowPositionalReprojectionrecords a first argument of n = 1 to 5, the 0x1103000 + n * 0x1000000-byte, 0x1000-aligned requirement a retail PS5's firmware 13.40 answers instead,sceHmd2ReprojectionSetAllowPositionalReprojectionanswering 0 for a first argument of 0 to 5, recording it process-wide without an initialization and answeringPARAMETER_INVALID(0x8A720009) for 6, 7, 8, 0xFF and 0xFFFFFFFF with the previous setting kept, the console ignoring the setting call's further parameters and the query's own arguments (the restored ABI carries the single mode argument) (measured on a retail PS5's firmware 13.40 in this pull request's discussion, where PPSA23479 and PPSA05666 set 2 before their query and PPSA01317 leaves the setting unset; every measurement was taken without a reprojection session, so what the setting call returns inside a session and whether the query still follows the setting there is not measured - PPSA01317's in-session queries only exercised the unset setting), and the 16-byte, 8-aligned state (output mode, timing in microseconds) the session keeps occupies the start of the 0x100828 buffer,sceHmd2ReprojectionInitializefirst reads the process's app info on the firmware and answers 0x8A72001F before its arguments whensceKernelGetAppInfofails or the info's nonzero attribute field lacks bit 0x400 (the answer MLB The Show 25 gets on #8645; module read, firmware 13.40); the emulator's app info does not model the attribute fields, so every caller passes the gate. It answersPARAMETER_NULL(0x8A720008) for a null param or buffer, throws for an auxiliary-memory buffer (the host has no camera), writes the state into the guest's work buffer with the timing the param carries or the 3000 us default and answers 0, and a second initialization answersREPROJECTION_ALREADY_INITIALIZED(0x8A72000C). There is no reprojection stage on the host, so the session is bookkeeping only.sceHmd2ReprojectionSetTiminganswers reprojectionNOT_INITIALIZED(0x8A72000B) without a session,PARAMETER_INVALID(0x8A720009) below 2000 us and above 7000 us (measured, firmware 13.40 module read; the previous release threw there) and otherwise records the value rounded up to the next hundred microseconds in the work buffer, answering 0 at once when the rounded value equals the current timing; the module forwardssceVideoOutSetDisplayEventPosition's result when the timing changes, which is not modelled until VideoOut grows that export.sceHmd2ReprojectionEnableVrModeanswers reprojectionNOT_INITIALIZEDwithout a session,VIDEO_OUT_ERROR_INVALID_VALUE(0x80290001) for an output mode other than KytyPS5's 89/91 Hz (0x2000C) and 119/88 Hz (0x2000F), and otherwiseVIDEO_OUT_ERROR_NO_DEVICE(0x80290018, KytyPS5 errno.h): the console reports no VR runtime, so the state's output mode stays 0.sceHmd2ReprojectionTerminateends the session: it clears the record under the reprojection mutex and answers 0, so afterwards the gated exports answerNOT_INITIALIZEDagain and a new initialization is accepted; this teardown follows the session model, it is not a console measurement, and the positional setting survives it, as it survives a second initialization. The record is a borrow of the guest's work buffer: the guest keeps the buffer for the session's lifetime and frees it after terminating, every read and write of the record happens inside an export call under the mutex, and no export frees guest memory. A guest that frees the buffer while the session is live breaks that contract, and the writes still land in the guest address space at the address the guest gave, where the guest's own allocator owns the memory again, so the guest corrupts its own heap exactly as it would on hardware
Unknown function info
- sceHmd2Open (libSceHmd2) - the handle is the value the console's driver returned to the first open; titles built with an SDK before 7.00 may open for any user, and the firmware's
sceMbusAddHandleByUserIdresult for a user other than the initial one is unknown, so that case throws. 0x8a720006 for a second open is namedAlreadyOpenedfrom its use. One title (PPSA29866) disassembled for this entry calls it once (0x2d1e2e) with a user ID from a variable of the title whose origin was not read, type 0, index 0 and a null parameter, stores the result in a field of its own object and tests it for a negative value. Which user it opens for is not shown. - sceHmd2SetVibration (libSceHmd2) - the second parameter is checked against 25 only while a headset is connected; its name and unit are unknown. The field of view member names are assumed: of the firmware's default tangents the first is the widest and the last two are equal
- libSceHmd2 legacy exports - SeeThroughDraw, SeeThroughIC, VideoOutEq, WaitShader, SeeThroughCallbackGetPoseDataFunc, ReprojectionClear, ReprojectionSet and RpeorjectionSetParam have no matching symbols or callers in the supplied system modules. Their signatures remain unresolved. ClearUserEventEnd/Start, GazeStart/StopUserCalibration and GazeObjectSelectionTerminate are confirmed to take no arguments; their behavior after initialization remains unimplemented.
- PPSA09030 imports from its
Media/Plugins/psvr2.prxdeclared without parameters, signatures unknown, added without an implementation because the title fails to load the plugin without them: sceHmd2ReprojectionGetStatus (libSceHmd2) - inside a session on firmware 13.40 (PPSA01317) it answered 0 and wrote 0x68 bytes (zeros to 0x28, four advancing timestamps at 0x28/0x30/0x38/0x40, then zeros) and 0x8A720008 for a null output - PPSA01317 imports declared without parameters, signatures unknown: the libSceHmd2 exports that throw and the remaining libSceVrTracker2 exports. Names from the aerolib NID list
- PPSA15878 imports declared without parameters, signatures unknown: the libSceHmd2 reprojection and gaze exports the session does not cover,
sceVrTracker2Finalize,sceVrTracker2GetPlayAreaOrientedBoundingBoxandsceVrTracker2LocateCoordinateSystemin libSceVrTracker2, and thescePadVrControllertrigger effect exports in libScePad. Names from the aerolib NID list - sceHmd2InternalSetPortStatus (libSceHmd2) - unknown signature
- sceHmd2InternalLedDetectorStartBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalImageStartBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalSetPortConnection (libSceHmd2) - unknown signature
- sceHmd2InternalSetCameraSeeThroughMode (libSceHmd2) - unknown signature
- sceHmd2InternalSetFakeLensSeparationDistance (libSceHmd2) - unknown signature
- sceHmd2InternalDfuSend (libSceHmd2) - unknown signature
- sceHmd2InternalLedDetectorOpenBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalImageOpenBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalLedDetectorStopBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalSetDeviceConnection (libSceHmd2) - unknown signature
- sceHmd2InternalLedDetectorCloseBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalSetSidetone (libSceHmd2) - unknown signature
- sceHmd2InternalGetDeviceId (libSceHmd2) - unknown signature
- sceHmd2InternalSetBrightness (libSceHmd2) - unknown signature
- sceHmd2InternalImageStopBySlot (libSceHmd2) - unknown signature
- sceHmd2InternalSetVibrationMode (libSceHmd2) - unknown signature
- sceHmd2InternalGetVr2dData (libSceHmd2) - unknown signature
- sceHmd2InternalImageCloseBySlot (libSceHmd2) - unknown signature
- sceHmd2Unknown_CBkVZi9WhVo_nid_no_patch (libSceHmd2) - NID
CBkVZi9WhVoof thelibSceHmd2ReprojectionMotionVectorsub-library, listed as a function export in the 13.60 inventory with no name or signature. It throws throughNotImplemented_nid_no_patchand exists only so a title that imports it, such as My First Gran Turismo, can load. BeforesceHmd2Initializethe console answered 0 with every argument null but0x8a720009with every argument pointing at zeroed memory, so its checks are not known
Functional
-
sceHmd2Initialize (libSceHmd2) - the firmware also fails with 0x8a72001f when
sceKernelGetAppInfofails and with 0x8a72000a for some applications, depending on app info fields at 0x2c, 0x4b and 0x4d whose meaning is unknown, and then callssceMbusInit; none of this is modelled. One title (PPSA29866) disassembled for this entry calls it once (0x2d2f6c) with the address of a zeroed 16-byte local block and hands the result straight to another function; a branch on the result was not read. -
Reprojection size/alignment queries - all five exports consume no arguments and return two uint64 values in RAX:RDX. Four host queries return values measured without a headset; native display sizes are calculated through the graphics layout service and see-through size follows internal configuration. QueryBufferSizeAlign changes calculation with the process's positional setting; its native pair return type is restored, and this branch implements the measured table the reprojection-session entry under Silent stubs records.
-
Hmd2BeforeInitializeZero (libSceHmd2) - before
sceHmd2Initializethe console answers 0 to these 45 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:vDgpdS2N9Rw(sceHmd2InternalRegisterVibrationCallback),Ri35gKTZpvE(sceHmd2InternalUnregisterVibrationCallback),9oyW8puiKeI,1HZNE6jhBnQ(sceHmd2InternalPowerEventInitialize),cdwAKBZLXjs,Yub1MF58jfY,JYXAuQFnPyw(sceHmd2InternalDfuOpen),VuPKqCu3wzw(sceHmd2InternalDfuClose),GSThagVyW5U(sceHmd2InternalCrashReportOpen),J4qE5N937MY(sceHmd2InternalCrashReportClose),9KnNj-dyASg,Qta2bkstbFk,5ZcObnDRBXE,AvPNn0qx4WQ,jp0apqNGgi8(sceHmd2SetIpdOffset),-kZT7X7OMg0(sceHmd2InternalRelocalizerOpen),1ewLtng-SVk(sceHmd2InternalRelocalizerClose),B0b8DeIUGes(sceHmd2InternalTrackingOpen),HclLg4Oj5yw(sceHmd2InternalTrackingClose),VbEvrQXsZyY(sceHmd2InternalLedDetectorOpen),bB6MKZi5UCQ(sceHmd2InternalLedDetectorClose),OXQ1EDf02XU(sceHmd2InternalImageOpen),IAxfMTvFm0M(sceHmd2InternalImageClose),qTJtAtaLeno(sceHmd2InternalGenDataOpen),j7Q16UX6l34(sceHmd2InternalGenDataClose),pmmNM06rLqU,zdQfyDK9Ods(sceHmd2InternalSlamTraceOpen),aPRwp9GnljM(sceHmd2InternalSlamTraceClose),MjY1gBSaed0(sceHmd2InternalGazeOpen),evAMjJYHqW4(sceHmd2InternalGazeClose),r93FLEZ3BBk(sceHmd2InternalGazeStart),IdYURdEdNFo(sceHmd2InternalGazeStop),CVcL2Cu2AEI(sceHmd2GazeActivateGazeTracking),NmKIfVxr2s0,KeDLkkp62Gg,+aadu6-ra+A,FgnTiwwGSzk,PWAUwOTHbbo(sceHmd2InternalCreateSharedMemory),WzaEApHnsP8(sceHmd2InternalIsGameVr2d),dXzQI8QVY7Y(sceHmd2InternalIsMiniAppVr2d),cCvFKGqRh1k(sceHmd2InternalIsCommonDlgVr2d),uj4-2VEAFPU(sceHmd2InternalIsCommonDlgMiniAppVr2d),sIaGStI-iLM(sceHmd2InternalMapSharedMemory),JzwpZOemDO8,IsC4R4bZFVU. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeNotInitialized (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720002to these 9 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:sXaPEPY-fLA(sceHmd2InternalOpen),3F5inHhKzXg(sceHmd2InternalGetDeviceInformation),sJAiB-6p55U,E8hDydLjsSs,xEQkSb2WJ7Y,aaP4dnR4q-0,lEU0TeUoGwI,cFVyjHBpUUU,zROtb46jTj4. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeError0004 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720004to these 15 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:kAMsjYHBbNQ(sceHmd2InternalSetVolume),5m73zmLpsQ0(sceHmd2InternalResetViewPosition),EPeH4xuQ2XQ(sceHmd2InternalGetStatus),TJ8lyRsjFY4(sceHmd2InternalClearTrackerFts),-XQVcLnyX68(sceHmd2InternalSetSlamCommand),giQwQoHhYYA(sceHmd2InternalDfuStart),zNc9IkgawMI,-tnG5UJPvAc(sceHmd2GazeStartUserCalibration),FPhFmG+jXuQ(sceHmd2GazeStopUserCalibration),CKlkvNngofQ,yL1CZaciFWE(sceHmd2GazeSetUserCalibrationPoint),qlzgyG3s0RY,kTIDrDLzMv0,9Gee0ef8a+U,ecZVjQdwmBI(sceHmd2GazeSetEnabledEye). Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeParameterNull (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008to these 16 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:MNtiJTDOPAU,RRy9WmqZfgU(sceHmd2InternalDecryptData),uobR4m9lgwc(sceHmd2InternalGetMirroringMode),-XPk5KWBYdo(sceHmd2InternalRelocalizerSetResultData),J44idh9izZM,Ps0wAvYaa1E,kLnMR8oQ1MY,kMz4rbBxvjo,DIU1sFRRaiE(sceHmd2GazeGetCalibrationData),ZQvU4vDzZGQ(sceHmd2GazeSetUserCalibrationData),TJpyGGP9YEY,Dih+Odk+RC0,oaqdSJw+HVY,m35gtHuanXU,CTM7QPLJF9Q(sceHmd2InternalGetFlipInfo),+rExHeC9lP0(sceHmd2GazeObjectSelectionInitialize). Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeParameterInvalid (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720009to these 9 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:bBh5bCp9coo(sceHmd2InternalSetPositionResetIcon),G3PNDE2VjfY(sceHmd2InternalSetPowerOff),nScCT0OPU0o,6Q0Ng7OTN9o,-fJKh4SnFR0(sceHmd2InternalSetBudgetMode),jUA2s-l0npY(sceHmd2InternalSetForceIcon),+9XhyAIJVj4,eBGK-o6E4RQ(sceHmd2InternalBindDeviceWithUserId),MTuFeL9184E. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeReprojectionNotInitialized (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a72000bto these 10 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:d3SEIYTP6wc,EVECbTvBezo,ciusPdJKjSU,DIwqTkcZiJo(sceHmd2ReprojectionSetUserEventStart),64ERZWVFBTE(sceHmd2ReprojectionSetUserEventEnd),z0+0gXUJWs8(sceHmd2ReprojectionClearUserEventStart),rjAd4nCY4DM(sceHmd2ReprojectionClearUserEventEnd),Acyg4vTdGm0(sceHmd2ReprojectionGetCurrentOutput),aGOWaEeg04I,9up+EPhw1No. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
sceHmd2ReprojectionEnableMirroring, sceHmd2ReprojectionGetPredictedDisplayTime and sceHmd2ReprojectionSetRenderConfig (libSceHmd2) - the answers inside a reprojection session are not implemented (for the last two measured in a PPSA01317 session on firmware 13.40), so a session has to gate these calls once
sceHmd2ReprojectionInitializecan create one. Without a session each returns 0x8a72000b for every argument and writes nothing: the firmware 13.40 module tests the session before its arguments, and a retail PS5 answered so from a payload beforesceHmd2Initializewith null arguments and with zeroed buffers (firmware 13.60) and in a PPSA23479 game process whose arguments were not recorded (firmware 13.40) -
Hmd2BeforeInitializeError002C (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a72002cto these 1 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:V1kLQmP-17U(sceHmd2GazeObjectSelectionTerminate). Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeError1002 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a721002to these 5 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:2LVD1EC5SYE,Bf87AL6zWxU,XKt7w1MODFY,Y5s22M-qUDA,JJKY-BtQJLg. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeError1003 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a721003to these 1 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:9kj9vw8UShQ. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeMinusOne (libSceHmd2) - before
sceHmd2Initializethe console answers -1 to these 12 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:EAkv8Mqt33E(sceHmd2InternalRelocalizerStart),Rv7bkmKvmz0(sceHmd2InternalRelocalizerStop),1oPZizn0SNA(sceHmd2InternalTrackingStart),TwCpE-nNrlo(sceHmd2InternalTrackingStop),jkqAeQfdtxw(sceHmd2InternalLedDetectorStart),+l0RQph81Z8(sceHmd2InternalLedDetectorStop),qsmAtGw1Ncc(sceHmd2InternalImageStart),uKhwYoMsIsA(sceHmd2InternalImageStop),WNdaigr94dI(sceHmd2InternalGenDataStart),P6S5ZVWf-H0(sceHmd2InternalGenDataStop),sun6NWE1sdg(sceHmd2InternalSlamTraceStart),--TFsJYXo04(sceHmd2InternalSlamTraceStop). Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeValue0400 (libSceHmd2) - before
sceHmd2Initializethe console answers0x400to these 1 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:BWqcwjCozzI. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2BeforeInitializeValue20000 (libSceHmd2) - before
sceHmd2Initializethe console answers0x20000to these 1 exports both with every argument null and with every argument pointing at a zeroed 16 KiB buffer, writing nothing:PRz7TdBGUI0. Measured from a payload process on firmware 13.60, so a game process before initialization is assumed to answer the same; the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenError0004 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x8a720004when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 20 exports:9WeZr4kYfzk(sceHmd2InternalGetFwVersion),N+5h1hCOFAg(sceHmd2InternalGetRequiredPUPVersion),w2vEs2y5ZmE(sceHmd2InternalGetOpticalParam),L5gat1pe0y0(sceHmd2InternalSetCameraSeeThroughParam),4GnLHR9NJ1w,AHk7nGSzef0(sceHmd2InternalGetTrackerFtsData),ncjX9d3mc0M,l63QYAUuogc(sceHmd2InternalGetSlamCommand),mrcBySCdXSo(sceHmd2InternalDfuGetStatus),ieBra+td8sU(sceHmd2InternalDfuGetUpdateStatus),s+rzBnewgGs(sceHmd2InternalDfuCheckAfterPvt),Nfcm0GBdzZI(sceHmd2InternalRelocalizerGetVersion),Tc9rasWfrm4(sceHmd2InternalSetHomeCalibration),ckTbKTX4KZg,D7576PUbUjk(sceHmd2InternalGazeReadStatus),tTJ04SrBT8U,sDP7hZ-P6OI(sceHmd2GazeGetDeviceStatus),J+eVNbN9ndY(sceHmd2GazeGetUserCalibrationStatus),kozvHBNyxf0,638Tmg5y6U4. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenZero (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and 0 when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 8 exports:8ETtFtp5zqY(sceHmd2InternalGetVrMode),CWPkBm3EXQA,R62liQQIAaA(sceHmd2InternalGetFakeLensSeparationDistance),-bcWLHsdzo0,JngJzgNbu8U(sceHmd2SetFieldOfView),xNBSz8xrGdk,yUVPfN-jRIU,BKPR3RZ5aO4. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x8a721002when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 8 exports:IG4y+drWAWw(sceHmd2InternalRelocalizerReadData),rhYUml9vppE(sceHmd2InternalRelocalizerReadDataAsync),6574xHS+jZk(sceHmd2InternalRelocalizerReadData2),mXzaY6xVoxg(sceHmd2InternalTrackingReadData),6af-HIZQQn4(sceHmd2InternalTrackingReadData2),6qWtdTHQsTk,pUm8t8xWhFg,A0XKI-WjxK8(sceHmd2InternalImageReadData). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenMinusOne (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and -1 when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 5 exports:A9s2j8OioPQ,YIgtmrL+HLY,Ng8zEkGxDNs,EtslTnqO1xU(sceHmd2InternalImageStart2),hfrnRTryKQQ(sceHmd2InternalImageSetConfig). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstTwoThenParameterInvalid (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 1 is null and0x8a720009when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 3 exports:PPX68fNToFM,LxPIfjHaY4c(sceHmd2GazeObjectSelectionQueryMemory),w8gBTTdg+po(sceHmd2GazeObjectSelectionGetSelectedObject). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckSecondThenError002C (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 1 is null and0x8a72002cwhen every argument points at a zeroed 16 KiB buffer, writing nothing, for these 3 exports:tWJPX2ycRMM,5UMB9PJA70o,xQs62qCk1EI. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenParameterInvalid (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x8a720009when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 2 exports:MMc+bSlqkzk(sceHmd2InternalSetVirtualDisplaySize),NpZHgvSYgEA. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckAllSixThenZero (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 1 and argument 2 and argument 3 and argument 4 and argument 5 is null and 0 when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 2 exports:z-serf9vsb0(sceHmd2InternalPushVr2dData),IRMUFu+uG5s. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckSecondThenParameterInvalid (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 1 is null and0x8a720009when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 2 exports:72U64E+0z6U,LCQzi5ILGrY(sceHmd2GazeGetCalibrationDataMaxSize). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenError800d0203 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x800d0203when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:Im0qL0j9Ubg. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenError1003 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x8a721003when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:ng6eI8uA0h4(sceHmd2InternalImageGetMemoryLayout). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstThenError1010 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 is null and0x8a721010when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:mPPGgjyJrCI. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstTwoThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 1 is null and0x8a721002when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:ZupCJmV5BDI(sceHmd2InternalImageGetFrameData). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstTwoThenError1003 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 1 is null and0x8a721003when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:mAQZwOX1IHU(sceHmd2InternalImageGetAverageLuminance). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstAndThirdThenZero (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 2 is null and 0 when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:oacDkQkinLo. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckFirstAndThirdThenError1003 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 0 and argument 2 is null and0x8a721003when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:zn7PHGzzEyI. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckSecondThenInvalidHandle (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 1 is null and0x8a720003when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:wEHILc7TP04(sceHmd2GazeInsertRawDataWithHandle). Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2CheckSecondThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console answers0x8a720008when argument 1 is null and0x8a721002when every argument points at a zeroed 16 KiB buffer, writing nothing, for these 1 exports:W-ZIlUXcrNA. Each argument was nulled on its own with the others present (probehmd2n, payload process, firmware 13.60); what the present arguments mean, and the behaviour after initialization, are not measured, so the handler throws oncesceHmd2Initializehas succeeded -
Hmd2WriteStateTwo (libSceHmd2) - before
sceHmd2Initializethe console writes the five bytes02 00 00 00 00at the start of its first argument and returns 0; a null first argument returns0x8a720008:omimgG5itSs. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2WriteSize0x2000Align0x100 (libSceHmd2) - before
sceHmd2Initializethe console writes the 64-bit values0x2000through its first argument and0x100through its second and returns 0; a null first or second argument returns0x8a720008:6PeHcAaKYg8. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2WriteFourConstants (libSceHmd2) - before
sceHmd2Initializethe console writes the 16 bytese1 f0 74 3c d8 f0 74 3c 1f f1 74 3c d8 f0 74 3c(four floats near 0.01495) at the start of its first argument and returns 0; a null first argument returns0x8a720008:yur+xPdWPAg. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2WriteSixHalvesThenInvalidHandle (libSceHmd2) - before
sceHmd2Initializethe console writes the 24 bytes00 00 00 00 00 00 00 3f 00 00 00 3f 00 00 00 00 00 00 00 3f 00 00 00 3f(floats 0, 0.5, 0.5, 0, 0.5, 0.5) at the start of its second argument and returns0x8a720003for every first argument tried (0, a pointer); a null second argument returns0x8a720008:RnieDDp5ge4,jM3NEJA11yw. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2WriteTwelveHalvesThenInvalidHandle (libSceHmd2) - before
sceHmd2Initializethe console writes the 48 bytes00 00 00 00 00 00 00 3f 00 00 00 3f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3f 00 00 00 3f 00 00 00 00 00 00 00 00 00 00 00 00(floats 0, 0.5, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0) at the start of its second argument and returns0x8a720003for every first argument tried; a null second argument returns0x8a720008:b0H-n-tUk0U. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo3CheckSecondThirdThenZero (libSceHmd2) - before
sceHmd2Initializethe console returns 0 for a first argument of 0 to 3 and0x8a720009for 4, 5, 8, 16, 255 and -1; a null second or third argument returns0x8a720008even with an invalid first argument. Its fourth to sixth arguments answered0x8a720009when null with an invalid first argument, which does not separate them from the first-argument check, so they are not looked at:MXhloJ6Iw3w. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo1ThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console returns0x8a721002for a first argument of 0 or 1 and0x8a720009for 2 to 5, 8, 16, 255 and -1; its other arguments were only nulled with an invalid first argument, which answered0x8a720009either way, so they are not looked at:19wrIIiqFgM. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo1CheckSecondThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console returns0x8a721002for a first argument of 0 or 1 and0x8a720009for 2 to 5, 8, 16, 255 and -1; a null second argument returns0x8a720008even with an invalid first argument:Z389vAm47Ys. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo1ThenMinusOne (libSceHmd2) - before
sceHmd2Initializethe console returns -1 for a first argument of 0 or 1 and0x8a720009for 2 to 5, 8, 16, 255 and -1; the other arguments are not looked at, for the reason given above:cDcrvEG8j8k,tuqJO6O6cb4(sceHmd2InternalLedDetectorSetIrCameraConfigBySlot),fd4fu1cziaI(sceHmd2InternalLedDetectorSetPriorityConfigBySlot). Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo2ThenMinusOne (libSceHmd2) - before
sceHmd2Initializethe console returns -1 for a first argument of 0 to 2 and0x8a720009for 3 to 5, 8, 16, 255 and -1; the other arguments are not looked at:UxMg7iL4nRs,K1GELwlaaGc(sceHmd2InternalImageSetConfigBySlot). Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo2ThenError1002 (libSceHmd2) - before
sceHmd2Initializethe console returns0x8a721002for a first argument of 0 to 2 and0x8a720009for 3 to 5, 8, 16, 255 and -1; the other arguments are not looked at:RFn39VCHjGY. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo2ThenError1003 (libSceHmd2) - before
sceHmd2Initializethe console returns0x8a721003for a first argument of 0 to 2 and0x8a720009for 3 to 5, 8, 16, 255 and -1; the other arguments are not looked at:FRoSjceDv10. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2SlotUpTo2CheckSecondThenError002C (libSceHmd2) - before
sceHmd2Initializethe console returns0x8a72002cfor a first argument of 0 to 2 and0x8a720009for 3 to 5, 8, 16, 255 and -1; a null second argument returns0x8a720008even with an invalid first argument:wQ44gBwBw44. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
Hmd2IndexZeroCheckSecondThenZero (libSceHmd2) - before
sceHmd2Initializethe console returns 0 for a first argument of 0 and0x8a72100ffor 1 to 5, 8, 16, 255 and -1; a null second argument returns0x8a720008even with a nonzero first argument. Its third to sixth arguments answered0x8a72100fwhen null with a nonzero first argument, which does not separate them from the first-argument check, so they are not looked at:wiv8+7ogrq0. Measured from a payload process on firmware 13.60 (probeshmd2nandhmd2x); the meaning of the arguments and the behaviour after initialization are not measured, and the handler throws oncesceHmd2Initializehas succeeded -
FBUEhH9tQ1A (libSceHmd2) - left unimplemented: before initialization it writes the 32-bit value 9 through its second argument and returns 0 when its first argument points at zeroed memory, but returns
0x8a720001without writing when that memory holds 0xAA bytes, and its fourth to sixth arguments answer0x8a720001when null, so the first argument is an in-out structure whose fields are not known -
libSceHmd2 gaze exports - gaze argument registers and input/output directions are recovered. Result queries take a 16-byte size/handle parameter. The 24-byte foveated result contains size, status and a three-float direction; its trailing four bytes are untouched. The 56-byte full result still needs its eye-field semantics. Object selection uses a 120-byte parameter and 56-byte result whose fields remain incomplete. Its initialization and memory-query structures are recovered, including the 32-bit object count and memory size, memory pointer and 64-bit alignment. Calibration data descriptors contain a pointer and signed 32-bit size; calibration status contains two 32-bit selectors and three floats. The underlying calibration blob formats remain incomplete. Raw gaze input is mutable. CalibrationPoint is three floats passed by value in two SIMD registers; SetIpdOffset takes a byte and a float.
-
libSceHmd2 reprojection exports - frame identifiers and predicted display times are 64-bit. Event setters accept a kernel event queue and 32-bit event ID, consumed by sceKernelTriggerUserEvent. Mirroring uses two memory pointers and a separate 32-byte mode/reserved option. Status and current-output queries write 104 and 32 bytes; those field layouts and the reprojection initialization fields remain incomplete. In a session on firmware 13.40 (PPSA01317) GetPredictedDisplayTime answered 0x8A720019 for frame ids 0, 1 and 0x123456789 and 0x8A720008 for a null output. Positional-reprojection mode is a byte with values 0 through 5, not a boolean.
-
Reprojection parameter submission - SetParam and SetParamWithBuffer take a 32-bit buffer-set ID, 64-bit frame ID, parameter pointer and reserved register slot. The parameter contains a layer pointer, signed count and optional 128-byte flags/reserved structure; plain and buffered layer strides are 328 and 472 bytes. Layer union fields remain incomplete. SetRenderConfig consumes three 64-bit slots; only bits 0 and 32 of the first can be nonzero, and in a session on firmware 13.40 (PPSA01317), (0, 1, 1) and (2, 0, 0) answered 0x8A720009. SetParam answered 0x8029000A for (16, 0, buffer, 0) and 0x80290002 for (0, 0, NULL, 0) in the same session. SetParam and SetParamWithBuffer remain unimplemented.
-
Older callable NIDs: 7 unidentified exports have unverified names, signatures and behavior. These are throwing import-resolution placeholders; no functionality is implemented. No matching NIDs were found in the later module inventory.