mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
46d4ec8066
commit
d25eeb0f53
|
@ -41,11 +41,54 @@ type
|
|||
arg6 :QWORD;
|
||||
end;
|
||||
|
||||
p_resolution_status=^t_resolution_status;
|
||||
t_resolution_status=packed record
|
||||
width :DWORD;
|
||||
heigth :DWORD;
|
||||
paneWidth :DWORD;
|
||||
paneHeight :DWORD;
|
||||
refreshHz :DWORD;
|
||||
screenSizeInInch:DWORD;
|
||||
padding:array[0..19] of Byte;
|
||||
end;
|
||||
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_UNKNOWN = 0,
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_23_98HZ = 1,
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_50HZ = 2,
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_59_94HZ = 3,
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_29_97HZ = 6,
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_89_91HZ = 35, 0x23
|
||||
//SCE_VIDEO_OUT_REFRESH_RATE_119_88HZ = 13, 0xD
|
||||
|
||||
//refreshRate = 0 SCE_VIDEO_OUT_REFRESH_RATE_UNKNOWN
|
||||
//refreshRate = 3; result.refreshHz = 0x426fc28f SCE_VIDEO_OUT_REFRESH_RATE_59_94HZ
|
||||
//refreshRate = 2, result.refreshHz = 0x42480000 SCE_VIDEO_OUT_REFRESH_RATE_50HZ
|
||||
//refreshRate = 1, result.refreshHz = 0x41bfd70a SCE_VIDEO_OUT_REFRESH_RATE_23_98HZ
|
||||
//refreshRate = 4, result.refreshHz = 0x41c00000
|
||||
//refreshRate = 5, result.refreshHz = 0x41f00000
|
||||
//refreshRate = 6, result.refreshHz = 0x41efc28f SCE_VIDEO_OUT_REFRESH_RATE_29_97HZ
|
||||
//refreshRate = 7, result.refreshHz = 0x41c80000
|
||||
//refreshRate = 9, result.refreshHz = 0x42700000
|
||||
//refreshRate = 10, result.refreshHz = 0x42400000
|
||||
//refreshRate = 0xb, result.refreshHz = 0x423fcccd
|
||||
//refreshRate = 0xc, result.refreshHz = 0x42c80000
|
||||
//refreshRate = 0xd, result.refreshHz = 0x42efc28f SCE_VIDEO_OUT_REFRESH_RATE_119_88HZ
|
||||
//refreshRate = 0xe, result.refreshHz = 0x42f00000
|
||||
//refreshRate = 0xf, result.refreshHz = 0x43480000
|
||||
//refreshRate = 0x10, result.refreshHz = 0x436fc28f
|
||||
//refreshRate = 0x11, result.refreshHz = 0x43700000
|
||||
//refreshRate = 0x14, result.refreshHz = 0x413fd70a
|
||||
//refreshRate = 0x15, result.refreshHz = 0x41400000
|
||||
//refreshRate = 0x16, result.refreshHz = 0x416fd70a
|
||||
//refreshRate = 0x17, result.refreshHz = 0x41700000
|
||||
//refreshRate = 0x23, result.refreshHz = 0x42b3d1ec SCE_VIDEO_OUT_REFRESH_RATE_89_91HZ
|
||||
|
||||
Function dce_flip_control(dev:p_cdev;data:p_flip_control_args):Integer;
|
||||
var
|
||||
poff:PQWORD;
|
||||
plen:PQWORD;
|
||||
len:QWORD;
|
||||
status:t_resolution_status;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
|
@ -54,7 +97,7 @@ begin
|
|||
case data^.id of
|
||||
0: //video open
|
||||
begin
|
||||
if ((data^.arg6=0) and (data^.arg2=0)) then
|
||||
if (data^.arg6=0) and (data^.arg2=0) then
|
||||
begin
|
||||
|
||||
plen:=Pointer(data^.arg5);
|
||||
|
@ -66,10 +109,26 @@ begin
|
|||
Exit(EINVAL);
|
||||
end;
|
||||
|
||||
5: //UnregisterBufferAttribute
|
||||
begin
|
||||
if (data^.arg4=0) and (data^.arg5=0) and (data^.arg6=0) then
|
||||
begin
|
||||
//arg2 -> canary
|
||||
//arg3 -> fid
|
||||
|
||||
Writeln('dce_flip_control(UnregisterBufferAttribute):',data^.arg2,' ',data^.arg3);
|
||||
|
||||
Exit(0);
|
||||
end;
|
||||
Exit(EINVAL);
|
||||
end;
|
||||
|
||||
9:
|
||||
begin //get page info
|
||||
if ((data^.arg5=0) and (data^.arg6=0)) then
|
||||
if (data^.arg5=0) and (data^.arg6=0) then
|
||||
begin
|
||||
//arg2 -> canary
|
||||
|
||||
poff:=Pointer(data^.arg3); //output offset //4000..3FFC000
|
||||
plen:=Pointer(data^.arg4); //output len //4000
|
||||
|
||||
|
@ -89,21 +148,55 @@ begin
|
|||
|
||||
12:
|
||||
begin
|
||||
if ((data^.arg5=0) and (data^.arg6=0)) then
|
||||
if (data^.arg5=0) and (data^.arg6=0) then
|
||||
begin
|
||||
if (data^.arg4=$30) or (data^.arg4=$40) then
|
||||
begin
|
||||
//arg2 -> canary
|
||||
|
||||
poff:=Pointer(data^.arg3);
|
||||
|
||||
len:=0;
|
||||
|
||||
Writeln('dce_flip_control(',data^.id,'):wait?');
|
||||
|
||||
Exit(0);
|
||||
Result:=copyout(@len,poff,data^.arg4);
|
||||
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
Exit(EINVAL);
|
||||
end;
|
||||
|
||||
19: //sceVideoOutGetResolutionStatus
|
||||
begin
|
||||
if (data^.arg4=44) then
|
||||
begin
|
||||
//arg2 -> canary
|
||||
//arg3 = &result;
|
||||
//arg4 = 44;
|
||||
|
||||
plen:=Pointer(data^.arg3);
|
||||
|
||||
status:=Default(t_resolution_status);
|
||||
status.width :=1920;
|
||||
status.heigth :=1080;
|
||||
status.paneWidth :=1920;
|
||||
status.paneHeight :=1080;
|
||||
status.refreshHz :=$426fc28f;
|
||||
status.screenSizeInInch:=32;
|
||||
|
||||
Result:=copyout(@status,plen,data^.arg4);
|
||||
|
||||
Exit;
|
||||
end;
|
||||
Exit(EINVAL);
|
||||
end;
|
||||
|
||||
31: //set vaddr
|
||||
begin
|
||||
//data^.arg3 <- subtype 0..13
|
||||
//arg2 -> canary
|
||||
//arg3 <- subtype 0..13
|
||||
|
||||
if (data^.arg3>13) then Exit(EINVAL);
|
||||
|
||||
|
|
|
@ -94,7 +94,8 @@ uses
|
|||
vmparam,
|
||||
vm_map,
|
||||
kern_authinfo,
|
||||
kern_thr;
|
||||
kern_thr,
|
||||
trap;
|
||||
|
||||
//////////
|
||||
|
||||
|
@ -173,7 +174,7 @@ function kern_mmap_dmem(map :vm_map_t;
|
|||
length:QWORD;
|
||||
mtype :DWORD;
|
||||
prot :DWORD;
|
||||
align :DWORD;
|
||||
align :QWORD;
|
||||
flags :DWORD):Integer;
|
||||
label
|
||||
_fixed;
|
||||
|
@ -187,6 +188,7 @@ var
|
|||
err:Integer;
|
||||
begin
|
||||
Result:=0;
|
||||
addr^:=9;
|
||||
|
||||
if (((phaddr shr 36) > 4) or ((max_valid - phaddr) < length)) then
|
||||
begin
|
||||
|
@ -226,7 +228,7 @@ begin
|
|||
|
||||
if (err=0) then
|
||||
begin
|
||||
//
|
||||
addr^:=vaddr;
|
||||
end else
|
||||
begin
|
||||
vm_map_delete(map,vaddr,v_end);
|
||||
|
@ -294,7 +296,7 @@ function sys_mmap_dmem(vaddr :Pointer;
|
|||
var
|
||||
td:p_kthread;
|
||||
addr:vm_offset_t;
|
||||
align:Integer;
|
||||
align:QWORD;
|
||||
begin
|
||||
td:=curkthread;
|
||||
if (td=nil) then Exit(Pointer(-1));
|
||||
|
@ -355,8 +357,9 @@ begin
|
|||
addr:=$ff0000000;
|
||||
end;
|
||||
|
||||
align:=flags and MAP_ALIGNMENT_SHIFT;
|
||||
align:=(flags shr MAP_ALIGNMENT_SHIFT) and $1f;
|
||||
if (align<PAGE_SHIFT) then align:=1;
|
||||
align:=1 shl align;
|
||||
end else
|
||||
begin
|
||||
//Address range must be all in user VM space.
|
||||
|
@ -433,7 +436,8 @@ procedure dmem_vmo_get_type(map:vm_map_t;
|
|||
sdk_version_big_4ffffff:Boolean);
|
||||
var
|
||||
obj:vm_map_object;
|
||||
start,relofs:QWORD;
|
||||
start:QWORD;
|
||||
relofs:Int64;
|
||||
|
||||
d_start,d_start2:QWORD;
|
||||
d_end,d_end2:QWORD;
|
||||
|
@ -471,6 +475,7 @@ begin
|
|||
begin
|
||||
start :=entry^.start;
|
||||
relofs:=entry^.offset - start;
|
||||
|
||||
if (addr < start) then
|
||||
begin
|
||||
addr:=start;
|
||||
|
@ -556,7 +561,8 @@ var
|
|||
td:p_kthread;
|
||||
map:vm_map_t;
|
||||
entry,next:vm_map_entry_t;
|
||||
rbp,rip:PPointer;
|
||||
rbp:PPointer;
|
||||
rip:Pointer;
|
||||
sdk_version_big_4ffffff:Boolean;
|
||||
is_libsys_call:Boolean;
|
||||
qinfo:SceKernelVirtualQueryInfo;
|
||||
|
@ -566,6 +572,8 @@ begin
|
|||
td:=curkthread;
|
||||
if (td=nil) then Exit(-1);
|
||||
|
||||
Writeln('sys_virtual_query:',HexStr(addr),' ',flags);
|
||||
|
||||
QWORD(addr):=QWORD(addr) and $ffffffffffffc000;
|
||||
|
||||
map:=@g_vmspace.vm_map;
|
||||
|
@ -599,7 +607,7 @@ begin
|
|||
if (p_proc.libkernel_start_addr > rip) or
|
||||
(p_proc.libkernel___end_addr <= rip) then
|
||||
begin
|
||||
if (QWORD(rip) - QWORD($7f0000000) < QWORD($800000000)) then
|
||||
if ((Int64(rip) - Int64($7f0000000)) < Int64($800000000)) then //ET_DYN_LOAD_ADDR_SYS
|
||||
begin
|
||||
sdk_version_big_4ffffff:=true;
|
||||
is_libsys_call :=true;
|
||||
|
@ -724,6 +732,7 @@ begin
|
|||
|
||||
end;
|
||||
|
||||
Writeln(Sizeof(qinfo));
|
||||
|
||||
Result:=copyout(@qinfo,info,size);
|
||||
end;
|
||||
|
|
|
@ -125,6 +125,8 @@ begin
|
|||
Result:=copyinstr(symbol,@fsym,sizeof(fsym),nil);
|
||||
if (Result<>0) then Exit;
|
||||
|
||||
Writeln('sys_dynlib_dlsym:',fsym);
|
||||
|
||||
dynlibs_lock;
|
||||
|
||||
obj:=find_obj_by_handle(handle);
|
||||
|
|
|
@ -373,6 +373,7 @@ begin
|
|||
//argv0:='/app0/basic-sample_debug.elf';
|
||||
//argv0:='/app0/simple.elf';
|
||||
argv0:='/app0/videoout_basic.elf';
|
||||
//argv0:='/app0/videoout_cursor.elf';
|
||||
|
||||
err:=_execve(argv0,@argv0,nil);
|
||||
end;
|
||||
|
|
|
@ -1156,10 +1156,10 @@ begin
|
|||
|
||||
dmem_map_lock(map);
|
||||
|
||||
if (dmem_map_lookup_entry(map, offset, @entry)) then
|
||||
if (dmem_map_lookup_entry(map, OFF_TO_IDX(offset), @entry)) then
|
||||
begin
|
||||
pstart^:=entry^.start;
|
||||
p__end^:=entry^.__end;
|
||||
pstart^:=IDX_TO_OFF(entry^.start);
|
||||
p__end^:=IDX_TO_OFF(entry^.__end);
|
||||
pmtype^:=entry^.m_type;
|
||||
|
||||
Result:=0;
|
||||
|
@ -1169,8 +1169,6 @@ begin
|
|||
end;
|
||||
|
||||
dmem_map_unlock(map);
|
||||
|
||||
Result:=0;
|
||||
end;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue