The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This is the primary kernel interface to the PSP Emulator.
Module
Version |
World |
Privilege
|
1.69-3.65 |
Non-secure |
Kernel
|
Libraries
Known NIDs
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);
sceCompatWriteShared32
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);
sceCompatWriteSharedCtrl
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);
sceCompatReadShared32
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);
sceCompatWriteShared
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);
sceCompatReadShared
Version |
NID
|
0.990 |
0xC983287E
|
1.03-3.60 |
not present
|
int sceCompatReadShared(SceUInt32 offset, void *pBuf, SceSize size);