fpPS4/fpPS4.lpr

796 lines
25 KiB
ObjectPascal
Raw Normal View History

2021-12-08 20:04:07 +00:00
uses
{$IFDEF Linux}
cmem,
cthreads,
{$ENDIF}
2022-05-31 07:20:10 +00:00
windows,
2021-12-08 20:04:07 +00:00
seh64,
2022-05-31 07:20:10 +00:00
Classes,
sysutils,
2021-12-08 20:04:07 +00:00
stub_manager,
2022-07-13 14:01:22 +00:00
sys_crt,
2022-05-31 07:20:10 +00:00
sys_types,
sys_pthread,
2022-11-09 13:46:13 +00:00
sys_path,
2021-12-08 20:04:07 +00:00
ps4libdoc,
2022-11-17 11:42:18 +00:00
ps4_libkernel,
ps4_libSceLibcInternal,
2022-10-12 06:49:52 +00:00
ps4_libSceScreenShot,
2022-09-20 17:57:07 +00:00
ps4_libSceRtc,
2022-07-14 11:59:03 +00:00
ps4_libSceNpSignaling,
ps4_libSceNpMatching2,
2022-07-06 09:41:39 +00:00
ps4_libSceRemoteplay,
2022-06-04 16:00:28 +00:00
ps4_libSceAjm,
2022-07-01 08:11:45 +00:00
ps4_libSceMouse,
2022-06-03 11:15:35 +00:00
ps4_libSceIme,
2022-10-18 13:42:07 +00:00
ps4_libSceMove,
2022-06-03 11:15:35 +00:00
ps4_libScePlayGo,
ps4_libSceDiscMap,
2022-05-31 07:20:10 +00:00
ps4_libSceAppContent,
2021-12-08 20:04:07 +00:00
ps4_libSceNet,
ps4_libSceHttp,
ps4_libSceGnmDriver,
ps4_libSceNpScore,
ps4_libSceNpTrophy,
ps4_libSceSystemService,
ps4_libSceNpManager,
2022-09-07 10:57:39 +00:00
ps4_libSceNpGameIntent,
2021-12-08 20:04:07 +00:00
ps4_libSceSaveData,
ps4_libSceDialogs,
ps4_libSceUserService,
2022-07-14 11:59:03 +00:00
ps4_libSceAudioOut,
2021-12-08 20:04:07 +00:00
ps4_libSceVideoOut,
ps4_libScePad,
2022-11-17 11:42:18 +00:00
ps4_libSceNpWebApi,
2021-12-08 20:04:07 +00:00
ps4_elf,
ps4_pthread,
ps4_program,
2022-05-31 07:20:10 +00:00
ps4_elf_tls,
2022-10-14 09:20:02 +00:00
ps4_videodrv,
vMemory,
vImageManager,
2022-05-31 07:20:10 +00:00
trace_manager;
2021-12-08 20:04:07 +00:00
function ParseCmd:Boolean;
var
i,n:Integer;
label
promo;
begin
if (ParamCount=0) then
begin
promo:
2022-06-29 11:28:38 +00:00
Writeln('fpPS4 '+{$I tag.inc});
Writeln('Copyright (c) 2021-2022 by Red_prig');
2021-12-08 20:04:07 +00:00
Writeln('PS4 compatibility layer (emulator) on Free Pascal '+{$I %FPCVERSION%});
Writeln(' Parameters:');
Writeln(' -e <name> //decrypted elf or self file name');
2022-11-09 13:46:13 +00:00
Writeln(' -f <name> //folder of app (/app0)');
Writeln(' -p <name> //folder of patch (/app1)');
2021-12-08 20:04:07 +00:00
Writeln(' -s <name> //savedata path');
2022-10-14 09:20:02 +00:00
Writeln(' -h <name> //enable hack');
Writeln(' DEPTH_DISABLE_HACK //disable depth buffer');
Writeln(' COMPUTE_DISABLE_HACK //disable compute shaders');
Writeln(' MEMORY_BOUND_HACK //limit the amount of GPU allocated memory (iGPU)');
Writeln(' IMAGE_TEST_HACK //always mark that the texture has changed');
Writeln(' IMAGE_LOAD_HACK //never reload texture');
2021-12-08 20:04:07 +00:00
Exit(False);
end;
n:=-1;
For i:=1 to ParamCount do
begin
case LowerCase(ParamStr(i)) of
'-e':n:=0;
'-f':n:=1;
2022-11-09 13:46:13 +00:00
'-p':n:=2;
'-s':n:=3;
'-h':n:=4;
2021-12-08 20:04:07 +00:00
else
if (n<>-1) then
begin
Case n of
0:begin
2022-11-09 13:46:13 +00:00
if (ps4_app.app0_file<>'') then Goto promo;
ps4_app.app0_file:=Trim(ParamStr(i));
if (ps4_app.app0_path='') then
2021-12-08 20:04:07 +00:00
begin
2022-11-09 13:46:13 +00:00
ps4_app.app0_path:=ExtractFileDir(ps4_app.app0_file);
if (ExcludeLeadingPathDelimiter(ps4_app.app0_path)='') then ps4_app.app0_path:=GetCurrentDir;
2021-12-08 20:04:07 +00:00
end;
end;
1:begin
2022-11-09 13:46:13 +00:00
ps4_app.app0_path:=Trim(ParamStr(i));
if (ExcludeLeadingPathDelimiter(ps4_app.app0_path)='') then ps4_app.app0_path:=GetCurrentDir;
2021-12-08 20:04:07 +00:00
end;
2:begin
2022-11-09 13:46:13 +00:00
ps4_app.app1_path:=Trim(ParamStr(i));
if (ExcludeLeadingPathDelimiter(ps4_app.app1_path)='') then ps4_app.app1_path:=GetCurrentDir;
2021-12-08 20:04:07 +00:00
end;
2022-10-14 09:20:02 +00:00
3:begin
2022-11-09 13:46:13 +00:00
ps4_app.save_path:=Trim(ParamStr(i));
end;
4:begin
2022-10-14 09:20:02 +00:00
case UpperCase(ParamStr(i)) of
'DEPTH_DISABLE_HACK' :ps4_videodrv.DEPTH_DISABLE_HACK:=True;
'COMPUTE_DISABLE_HACK':ps4_videodrv.COMPUTE_DISABLE_HACK:=True;
'MEMORY_BOUND_HACK' :vMemory.MEMORY_BOUND_HACK:=True;
'IMAGE_TEST_HACK' :vImageManager.IMAGE_TEST_HACK:=True;
'IMAGE_LOAD_HACK' :vImageManager.IMAGE_LOAD_HACK:=True;
else;
end;
end;
2021-12-08 20:04:07 +00:00
end;
n:=-1;
end;
end;
end;
2022-11-09 13:46:13 +00:00
if (ps4_app.app0_file='') or (ps4_app.app0_path='') or (ps4_app.save_path='') then Goto promo;
if (ps4_app.app1_path=ps4_app.app0_path) then
begin
ps4_app.app1_path:='';
end;
if not FileExists(ps4_app.app0_file) then
begin
Writeln(StdErr,'File not found:',ps4_app.app0_file);
Writeln;
Goto promo;
end;
2021-12-08 20:04:07 +00:00
2022-11-09 13:46:13 +00:00
if not DirectoryExists(ps4_app.app0_path) then
2021-12-08 20:04:07 +00:00
begin
2022-11-09 13:46:13 +00:00
Writeln(StdErr,'Path not found:',ps4_app.app0_path);
2021-12-08 20:04:07 +00:00
Writeln;
Goto promo;
end;
2022-11-09 13:46:13 +00:00
if (ps4_app.app1_path<>'') then
if not DirectoryExists(ps4_app.app1_path) then
2021-12-08 20:04:07 +00:00
begin
2022-11-09 13:46:13 +00:00
Writeln(StdErr,'Path not found:',ps4_app.app1_path);
2021-12-08 20:04:07 +00:00
Writeln;
Goto promo;
end;
Result:=True;
end;
{
type
_TElf_node=class(TElf_node)
end;
procedure Print_libs(node:TElf_node);
var
i,l:SizeInt;
lib:PLIBRARY;
begin
l:=Length(_TElf_node(node).aLibs);
if (l<>0) then
begin
For i:=0 to l-1 do
begin
lib:=_TElf_node(node).aLibs[i];
Writeln(hexStr(lib));
if lib<>nil then
Writeln(lib^.Import,' ',lib^.strName);
end;
end;
end;
}
var
Stub:TStubMemoryProc;
procedure _nop_stub; assembler; nostackframe;
asm
xor %rax,%rax
end;
2022-05-31 07:20:10 +00:00
procedure print_stub(nid:QWORD;lib:PLIBRARY); MS_ABI_Default;
2021-12-08 20:04:07 +00:00
begin
2022-07-13 14:01:22 +00:00
Writeln(StdErr,'nop nid:',lib^.strName,':',HexStr(nid,16),':',ps4libdoc.GetFunctName(nid));
2022-06-03 22:23:50 +00:00
//DebugBreak;
2022-05-31 07:20:10 +00:00
Sleep(INFINITE);
2021-12-08 20:04:07 +00:00
//readln;
//Print_libs(ps4_app.GetFile('libc.prx'));
end;
function ps4_sceSslInit(poolSize:size_t):Integer; SysV_ABI_CDecl;
begin
Writeln('sceSslInit:',poolSize);
Result:=3;
end;
2022-09-06 12:53:07 +00:00
function ps4_sceHttp2Init(libnetMemId,libsslCtxId:Integer;
poolSize:size_t;
maxConcurrentRequest:Integer):Integer; SysV_ABI_CDecl;
begin
Writeln('sceHttp2Init:',poolSize);
Result:=3;
end;
2022-06-01 14:05:23 +00:00
function ps4_sceVoiceQoSInit(
pMemBlock:Pointer;
memSize:DWORD;
appType:Integer):Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
2022-06-06 08:50:39 +00:00
function ps4_sceUltInitialize():Integer; SysV_ABI_CDecl;
begin
Result:=0;
end;
2022-10-21 08:32:55 +00:00
function ps4_sceGameLiveStreamingInitialize(heapSize:qword):Integer; SysV_ABI_CDecl;
begin
Writeln('sceGameLiveStreamingInitialize:',heapSize);
Result:=0;
end;
2022-10-27 08:25:00 +00:00
function ps4_sceSharePlayInitialize(pHeap:Pointer;heapSize:qword):Integer; SysV_ABI_CDecl;
begin
Writeln('sceSharePlayInitialize:',HexStr(pHeap),':',heapSize);
Result:=0;
end;
2021-12-08 20:04:07 +00:00
function ResolveImport(elf:Telf_file;Info:PResolveImportInfo;data:Pointer):Pointer;
var
lib:PLIBRARY;
begin
Result:=nil;
//cache
Result:=Info^.lib^.get_proc(Info^.nid);
if (Result<>nil) then
begin
//Writeln('Cache^:',Info^.lib^.strName,':',ps4libdoc.GetFunctName(Info^.Nid));
Exit;
end;
lib:=ps4_app.GetLib(Info^.lib^.strName);
if (lib<>nil) then
begin
Result:=lib^.get_proc(Info^.Nid);
end;
2022-10-12 06:49:52 +00:00
//Writeln('Resolve:',Info^.lib^.strName,':',ps4libdoc.GetFunctName(Info^.Nid));
2022-05-31 07:20:10 +00:00
2021-12-08 20:04:07 +00:00
if (Result=nil) then
begin
Case Info^.lib^.strName of
'libSceSsl':
Case Info^.nid of
2022-05-31 07:20:10 +00:00
QWORD($85DA551140C55B7B):Result:=@ps4_sceSslInit;
end;
2022-09-06 12:53:07 +00:00
'libSceHttp2':
Case Info^.nid of
QWORD($DC909EDE509B43C0):Result:=@ps4_sceHttp2Init;
end;
2022-06-01 14:05:23 +00:00
'libSceVoiceQoS':
Case Info^.nid of
QWORD($53C21F365EBF0ACB):Result:=@ps4_sceVoiceQoSInit;
end;
2022-06-06 08:50:39 +00:00
'libSceUlt':
Case Info^.nid of
QWORD($859220D44586B073):Result:=@ps4_sceUltInitialize;
end;
2022-10-21 08:32:55 +00:00
'libSceGameLiveStreaming':
Case Info^.nid of
QWORD($92F604C369419DD9):Result:=@ps4_sceGameLiveStreamingInitialize;
end;
2022-10-27 08:25:00 +00:00
'libSceSharePlay':
Case Info^.nid of
QWORD($8ACAEEAAD86961CC):Result:=@ps4_sceSharePlayInitialize;
end;
2021-12-08 20:04:07 +00:00
end;
end;
2022-09-07 10:57:39 +00:00
{
2022-10-25 19:43:08 +00:00
if (Result<>nil) and ((Info^.sType=STT_FUN) or (Info^.sType=STT_SCE)) then //trace
2022-06-03 22:23:50 +00:00
begin
2022-09-07 10:57:39 +00:00
Case Info^.lib^.strName of
2022-11-01 14:26:18 +00:00
'libSceNpToolkit':;
2022-10-19 13:02:47 +00:00
'libSceSaveDataDialog':;
'libSceVideoOut':;
2022-09-20 17:57:07 +00:00
'libSceSystemService':;
'libSceUserService':;
'libSceNetCtl':;
'libSceNpManager':;
'libSceNpManagerForToolkit':;
'libScePad':;
'libSceFios2':;
2022-09-07 10:57:39 +00:00
'libSceGnmDriver':;
'libSceAjm':;
'libSceAudioOut':;
'libc':;
'libSceLibcInternal':;
2022-10-27 08:25:00 +00:00
'libScePosix':;
'libSceDiscMap':;
2022-09-07 10:57:39 +00:00
else
Case RawByteString(ps4libdoc.GetFunctName(Info^.Nid)) of
2022-10-19 13:02:47 +00:00
'scePadGetControllerInformation':;
'scePadRead':;
'scePadSetVibration':;
'sceUserServiceGetLoginUserIdList':;
'sceSystemServiceGetStatus':;
'sceKernelDebugRaiseException':;
'sceKernelDebugRaiseExceptionOnReleaseMode':;
'_sigprocmask':;
'__error':;
2022-10-12 06:49:52 +00:00
'sceKernelClearEventFlag':;
'sceKernelWaitEventFlag':;
'sceKernelSetEventFlag':;
'sceNetCtlCheckCallbackForNpToolkit':;
'sceKernelReadTsc':;
2022-10-19 13:02:47 +00:00
'scePthreadCondSignal':;
'scePthreadCondTimedwait':;
2022-09-20 17:57:07 +00:00
'scePthreadYield':;
'nanosleep':;
2022-10-27 08:25:00 +00:00
'sceKernelGetProcessTime':;
2022-09-07 10:57:39 +00:00
'sceKernelGetProcessTimeCounter':;
2022-09-20 17:57:07 +00:00
'clock_gettime':;
'pthread_mutex_init':;
'sceKernelLseek':;
'scePthreadMutexDestroy':;
'sceKernelRead':;
2022-09-07 10:57:39 +00:00
'sceKernelSignalSema':;
'sceKernelWaitSema':;
'scePthreadMutexInit':;
'scePthreadMutexattrInit':;
'scePthreadMutexattrDestroy':;
'scePthreadMutexattrSettype':;
'scePthreadMutexTrylock':;
'scePthreadMutexLock':;
'scePthreadMutexUnlock':;
'pthread_self':;
'scePthreadSelf':;
'scePthreadEqual':;
'sceKernelGettimeofday':;
'sceKernelClockGettime':;
'pthread_mutex_lock':;
'pthread_mutex_unlock':;
'sceKernelPread':;
'sceKernelClose':;
'sceDiscMapIsRequestOnHDD':;
2022-09-20 17:57:07 +00:00
//'Unknow':;
2022-09-07 10:57:39 +00:00
'sceFiosIOFilterPsarcDearchiver':;
'sceFiosFHReadSync':;
'sceFiosFHTell':;
2022-11-09 13:46:13 +00:00
'sceNgs2VoiceGetState':;
'sceNgs2SystemRender':;
2022-09-07 10:57:39 +00:00
'sceAudioOutOutputs':;
'__tls_get_addr':;
'scePthreadRwlockRdlock':;
'scePthreadRwlockUnlock':;
2022-10-19 13:02:47 +00:00
'scePthreadCondBroadcast':;
2022-09-07 10:57:39 +00:00
'sceFiosFHCloseSync':;
'sceKernelStat':;
'sceKernelOpen':;
'sceKernelUsleep':;
'_write':;
else
begin
Result:=TStubMemoryTrace(Stub).NewTraceStub(Info^.Nid,Info^.lib,Result,@_trace_enter,@_trace_exit);
end;
end;
end;
2022-06-03 22:23:50 +00:00
end;
2022-09-07 10:57:39 +00:00
}
2022-05-31 07:20:10 +00:00
2021-12-08 20:04:07 +00:00
if (Result=nil) then
begin
2022-10-25 19:43:08 +00:00
if (Info^.sType=STT_FUN) or (Info^.sType=STT_SCE) then
2021-12-08 20:04:07 +00:00
begin
Result:=Stub.NewNopStub(Info^.Nid,Info^.lib,@print_stub);
end else
2022-10-25 19:43:08 +00:00
if (Info^.sBind<>STB_WEAK) then
2021-12-08 20:04:07 +00:00
begin
2022-07-14 20:16:23 +00:00
Writeln(StdErr,'Warn^:',Info^.lib^.strName,':',ps4libdoc.GetFunctName(Info^.Nid),':',HexStr(Info^.Nid,16));
2021-12-08 20:04:07 +00:00
end;
2022-10-07 14:21:05 +00:00
2021-12-08 20:04:07 +00:00
end;
if (Result<>nil) then //cache
begin
Info^.lib^.set_proc(Info^.nid,Result);
end;
end;
2022-05-31 07:20:10 +00:00
function ReloadImport(elf:Telf_file;Info:PResolveImportInfo;data:Pointer):Pointer;
var
node:Telf_file;
lib:PLIBRARY;
begin
//prev
Result:=Info^.lib^.get_proc(Info^.nid);
node:=Telf_file(data);
lib:=ps4_app.GetLib(Info^.lib^.strName);
if (lib=nil) then Exit;
if (lib^.parent<>node) then Exit;
Result:=lib^.get_proc(Info^.Nid);
//cache
Info^.lib^.set_proc(Info^.nid,Result);
end;
2022-11-09 13:46:13 +00:00
var
main:pthread;
{$R *.res}
procedure LoadProgram;
2021-12-08 20:04:07 +00:00
var
elf:Telf_file;
2022-11-09 13:46:13 +00:00
f:RawByteString;
begin
elf:=nil;
2021-12-08 20:04:07 +00:00
2022-11-09 13:46:13 +00:00
if (ps4_app.app1_path<>'') then
begin
//first try patch
f:='';
if (parse_filename('/app1/eboot.bin',f)=PT_FILE) then
begin
elf:=Telf_file(LoadPs4ElfFromFile(f));
end;
end;
2021-12-08 20:04:07 +00:00
2022-11-09 13:46:13 +00:00
if (elf=nil) then
begin
//second try app0_file
elf:=Telf_file(LoadPs4ElfFromFile(ps4_app.app0_file));
end;
2021-12-08 20:04:07 +00:00
2022-11-09 13:46:13 +00:00
Assert(elf<>nil,'program not loaded!');
ps4_app.prog:=elf;
end;
2022-09-05 13:52:38 +00:00
2021-12-08 20:04:07 +00:00
begin
DefaultSystemCodePage:=CP_UTF8;
DefaultUnicodeCodePage:=CP_UTF8;
DefaultFileSystemCodePage:=CP_UTF8;
DefaultRTLFileSystemCodePage:=CP_UTF8;
UTF8CompareLocale:=CP_UTF8;
2022-07-13 14:01:22 +00:00
sys_crt_init;
2021-12-08 20:04:07 +00:00
ps4_app.save_path:=IncludeTrailingPathDelimiter(GetCurrentDir)+'savedata';
if not ParseCmd then Exit;
//ps4_app.app_path:='..\samples\api_gnm\simplet-single-triangle';
//ps4_app.app_file:='..\samples\api_gnm\simplet-single-triangle\simplet-single-triangle_debug.elf';
//ps4_app.app_file:='..\samples\api_gnm\simplet-cmask\simplet-cmask_debug.elf';
//ps4_app.app_path:='..\samples\api_gnm\simplet-simple-fs\';
//ps4_app.app_file:='..\samples\api_gnm\simplet-simple-fs\simplet-simple-fs_debug.elf';
2022-07-09 16:13:52 +00:00
//ps4_app.app_path:='..\samples\api_gnm\';
//ps4_app.app_file:='..\samples\api_gnm\basic-sample\basic-sample_debug.elf';
//ps4_app.app_path:='..\samples\api_gnm\';
//ps4_app.app_file:='..\samples\api_gnm\anisotropy-sample\anisotropy-sample_debug.elf';
2022-07-13 20:27:56 +00:00
//ps4_app.app_path:='..\samples\api_gnm\';
//ps4_app.app_file:='..\samples\api_gnm\depth-mode-sample\depth-mode-sample_debug.elf';
//ps4_app.app_path:='..\samples\api_gnm\';
//ps4_app.app_file:='..\samples\api_gnm\eqaa-sample\eqaa-sample_debug.elf';
2021-12-08 20:04:07 +00:00
//ps4_app.app_path:='..\samples\tutorial_graphics_programming\basic_quad\';
//ps4_app.app_file:='..\samples\tutorial_graphics_programming\basic_quad\basic_quad_debug.elf';
2022-05-31 07:20:10 +00:00
//ps4_app.app_path:='..\samples\tutorial_anti-aliasing\';
//ps4_app.app_file:='..\samples\tutorial_anti-aliasing\tutorial_anti-aliasing_debug.elf';
//ps4_app.app_path:='..\samples\tutorial_graphics_programming\basic-compute\';
//ps4_app.app_file:='..\samples\tutorial_graphics_programming\basic-compute\basic-compute_debug.elf';
//ps4_app.app_path:='..\samples\api_gnm';
//ps4_app.app_file:='..\samples\api_gnm\drawindirect-sample\drawindirect-sample_debug.elf';
2021-12-08 20:04:07 +00:00
//ps4_app.app_file:='..\samples\api_video_out\videoout_cursor.elf';
//ps4_app.app_file:='..\samples\api_video_out\videoout_flip.elf';
//ps4_app.app_file:='..\samples\api_video_out\videoout_basic2.elf';
//ps4_app.app_file:='..\samples\api_video_out\videoout_basic3.elf';
//ps4_app.app_file:='..\samples\api_video_out\videoout_basic5.elf';
2022-05-31 07:20:10 +00:00
//ps4_app.app_file:='..\samples\api_video_out\videoout_basic_1d.elf';
//ps4_app.app_path:='..\samples\http_get\';
2022-10-06 19:58:35 +00:00
//ps4_app.app_file:='..\samples\http_get\simple5.elf';
2022-05-31 07:20:10 +00:00
2021-12-08 20:04:07 +00:00
//ps4_app.app_path:='G:\Games\MOMODORA\CUSA05694\';
//ps4_app.app_file:='G:\Games\MOMODORA\CUSA05694\eboot.bin';
2022-05-31 14:06:09 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\MOMODORA\CUSA05694\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\MOMODORA\CUSA05694\eboot.bin';
2022-05-31 07:20:10 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\eboot.bin';
2021-12-08 20:04:07 +00:00
//ps4_app.app_path:='G:\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\';
//ps4_app.app_file:='G:\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\eboot.elf';
2022-05-31 07:20:10 +00:00
//ps4_app.app_file:='G:\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\We.Are.Doomed.PS4-PRELUDE\CUSA02394\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Organ.Trail.Complete.Edition\CUSA02791\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Organ.Trail.Complete.Edition\CUSA02791\eboot.bin';
//ps4_app.app_path:='G:\Games\Organ.Trail.Complete.Edition\CUSA02791\';
//ps4_app.app_file:='G:\Games\Organ.Trail.Complete.Edition\CUSA02791\eboot.bin';
2021-12-08 20:04:07 +00:00
2022-05-31 07:20:10 +00:00
//ps4_app.app_path:='G:\Games\Bloodborne Game of the Year Edition v1.09 [RUS]\';
//ps4_app.app_file:='G:\Games\Bloodborne Game of the Year Edition v1.09 [RUS]\eboot.bin';
2021-12-08 20:04:07 +00:00
2022-05-31 07:20:10 +00:00
//ps4_app.app_path:='G:\Games\BLAZING_CHROME\CUSA14656\';
//ps4_app.app_file:='G:\Games\BLAZING_CHROME\CUSA14656\eboot.bin';
2022-09-07 11:55:44 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\BLAZING_CHROME\CUSA14656';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\BLAZING_CHROME\CUSA14656\eboot.bin';
2022-05-31 07:20:10 +00:00
//ps4_app.app_path:='G:\Games\Sonic Mania\CUSA07023\';
//ps4_app.app_file:='G:\Games\Sonic Mania\CUSA07023\eboot.bin';
2022-05-31 07:34:05 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Sonic Mania\CUSA07023\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Sonic Mania\CUSA07023\eboot.bin';
2021-12-08 20:04:07 +00:00
2022-06-01 14:05:23 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Worms\CUSA04047\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Worms\CUSA04047\eboot.bin';
2022-06-02 19:07:03 +00:00
//ps4_app.app_path:='G:\Games\Worms\CUSA04047\';
//ps4_app.app_file:='G:\Games\Worms\CUSA04047\eboot.bin';
2022-06-09 06:46:55 +00:00
//ps4_app.app_path:='G:\Games\Super Meat Boy\';
//ps4_app.app_file:='G:\Games\Super Meat Boy\eboot.bin';
2022-06-09 10:18:47 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Super Meat Boy\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Super Meat Boy\eboot.bin';
2022-06-10 07:00:15 +00:00
//ps4_app.app_path:='G:\Games\Limbo\CUSA01369\';
//ps4_app.app_file:='G:\Games\Limbo\CUSA01369\eboot.bin';
//ps4_app.app_path:='G:\Games\Hue\CUSA05065\';
//ps4_app.app_file:='G:\Games\Hue\CUSA05065\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Hue\CUSA05065\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Hue\CUSA05065\eboot.bin';
2022-06-29 11:28:38 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\creeperdiver-ps4\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\creeperdiver-ps4\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\SPELUNKYCLASSIC\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\SPELUNKYCLASSIC\eboot.bin';
2022-07-01 08:11:45 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Cursed Castilla v1.00 (ASIA)\CUSA07773\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Cursed Castilla v1.00 (ASIA)\CUSA07773\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Undertale\CUSA09415\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Undertale\CUSA09415\eboot.bin';
2022-09-28 20:09:07 +00:00
//ps4_app.app_path:='G:\Games\Undertale\CUSA09415\';
//ps4_app.app_file:='G:\Games\Undertale\CUSA09415\eboot.bin';
2022-07-01 08:11:45 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Cladun Returns This Is Sengoku v1.00\CUSA06770\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Cladun Returns This Is Sengoku v1.00\CUSA06770\eboot.bin';
2022-07-09 16:13:52 +00:00
//ps4_app.app_path:='G:\Games\Cladun Returns This Is Sengoku v1.00\CUSA06770\';
//ps4_app.app_file:='G:\Games\Cladun Returns This Is Sengoku v1.00\CUSA06770\eboot.bin';
//ps4_app.app_path:='G:\Games\ps4-homebrew\Blue Boi Quickz\';
//ps4_app.app_file:='G:\Games\ps4-homebrew\Blue Boi Quickz\eboot.bin';
//ps4_app.app_path:='G:\Games\Shovel Knight\CUSA01867\';
//ps4_app.app_file:='G:\Games\Shovel Knight\CUSA01867\eboot.bin';
2022-07-13 14:01:22 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Stardew_Valley\CUSA06829\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Stardew_Valley\CUSA06829\eboot.bin';
2022-07-13 20:27:56 +00:00
//ps4_app.app_path:='G:\Games\Stardew_Valley\CUSA06829\';
//ps4_app.app_file:='G:\Games\Stardew_Valley\CUSA06829\eboot.bin';
//ps4_app.app_path:='G:\Games\Super Exploding Zoo\CUSA00446\';
//ps4_app.app_file:='G:\Games\Super Exploding Zoo\CUSA00446\eboot.bin';
2022-10-07 14:21:05 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Super.Exploding.Zoo\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Super.Exploding.Zoo\eboot.bin';
2022-07-13 20:27:56 +00:00
//ps4_app.app_path:='G:\Games\Untitled Goose Game\CUSA23079\';
//ps4_app.app_file:='G:\Games\Untitled Goose Game\CUSA23079\eboot.bin';
2022-10-07 14:21:05 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Untitled Goose Game\CUSA23079\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Untitled Goose Game\CUSA23079\eboot.bin';
2022-07-14 11:59:03 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\JETPACKJOYRIDE\CUSA03633\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\JETPACKJOYRIDE\CUSA03633\eboot.bin';
2022-07-14 20:16:23 +00:00
//ps4_app.app_path:='G:\Games\JETPACKJOYRIDE\CUSA03633\';
//ps4_app.app_file:='G:\Games\JETPACKJOYRIDE\CUSA03633\eboot.bin';
2022-07-15 10:12:45 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Dont.Die.Mr.Robot\CUSA02782\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Dont.Die.Mr.Robot\CUSA02782\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Patapon\CUSA07184\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Patapon\CUSA07184\eboot.bin';
2022-07-17 17:53:17 +00:00
//ps4_app.app_path:='G:\Games\Patapon\CUSA07184\';
//ps4_app.app_file:='G:\Games\Patapon\CUSA07184\eboot.bin';
//ps4_app.app_path:='G:\Games\Bards.Gold\CUSA05012\';
//ps4_app.app_file:='G:\Games\Bards.Gold\CUSA05012\eboot.bin';
2022-09-05 21:07:24 +00:00
//ps4_app.app_path:='G:\Games\Record of Lodoss War Deedlit in Wonder Labyrinth\CUSA29366\';
//ps4_app.app_file:='G:\Games\Record of Lodoss War Deedlit in Wonder Labyrinth\CUSA29366\eboot.bin';
2022-09-07 10:57:39 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\LODOSSWARDEEDLIT\CUSA29366\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\LODOSSWARDEEDLIT\CUSA29366\eboot.bin';
2022-09-05 21:07:24 +00:00
//ps4_app.app_path:='G:\Games\Spelunky 2\CUSA20601\';
//ps4_app.app_file:='G:\Games\Spelunky 2\CUSA20601\eboot.bin';
2022-09-06 12:53:07 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\SPELUNKY2\CUSA20601\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\SPELUNKY2\CUSA20601\eboot.bin';
2022-09-20 17:57:07 +00:00
//ps4_app.app_path:='G:\Games\Desert.Child\CUSA12744\';
//ps4_app.app_file:='G:\Games\Desert.Child\CUSA12744\eboot.bin';
//ps4_app.app_path:='G:\Games\Blackhole\CUSA06921\';
//ps4_app.app_file:='G:\Games\Blackhole\CUSA06921\eboot.bin';
2022-10-07 14:21:05 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Blackhole\CUSA06921\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Blackhole\CUSA06921\eboot.bin';
2022-09-20 17:57:07 +00:00
//ps4_app.app_path:='G:\Games\Spelunky\CUSA00491\';
//ps4_app.app_file:='G:\Games\Spelunky\CUSA00491\eboot.bin';
2022-09-28 20:09:07 +00:00
//ps4_app.app_path:='G:\Games\Mega Man Legacy Collection v1.00\CUSA02516\';
//ps4_app.app_file:='G:\Games\Mega Man Legacy Collection v1.00\CUSA02516\eboot.bin';
2022-09-20 17:57:07 +00:00
2022-10-06 19:58:35 +00:00
//ps4_app.app_path:='G:\Games\ps4-homebrew\PS4_Player\';
//ps4_app.app_file:='G:\Games\ps4-homebrew\PS4_Player\eboot.bin';
2022-10-19 18:52:06 +00:00
//ps4_app.app_path:='G:\Games\ps4-homebrew\TEST_PAD\';
//ps4_app.app_file:='G:\Games\ps4-homebrew\TEST_PAD\eboot.bin';
2022-10-06 19:58:35 +00:00
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\TEST_PAD\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\TEST_PAD\eboot.bin';
2022-10-06 19:58:35 +00:00
//ps4_app.app_path:='G:\Games\Castlevania\SLUS00067\';
//ps4_app.app_file:='G:\Games\Castlevania\SLUS00067\eboot.bin';
//ps4_app.app_path:='G:\Games\Roombo First Blood\CUSA19205\';
//ps4_app.app_file:='G:\Games\Roombo First Blood\CUSA19205\eboot.bin';
2022-10-07 14:21:05 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4_Player_9.00\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4_Player_9.00\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\Eboot_Give\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\Eboot_Give\RayTracing3_eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Metal_Max_Xeno\CUSA12350\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Metal_Max_Xeno\CUSA12350\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Roombo First Blood\CUSA19205\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Roombo First Blood\CUSA19205\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\pad\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\pad\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Gem.Smashers\CUSA07572\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Gem.Smashers\CUSA07572\eboot.bin';
2022-10-12 06:49:52 +00:00
//ps4_app.app_path:='G:\Games\Gem.Smashers\CUSA07572\';
//ps4_app.app_file:='G:\Games\Gem.Smashers\CUSA07572\eboot.bin';
//ps4_app.app_path:='G:\Games\Taiko No Tatsujin\CUSA07515\';
//ps4_app.app_file:='G:\Games\Taiko No Tatsujin\CUSA07515\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Taiko_No_Tatsujin\CUSA07515\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Taiko_No_Tatsujin\CUSA07515\eboot.bin';
2022-10-14 09:20:02 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\project_PM4_KernelEqueue\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\project_PM4_KernelEqueue\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Shantae Riskys Revenge\CUSA01587\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Shantae Riskys Revenge\CUSA01587\eboot.bin';
2022-10-12 06:49:52 +00:00
2022-10-18 13:42:07 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\OpenOrbis\IPNGDRAW\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\OpenOrbis\IPNGDRAW\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\LAPY10018\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\LAPY10018\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Super Star Wars\CUSA03292\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Super Star Wars\CUSA03292\eboot.bin';
2022-10-19 13:02:47 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\VA-11.Hall-A\CUSA15402\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\VA-11.Hall-A\CUSA15402\eboot.bin';
2022-10-21 08:32:55 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\Quiz\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\Quiz\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\namco\uroot\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\namco\uroot\eboot.bin';
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4-Xplorer\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\ps4-homebrew\PS4-Xplorer\eboot.bin';
2022-05-31 07:20:10 +00:00
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Chronicles_of_Teddy_Harmony_of_Exidus\CUSA03328\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Chronicles_of_Teddy_Harmony_of_Exidus\CUSA03328\eboot.bin';
2022-11-01 14:26:18 +00:00
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Another_World\CUSA00602\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Another_World\CUSA00602\eboot.bin';
2022-11-01 14:26:18 +00:00
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Dino.Dinis.Kick.Off.Revival\CUSA03453\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Dino.Dinis.Kick.Off.Revival\CUSA03453\eboot.bin';
2022-11-01 14:26:18 +00:00
2022-11-09 13:46:13 +00:00
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Cat.Quest\CUSA09499\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Cat.Quest\CUSA09499\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Kitten.Squad\CUSA04801\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Kitten.Squad\CUSA04801\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Mitsurugi.Kamui.Hikae\CUSA02166\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Mitsurugi.Kamui.Hikae\CUSA02166\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Prison_Architect\CUSA03487\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Prison_Architect\CUSA03487\eboot.bin';
//ps4_app.app_path:='C:\Users\User\Desktop\Games\Pumped.BMX.Plus.PS4-PRELUDE\CUSA02589\';
//ps4_app.app_file:='C:\Users\User\Desktop\Games\Pumped.BMX.Plus.PS4-PRELUDE\CUSA02589\eboot.bin';
ps4_app.resolve_cb:=@ResolveImport;
ps4_app.reload_cb :=@ReloadImport;
LoadProgram;
ps4_app.prog.Prepare;
ps4_app.RegistredElf (ps4_app.prog);
ps4_app.ResolveDepended (ps4_app.prog);
2022-05-31 07:20:10 +00:00
ps4_app.LoadSymbolImport(nil);
2021-12-08 20:04:07 +00:00
Stub.FinStub;
ps4_app.InitProt;
2022-09-28 20:09:07 +00:00
_pthread_run_entry(@main,GetSceUserMainThreadName,GetSceUserMainThreadStackSize);
2021-12-08 20:04:07 +00:00
ps4_libSceVideoOut.App_Run;
//KillALLThreads TODO
//readln;
end.