mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
1fb62b438b
commit
ebcfbd2c14
|
@ -414,7 +414,7 @@ var
|
|||
begin
|
||||
Result:=0;
|
||||
|
||||
//Writeln('dce_flip_control(',data^.id,')');
|
||||
Writeln('dce_flip_control(',data^.id,')');
|
||||
|
||||
//id -> 0..0x24
|
||||
|
||||
|
@ -1145,7 +1145,7 @@ Function dce_ioctl(dev:p_cdev;cmd:QWORD;data:Pointer;fflag:Integer):Integer;
|
|||
begin
|
||||
Result:=0;
|
||||
|
||||
Writeln('dce_ioctl(0x',HexStr(cmd,8),')');
|
||||
//Writeln('dce_ioctl(0x',HexStr(cmd,8),')');
|
||||
|
||||
case cmd of
|
||||
$C0308203:Result:=dce_flip_control (dev,data); //SCE_SYS_DCE_IOCTL_FLIP_CONTROL
|
||||
|
|
|
@ -42,6 +42,7 @@ type
|
|||
len :QWORD; //in
|
||||
align:QWORD; //in
|
||||
mtype:DWORD;
|
||||
_alig:DWORD;
|
||||
end;
|
||||
|
||||
PReleaseDirectMemory=^TReleaseDirectMemory;
|
||||
|
@ -129,6 +130,11 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
$C0208004: //sceKernelGetDirectMemoryType
|
||||
begin
|
||||
Result:=dmem_map_get_memory_type(dmap^.dmem,data);
|
||||
end;
|
||||
|
||||
else
|
||||
begin
|
||||
print_error_td('dmem_ioctl(0x'+HexStr(cmd,8)+')');
|
||||
|
|
|
@ -341,8 +341,15 @@ begin
|
|||
|
||||
if (self_hdr^.File_size>obj_size) then
|
||||
begin
|
||||
FreeMem(self_hdr);
|
||||
Exit(EFAULT);
|
||||
//resize
|
||||
self_hdr:=ReAllocMem(self_hdr,self_hdr^.File_size);
|
||||
//fill zeros
|
||||
FillChar(PBYTE(self_hdr)[obj_size],self_hdr^.File_size-obj_size,0);
|
||||
//new size
|
||||
obj_size:=self_hdr^.File_size;
|
||||
|
||||
//FreeMem(self_hdr);
|
||||
//Exit(EFAULT);
|
||||
end;
|
||||
|
||||
count:=self_hdr^.Num_Segments;
|
||||
|
|
|
@ -80,13 +80,13 @@ function dmem_map_lookup_entry(
|
|||
|
||||
function dmem_map_insert(
|
||||
map :p_dmem_map;
|
||||
vaddr :DWORD;
|
||||
start :DWORD;
|
||||
__end :DWORD;
|
||||
m_type:DWORD):Integer;
|
||||
|
||||
Function dmem_map_query_available(map:p_dmem_map;start,__end,align:QWORD;var oaddr,osize:QWORD):Integer;
|
||||
Function dmem_map_query(map:p_dmem_map;offset:QWORD;flags,id:Integer;info:Pointer;size:QWORD):Integer;
|
||||
Function dmem_map_get_memory_type(map:p_dmem_map;info:Pointer):Integer;
|
||||
Function dmem_map_alloc(map:p_dmem_map;start,__end,len,align:QWORD;mtype:DWORD;var oaddr:QWORD):Integer;
|
||||
Function dmem_map_release(map:p_dmem_map;start,len:QWORD;check:Boolean):Integer;
|
||||
|
||||
|
@ -514,7 +514,6 @@ end;
|
|||
|
||||
function dmem_map_insert(
|
||||
map :p_dmem_map;
|
||||
vaddr :DWORD;
|
||||
start :DWORD;
|
||||
__end :DWORD;
|
||||
m_type:DWORD):Integer;
|
||||
|
@ -674,8 +673,8 @@ begin
|
|||
end;
|
||||
|
||||
type
|
||||
pSceKernelDirectMemoryQueryInfo=^SceKernelDirectMemoryQueryInfo;
|
||||
SceKernelDirectMemoryQueryInfo=packed record
|
||||
pSceKernelDirectMemoryQueryInfo=^TSceKernelDirectMemoryQueryInfo;
|
||||
TSceKernelDirectMemoryQueryInfo=packed record
|
||||
start:QWORD;
|
||||
__end:QWORD;
|
||||
mtype:Integer;
|
||||
|
@ -684,8 +683,9 @@ type
|
|||
|
||||
Function dmem_map_query(map:p_dmem_map;offset:QWORD;flags,id:Integer;info:Pointer;size:QWORD):Integer;
|
||||
var
|
||||
data:SceKernelDirectMemoryQueryInfo;
|
||||
data:TSceKernelDirectMemoryQueryInfo;
|
||||
entry:p_dmem_map_entry;
|
||||
index:DWORD;
|
||||
begin
|
||||
Result:=0;
|
||||
|
||||
|
@ -696,7 +696,7 @@ begin
|
|||
|
||||
Assert(id=0,'dmem_map_query (id<>0)');
|
||||
|
||||
data:=Default(SceKernelDirectMemoryQueryInfo);
|
||||
data:=Default(TSceKernelDirectMemoryQueryInfo);
|
||||
|
||||
Result:=EACCES;
|
||||
|
||||
|
@ -705,14 +705,16 @@ begin
|
|||
if (map^.root<>nil) then
|
||||
begin
|
||||
|
||||
map^.root:=dmem_map_entry_splay(OFF_TO_IDX(offset), map^.root);
|
||||
index:=OFF_TO_IDX(offset);
|
||||
|
||||
map^.root:=dmem_map_entry_splay(index, map^.root);
|
||||
entry:=map^.root;
|
||||
|
||||
if ((flags and 1)=0) then
|
||||
begin
|
||||
if (entry<>nil) then
|
||||
if (entry^.start<=offset) and
|
||||
(entry^.__end>offset) then
|
||||
if (entry^.start<=index) and
|
||||
(entry^.__end>index) then
|
||||
begin
|
||||
Result:=0;
|
||||
end;
|
||||
|
@ -721,7 +723,7 @@ begin
|
|||
while (entry<>nil) and (entry<>@map^.header) do
|
||||
begin
|
||||
if (entry^.m_type<>DWORD(-1)) and
|
||||
(entry^.__end>offset) then
|
||||
(entry^.__end>index) then
|
||||
begin
|
||||
Result:=0;
|
||||
Break;
|
||||
|
@ -732,8 +734,8 @@ begin
|
|||
|
||||
if (Result=0) then
|
||||
begin
|
||||
data.start:=entry^.start;
|
||||
data.__end:=entry^.__end;
|
||||
data.start:=IDX_TO_OFF(entry^.start);
|
||||
data.__end:=IDX_TO_OFF(entry^.__end);
|
||||
data.mtype:=entry^.m_type;
|
||||
end;
|
||||
|
||||
|
@ -743,14 +745,63 @@ begin
|
|||
|
||||
if (Result<>0) then Exit;
|
||||
|
||||
if (size>sizeof(SceKernelDirectMemoryQueryInfo)) then
|
||||
if (size>sizeof(TSceKernelDirectMemoryQueryInfo)) then
|
||||
begin
|
||||
size:=sizeof(SceKernelDirectMemoryQueryInfo);
|
||||
size:=sizeof(TSceKernelDirectMemoryQueryInfo);
|
||||
end;
|
||||
|
||||
Result:=copyout(@data,info,size);
|
||||
end;
|
||||
|
||||
type
|
||||
PGetDirectMemoryType=^TGetDirectMemoryType;
|
||||
TGetDirectMemoryType=packed record
|
||||
start :QWORD; //in
|
||||
start_out:QWORD; //out
|
||||
__end_out:QWORD; //out
|
||||
mtype_out:DWORD; //out
|
||||
align :Integer;
|
||||
end;
|
||||
|
||||
Function dmem_map_get_memory_type(map:p_dmem_map;info:Pointer):Integer;
|
||||
var
|
||||
data:PGetDirectMemoryType;
|
||||
entry:p_dmem_map_entry;
|
||||
index:DWORD;
|
||||
begin
|
||||
data:=info;
|
||||
|
||||
Result:=ENOENT;
|
||||
|
||||
dmem_map_lock(map);
|
||||
|
||||
if (map^.root<>nil) then
|
||||
begin
|
||||
|
||||
index:=OFF_TO_IDX(data^.start);
|
||||
|
||||
map^.root:=dmem_map_entry_splay(index, map^.root);
|
||||
entry:=map^.root;
|
||||
|
||||
if (entry<>nil) then
|
||||
if (entry^.start<=index) and
|
||||
(entry^.__end>index) then
|
||||
begin
|
||||
Result:=0;
|
||||
end;
|
||||
|
||||
if (Result=0) then
|
||||
begin
|
||||
data^.start_out:=IDX_TO_OFF(entry^.start);
|
||||
data^.__end_out:=IDX_TO_OFF(entry^.__end);
|
||||
data^.mtype_out:=entry^.m_type;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
dmem_map_unlock(map);
|
||||
end;
|
||||
|
||||
Function dmem_map_alloc(map:p_dmem_map;start,__end,len,align:QWORD;mtype:DWORD;var oaddr:QWORD):Integer;
|
||||
var
|
||||
adr_dw:DWORD;
|
||||
|
@ -835,7 +886,7 @@ begin
|
|||
Exit(EAGAIN);
|
||||
end;
|
||||
|
||||
Result:=dmem_map_insert(map,0,OFF_TO_IDX(start),OFF_TO_IDX(start+len),mtype);
|
||||
Result:=dmem_map_insert(map,OFF_TO_IDX(start),OFF_TO_IDX(start+len),mtype);
|
||||
until (Result<>EAGAIN);
|
||||
|
||||
dmem_map_unlock(map);
|
||||
|
@ -1118,7 +1169,7 @@ begin
|
|||
begin
|
||||
dmem_map_delete(map, start, __end);
|
||||
end;
|
||||
Result:=dmem_map_insert(map, 0, start, __end, m_type);
|
||||
Result:=dmem_map_insert(map, start, __end, m_type);
|
||||
dmem_map_unlock(map);
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in New Issue