SceCompat: Difference between revisions
CelesteBlue (talk | contribs) |
CelesteBlue (talk | contribs) No edit summary |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
== Module == | == Module == | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Version | ! Version !! World !! Privilege | ||
|- | |- | ||
| 1.69 | | 1.69-3.65 || Non-secure || Kernel | ||
|} | |} | ||
Line 46: | Line 43: | ||
typedef struct SceCompatAllocCdramWithHoleParam { // size is 8 on FW 3.60 | typedef struct SceCompatAllocCdramWithHoleParam { // size is 8 on FW 3.60 | ||
void * | void *pCachedCdramBase; | ||
void * | void *pUncachedCdramBase; | ||
} SceCompatAllocCdramWithHoleParam; | } SceCompatAllocCdramWithHoleParam; | ||
Line 53: | Line 50: | ||
SCE_COMPAT_CACHE_MODE_NONE = 0, | SCE_COMPAT_CACHE_MODE_NONE = 0, | ||
SCE_COMPAT_CACHE_MODE_INVALIDATE = 1, | SCE_COMPAT_CACHE_MODE_INVALIDATE = 1, | ||
SCE_COMPAT_CACHE_MODE_CLEAN_INVALIDATE = 2 | SCE_COMPAT_CACHE_MODE_CLEAN_INVALIDATE = 2, | ||
SCE_COMPAT_CACHE_MODE_CLEAN = 3 | SCE_COMPAT_CACHE_MODE_CLEAN = 3 | ||
} SceCompatCacheMode; | } SceCompatCacheMode; | ||
Line 139: | Line 136: | ||
|} | |} | ||
On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6. | On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6.61, it returns 661. | ||
<source lang="C">int sceCompatGetPspSystemSoftwareVersionForVsh(void);</source> | <source lang="C">int sceCompatGetPspSystemSoftwareVersionForVsh(void);</source> | ||
Line 167: | Line 164: | ||
|} | |} | ||
Calls sceIoDevctlForDriver("ux0", 0x3001, NULL, 0, | Calls sceIoDevctlForDriver("ux0", 0x3001, NULL, 0, pInfo, sizeof(SceIoDevInfo));. | ||
<source lang="C">int sceCompatGetDevInf(SceIoDevInfo *pInfo);</source> | <source lang="C">int sceCompatGetDevInf(SceIoDevInfo *pInfo);</source> | ||
Line 317: | Line 314: | ||
<source lang="C"> | <source lang="C"> | ||
// some_id must be between 0 and | // some_id must be between 0 and 7. 3 seems disabled. | ||
int sceCompatReadShared32(SceUInt32 some_id, SceUInt32 *pValue); | int sceCompatReadShared32(SceUInt32 some_id, SceUInt32 *pValue); | ||
</source> | </source> | ||
Line 480: | Line 477: | ||
| 0.990 || not present | | 0.990 || not present | ||
|- | |- | ||
| 1.69 || 0x6E8E3BA8 | | 1.69-2.06 || 0x6E8E3BA8 | ||
|- | |- | ||
| 3.60 || not present | | 3.60 || not present | ||
|} | |} | ||
<source lang="C">int sceCompatAllocCdram( | <source lang="C">int sceCompatAllocCdram(void **ppCachedCdramBase, void **ppUncachedCdramBase);</source> | ||
=== sceCompatAllocCdramWithHole === | === sceCompatAllocCdramWithHole === | ||
Line 497: | Line 494: | ||
|} | |} | ||
<source lang="C">int sceCompatAllocCdramWithHole( | <source lang="C">int sceCompatAllocCdramWithHole(SceCompatAllocCdramWithHoleParam *pCdram);</source> | ||
=== sceCompatMapDDR === | === sceCompatMapDDR === | ||
Line 524: | Line 521: | ||
|} | |} | ||
On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6. | On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6.61, it returns 661. | ||
<source lang="C">int sceCompatGetPspSystemSoftwareVersion(void);</source> | <source lang="C">int sceCompatGetPspSystemSoftwareVersion(void);</source> | ||
Line 676: | Line 673: | ||
|} | |} | ||
Loads <code>vs0:app/NPXS10028/pcff. | Loads <code>vs0:app/NPXS10028/pcff.skprx</code> and <code>os0:kd/pcbc.skprx</code>, then <code>compat_sm.self</code>, calls <code>SceGrabForDriver_072B8D93(param)</code>, and then issues [[Secure_Modules_Functions#0x10006_-_sceCompatSecLoadSCBootCode|compat_sm command 0x10006]]. | ||
<source lang="C">int sceCompatInitEx(int param);</source> | <source lang="C">int sceCompatInitEx(int param);</source> | ||
Line 724: | Line 721: | ||
|} | |} | ||
<source lang="C">int sceCompatLCDCInit(void * | <source lang="C">int sceCompatLCDCInit(void *pFrameBufBase);</source> | ||
=== sceCompatLCDCExec === | === sceCompatLCDCExec === | ||
Line 842: | Line 839: | ||
<source lang="C">int sceCompatReadShared(SceUInt32 offset, void *pBuf, SceSize size);</source> | <source lang="C">int sceCompatReadShared(SceUInt32 offset, void *pBuf, SceSize size);</source> | ||
[[Category:ARM]] | |||
[[Category:Kernel]] | |||
[[Category:Modules]] | [[Category:Modules]] | ||
[[Category: | [[Category:Library]] |
Latest revision as of 22:26, 16 July 2023
This is the primary kernel interface to the PSP Emulator.
Module
Version | World | Privilege |
---|---|---|
1.69-3.65 | Non-secure | Kernel |
Libraries
Known NIDs
Version | Name | World | Visibility | NID |
---|---|---|---|---|
3.60-3.65 | SceCompatForDriver | Non-secure | Kernel | 0x7CFA62CD |
3.60-3.65 | SceCompatForVsh | Non-secure | User | 0xF68A1AD0 |
0.990-3.65 | SceCompat | Non-secure | User | 0x0F35909D |
Types
typedef struct SceCompatSettings { // size is 8 on FW 1.03 SceUInt32 disp_filter : 1; SceUInt32 camera_direction : 1; SceUInt32 ra_up : 4; SceUInt32 ra_down : 4; SceUInt32 ra_left : 4; SceUInt32 ra_right : 4; SceUInt32 reserved : 46; } SceCompatSettings; typedef struct SceCompatInitParam { // size is 0x40 on FW 1.03 char unk[0x40]; } SceCompatInitParam; typedef struct SceCompatAllocCdramWithHoleParam { // size is 8 on FW 3.60 void *pCachedCdramBase; void *pUncachedCdramBase; } SceCompatAllocCdramWithHoleParam; typedef enum SceCompatCacheMode { SCE_COMPAT_CACHE_MODE_NONE = 0, SCE_COMPAT_CACHE_MODE_INVALIDATE = 1, SCE_COMPAT_CACHE_MODE_CLEAN_INVALIDATE = 2, SCE_COMPAT_CACHE_MODE_CLEAN = 3 } SceCompatCacheMode; typedef struct SceCompatCtrl { // size is 0x10 on FW 3.60 SceUInt32 timestamp; SceUInt32 buttons; SceUInt8 Lx; SceUInt8 Ly; SceUInt8 Rx; SceUInt8 Ry; SceUInt32 reserved; } SceCompatCtrl; typedef enum SceCompatPeripheralStateId { SCE_COMPAT_PERIPHERAL_STATE_IS_HEADPHONE_EXIST = 1, SCE_COMPAT_PERIPHERAL_STATE_GET_BATTERY_LIFE_PERCENT = 2, SCE_COMPAT_PERIPHERAL_STATE_GET_BATTERY_LIFE_TIME = 3, SCE_COMPAT_PERIPHERAL_STATE_IS_SUSPEND_REQUIRED = 4 } SceCompatPeripheralStateId;
SceCompatForDriver
sceCompatSetColorSpaceModeForDriver
Version | NID |
---|---|
0.990 | not present |
3.60 | 0x6EBD9E01 |
Name might also be sceCompatSetDisplayConfigForDriver.
// mode can be 0, 1 or 2 int sceCompatSetColorSpaceModeForDriver(SceUInt32 mode);
SceCompatForVsh
sceCompatGetTitleListForVsh
Version | NID |
---|---|
0.990 | not present |
3.60 | 0x4915DEE7 |
Reads ur0:emu_list/title_list.bin.
// size must be 100 int sceCompatGetTitleListForVsh(void *pBuf, SceSize size);
sceCompatIsPocketStationTitleForVsh
Version | NID |
---|---|
0.990 | not present |
3.60 | 0x70997F92 |
The first 4 characters of the Title Id are letters. The remaining numbers are converted to digital values with strtol,
XORed then compared to SceCompat hardcoded values.
SceBool sceCompatIsPocketStationTitleForVsh(const char *titleId);
sceCompatGetPspSystemSoftwareVersionForVsh
Version | NID |
---|---|
0.990 | not present |
3.60 | 0x9C107CC9 |
On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6.61, it returns 661.
int sceCompatGetPspSystemSoftwareVersionForVsh(void);
SceCompat
sceCompatGetUpdateState
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x0CDE9EC5 |
int sceCompatGetUpdateState(void);
sceCompatGetDevInf
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0x138006A8 |
Calls sceIoDevctlForDriver("ux0", 0x3001, NULL, 0, pInfo, sizeof(SceIoDevInfo));.
int sceCompatGetDevInf(SceIoDevInfo *pInfo);
sceCompatGetPeripheralState
Version | NID |
---|---|
0.990-3.60 | 0x176B2906 |
int sceCompatGetPeripheralState(SceCompatPeripheralStateId stateId);
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0x1CD51530 |
// some_id must be between 0x80 and 0x8A int sceCompatWriteShared32(SceUInt32 some_id, SceUInt32 value);
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x2306FFED |
Write pCtrl to Shared SRAM.
int sceCompatWriteSharedCtrl(SceCompatCtrl *pCtrl);
sceCompatSetSettings
Version | NID |
---|---|
0.990 | not present |
1.03-1.69 | 0x312782DC |
3.60 | not present |
int sceCompatSetSettings(SceCompatSettings settings);
sceCompatSuspendResume
Version | NID |
---|---|
0.990 | not present |
1.69-3.60 | 0x324112CA |
// mode: 0: suspend, 1: resume // step: 1: first step, 2: second step int sceCompatSuspendResume(SceUInt32 mode, SceUInt32 step);
sceCompatSetDisplayConfig
Version | NID |
---|---|
0.990-1.03 | not present |
1.69-3.60 | 0x32BA3DCF |
// head must be SCE_DISPLAY_HEAD_MAIN_LCD_OLED // mode can be 0, 1 or 2 int sceCompatSetDisplayConfig(SceDisplayHead head, SceUInt32 mode);
sceCompatRegRead
Version | NID |
---|---|
0.990-1.69 | 0x4521505D |
3.60 | not present |
// unk_id: if unk_id equals 0, offset + size must be less than 0x3a5d, // else if unk_id equals 1, offset + size must be less than 0x20000 int sceCompatRegRead(SceUInt32 unk_id, SceUInt32 offset, void *pBuf, SceSize size);
sceCompatAvailableColorSpaceSetting
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x456226DD |
Returns true only if (displayDeviceType & 3) equals 3.
SceBool sceCompatAvailableColorSpaceSetting(void);
sceCompatCache
Version | NID |
---|---|
0.940-3.60 | 0x6777390E |
int sceCompatCache(SceCompatCacheMode mode, void *base, SceSize size);
sceCompatWaitSpecialRequest
Version | NID |
---|---|
0.940-3.60 | 0x714F7ED6 |
int sceCompatWaitSpecialRequest(SceUInt32 req_id);
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0x73AA4871 |
// some_id must be between 0 and 7. 3 seems disabled. int sceCompatReadShared32(SceUInt32 some_id, SceUInt32 *pValue);
sceCompatGetSettings
Version | NID |
---|---|
0.990 | not present |
1.03-1.69 | 0x782C980E |
3.60 | not present |
int sceCompatGetSettings(SceCompatSettings *pSettings);
sceCompatIsPocketStationTitle
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x7DCFBCCE |
The first 4 characters of the Title Id are letters. The remaining numbers are converted to digital values with strtol,
XORed then compared to SceCompat hardcoded values.
SceBool sceCompatIsPocketStationTitle(const char *titleId);
sceCompatWaitAndGetRequest
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x8176C238 |
int sceCompatWaitAndGetRequest(SceUInt32 req_id, SceUInt32 a2);
sceCompatSetUpdateState
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x8A44206F |
// unsure if there is an argument int sceCompatSetUpdateState(void);
sceCompatStart
Version | NID |
---|---|
0.940-3.60 | 0x8CA1632D |
int sceCompatStart(void);
sceCompatPrepareLoad
Version | NID |
---|---|
0.940 | not present |
1.03 | 0x78E469D6 |
3.60 | not present |
Loads Pcff (PSP Compat Flash Files) and Pcbc (PSP Compat Boot Code).
int sceCompatPrepareLoad(void);
sceCompatRegWrite
Version | NID |
---|---|
0.990-1.69 | 0x912B1C28 |
3.60 | not present |
// unk_id: if unk_id equals 0, offset + size must be less than 0x3a5d, // else if unk_id equals 1, offset + size must be less than 0x20000 int sceCompatRegWrite(SceUInt32 unk_id, SceUInt32 offset, const void *pBuf, SceSize size);
sceCompatIdStorageLookup
Version | NID |
---|---|
0.940-3.60 | 0x94AAA245 |
int sceCompatIdStorageLookup(SceUInt16 key, SceUInt32 offset, void *pBuf, SceSize size);
sceCompatCheckPocketStation
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0x96FC2A87 |
Checks PocketStation RIF.
int sceCompatCheckPocketStation(void);
sceCompatGetTitleList
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0x99F13E04 |
Reads ur0:emu_list/title_list.bin.
// size must be 100 int sceCompatGetTitleList(void *pBuf, SceSize size);
sceCompatGetCurrentSecureTick
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0xA073EBEE |
int sceCompatGetCurrentSecureTick(SceRtcTick *pTick);
sceCompatAllocCdram
Version | NID |
---|---|
0.990 | not present |
1.69-2.06 | 0x6E8E3BA8 |
3.60 | not present |
int sceCompatAllocCdram(void **ppCachedCdramBase, void **ppUncachedCdramBase);
sceCompatAllocCdramWithHole
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0xA5039FFA |
int sceCompatAllocCdramWithHole(SceCompatAllocCdramWithHoleParam *pCdram);
sceCompatMapDDR
Version | NID |
---|---|
0.990 | not present |
1.03 | 0xC6B19D35 |
3.60 | not present |
// size must be 0x4000000 (64MB) int sceCompatMapDDR(SceUID memblock_uid, SceSize size);
sceCompatGetPspSystemSoftwareVersion
Version | NID |
---|---|
0.990-3.60 | 0xB113DCC0 |
On emulated PSP FW 6.60, it returns 660. On emulated PSP FW 6.61, it returns 661.
int sceCompatGetPspSystemSoftwareVersion(void);
sceCompatFrameBufferInit
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0xBC0E2B4C |
int sceCompatFrameBufferInit(void *base);
sceCompatLCDCSync
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0xBD177787 |
int sceCompatLCDCSync(void);
sceCompatWaitIntr
Version | NID |
---|---|
0.990-1.03 | not present |
3.60 | 0xC1E14CF5 |
sceCompatGetRequest
Version | NID |
---|---|
0.990-1.03 | not present |
1.69 | 0xCB9F607B |
3.60 | not present |
sceCompatDatRead
Version | NID |
---|---|
0.990-3.60 | 0xCBE73EBE |
Reads act.dat.
// index must be 0 // offset + size must be lower or equal to 0x1038 int sceCompatDatRead(SceUInt32 index, SceUInt32 offset, void *pBuf, SceSize size);
sceCompatReturnValueEx
Version | NID |
---|---|
0.990 | not present |
1.69-3.60 | 0xCC02A9FF |
sceCompatGetStatus
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0xD2E3370E |
int sceCompatGetStatus(void);
sceCompatInterrupt
Version | NID |
---|---|
0.940-3.60 | 0xD6AA36DD |
Set a custom SceCompatMailbox address.
// some_id must be between 0 and 15 int sceCompatInterrupt(SceUInt32 some_id);
sceCompatSetRif
Version | NID |
---|---|
0.990 | not present |
1.03-3.60 | 0xD8B69F23 |
// Example of entitlementId: AA0000-AAAA00000_00-0000000000000000 int sceCompatSetRif(const char *entitlementId);
sceCompatGetPrimaryHead
Version | NID |
---|---|
0.990 | not present |
1.69-3.60 | 0xDC9EE33A |
SceDisplayHead sceCompatGetPrimaryHead(void);
sceCompatSetSuspendSema
Version | NID |
---|---|
0.990 | not present |
1.69-3.60 | 0xDD30239E |
int sceCompatSetSuspendSema(SceUID sema_id_0, SceUID sema_id_1);
sceCompatInitEx
Version | NID |
---|---|
0.990-1.03 | not present |
1.69-3.60 | 0xE97C1B5F |
Loads vs0:app/NPXS10028/pcff.skprx
and os0:kd/pcbc.skprx
, then compat_sm.self
, calls SceGrabForDriver_072B8D93(param)
, and then issues compat_sm command 0x10006.
int sceCompatInitEx(int param);
sceCompatUninit
Version | NID |
---|---|
0.990-3.60 | 0xEF929397 |
int sceCompatUninit(void);
sceCompatStop
Version | NID |
---|---|
0.990-3.60 | 0xFCE2422F |
int sceCompatStop(void);
sceCompatInit
Version | NID |
---|---|
0.940-1.03 | 0xB9DBD54A |
3.60 | not present |
Loads Pcff (PSP Compat Flash Files) and Pcbc (PSP Compat Boot Code).
int sceCompatInit(SceSize size, SceUInt32 a2, SceCompatInitParam *pParam);
sceCompatLCDCInit
Version | NID |
---|---|
0.940-0.990 | 0x3021D626 |
1.03-3.60 | not present |
int sceCompatLCDCInit(void *pFrameBufBase);
sceCompatLCDCExec
Version | NID |
---|---|
0.940-0.990 | 0x7E3E266D |
1.03-3.60 | not present |
int sceCompatLCDCExec(void);
sceCompatResume
Version | NID |
---|---|
0.990 | 0xCA184D5B |
1.03-3.60 | not present |
// step: must be either 1 (resume Pervasive, restore CPU speed) or 2 (init lcd dmac, write resume payload, reload act.dat) int sceCompatResume(SceUInt32 step, int maybe_addr);
sceCompatSuspend
Version | NID |
---|---|
0.990 | 0x9EFFE36E |
1.03-3.60 | not present |
// step: must be either 1 (black screen) or 2 (suspend Pervasive, slow down CPU, wipe act.dat in memory) int sceCompatSuspend(SceUInt32 step);
Version | NID |
---|---|
0.990 | 0xC37A463C |
1.03-3.60 | not present |
Writes to SceCompatSharedSram.
int sceCompatWriteShared(SceUInt32 offset, const void *pBuf, SceSize size);
sceCompatWaitRequest
Version | NID |
---|---|
0.990-1.03 | 0x434BDAB0 |
3.60 | not present |
int sceCompatWaitRequest(SceUInt32 req_id);
sceCompatReturnResult
Version | NID |
---|---|
0.990 | 0x02F5CF19 |
1.03-3.60 | not present |
int sceCompatReturnResult(SceUInt32 req_id);
sceCompatReturnValue
Version | NID |
---|---|
0.990-1.03 | 0x61DB492A |
3.60 | not present |
int sceCompatReturnValue(SceUInt32 req_id, uint a2, uint a3);
sceCompatSetDisplayBuffer
Version | NID |
---|---|
0.990-1.03 | 0xC820EC43 |
3.60 | not present |
int sceCompatSetDisplayBuffer(const SceDisplayFrameBuf *pFrameBuf);
Version | NID |
---|---|
0.990 | 0xC983287E |
1.03-3.60 | not present |
int sceCompatReadShared(SceUInt32 offset, void *pBuf, SceSize size);