unit kern_regmgr; {$mode ObjFPC}{$H+} {$CALLING SysV_ABI_CDecl} interface const SCE_REGMGR_ENT_KEY_NP_debug =$19810000; SCE_REGMGR_ENT_KEY_BROWSER_DEBUG_notification =$3CC80700; SCE_REGMGR_ENT_KEY_DEVENV_TOOL_trc_notify =$78026400; SCE_REGMGR_ENT_KEY_DEVENV_TOOL_sys_prx_preload=$78028A00; SCE_REGMGR_ENT_KEY_DEVENV_TOOL_use_default_lib=$78028300; function sys_regmgr_call(op,key:DWORD;presult,pvalue:Pointer;vlen:QWORD):Integer; function sys_workaround8849(key:DWORD):Integer; implementation uses errno, systm, kern_thr; type t_encoded_id=packed record data :array[0..3] of Byte; table :Byte; index :Byte; checksum:Word; end; function sys_regmgr_call(op,key:DWORD;presult,pvalue:Pointer;vlen:QWORD):Integer; label _err; var kret:DWORD; data:packed record enc :t_encoded_id; val1:DWORD; val2:DWORD; end; begin kret:=0; if (presult=nil) then begin kret:=$800d0202; goto _err; end; case op of $19:begin //sceRegMgrNonSysGetInt Result:=copyin(pvalue,@data,16); if (Result<>0) then begin kret:=$800d020f; goto _err; end; case qword(data.enc) of QWORD($0C82671ADF0EEB34):data.val2:=0; //_malloc_init_lv2 QWORD($1AC46343411B3F40):data.val2:=0; //libSceSysmodule (bit 1,2 -> load debug lib) QWORD($503F69BDE385A6AC):data.val2:=0; //libSceSysmodule (print errors?) QWORD($2D946F62AEF8F878):data.val2:=0; //libSceSysmodule (preload module?) QWORD($1BE26343C3D71F40):data.val2:=0; //libkernel QWORD($68436EECF1CFD447):data.val2:=0; //libSceLibcInternal (sceLibcHeapGetTraceInfo -> get_segment_info) else begin Writeln(' enc:0x',HexStr(qword(data.enc),16),' val1:0x',HexStr(data.val1,8),' val12:0x',HexStr(data.val2,8)); end; end; Result:=copyout(@data,pvalue,vlen); if (Result<>0) then begin kret:=$800d0210; goto _err; end; end; else begin Writeln('Unhandled regmgr op:0x',HexStr(op,4)); Assert(False); end; end; _err: Result:=copyout(@kret,presult,SizeOf(DWORD)); end; function sys_workaround8849(key:DWORD):Integer; var td:p_kthread; begin td:=curkthread; if (td=nil) then Exit(-1); Result:=0; case key of SCE_REGMGR_ENT_KEY_NP_debug :td^.td_retval[0]:=0; //nop SCE_REGMGR_ENT_KEY_BROWSER_DEBUG_notification :td^.td_retval[0]:=0; //nop SCE_REGMGR_ENT_KEY_DEVENV_TOOL_trc_notify :td^.td_retval[0]:=0; //nop SCE_REGMGR_ENT_KEY_DEVENV_TOOL_sys_prx_preload:td^.td_retval[0]:=0; //nop SCE_REGMGR_ENT_KEY_DEVENV_TOOL_use_default_lib:td^.td_retval[0]:=0; //nop else Result:=EINVAL; end; end; end.