From 90b8346312998b0ad32512c06036ca5b7d1e81a0 Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Thu, 31 Aug 2017 21:39:12 +0300 Subject: [PATCH] Implemented syscall _sys_spu_image_get_segments --- rpcs3/Emu/Cell/PPUFunction.cpp | 2 +- rpcs3/Emu/Cell/lv2/lv2.cpp | 2 +- rpcs3/Emu/Cell/lv2/sys_spu.cpp | 8 +++++--- rpcs3/Emu/Cell/lv2/sys_spu.h | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/rpcs3/Emu/Cell/PPUFunction.cpp b/rpcs3/Emu/Cell/PPUFunction.cpp index 9e1522e52d..07af0c9ea4 100644 --- a/rpcs3/Emu/Cell/PPUFunction.cpp +++ b/rpcs3/Emu/Cell/PPUFunction.cpp @@ -133,7 +133,7 @@ extern std::string ppu_get_syscall_name(u64 code) case 156: return "sys_spu_image_open"; case 157: return "_sys_spu_image_import"; case 158: return "_sys_spu_image_close"; - case 159: return "_sys_raw_spu_image_load"; + case 159: return "_sys_spu_image_get_segments"; case 160: return "sys_raw_spu_create"; case 161: return "sys_raw_spu_destroy"; case 163: return "sys_raw_spu_read_puint_mb"; diff --git a/rpcs3/Emu/Cell/lv2/lv2.cpp b/rpcs3/Emu/Cell/lv2/lv2.cpp index 657977a0ca..17c70482a8 100644 --- a/rpcs3/Emu/Cell/lv2/lv2.cpp +++ b/rpcs3/Emu/Cell/lv2/lv2.cpp @@ -206,7 +206,7 @@ const std::array s_ppu_syscall_table BIND_FUNC(sys_spu_image_open), //156 (0x09C) BIND_FUNC(_sys_spu_image_import), //157 (0x09D) BIND_FUNC(_sys_spu_image_close), //158 (0x09E) - BIND_FUNC(_sys_raw_spu_image_load), //159 (0x09F) + BIND_FUNC(_sys_spu_image_get_segments), //159 (0x09F) BIND_FUNC(sys_raw_spu_create), //160 (0x0A0) BIND_FUNC(sys_raw_spu_destroy), //161 (0x0A1) null_func, //162 (0x0A2) UNS diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.cpp b/rpcs3/Emu/Cell/lv2/sys_spu.cpp index 7cb6319552..7113a9f842 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.cpp +++ b/rpcs3/Emu/Cell/lv2/sys_spu.cpp @@ -188,11 +188,13 @@ error_code _sys_spu_image_close(vm::ptr img) return CELL_OK; } -error_code _sys_raw_spu_image_load(vm::ptr img, u32 ptr, u32 arg3) +error_code _sys_spu_image_get_segments(vm::ptr img, vm::ptr segments, s32 nseg) { - sys_spu.todo("_sys_raw_spu_image_load(img=*0x%x, ptr=*0x%x, arg3=0x%x)", img, ptr, arg3); + sys_spu.error("_sys_spu_image_get_segments(img=*0x%x, segments=*0x%x, nseg=%d)", img, segments, nseg); - fmt::throw_exception("Unimlemented syscall: _sys_raw_spu_image_load"); + // TODO: apply SPU patches + std::memcpy(segments.get_ptr(), img->segs.get_ptr(), sizeof(sys_spu_segment) * nseg); + return CELL_OK; } error_code sys_spu_thread_initialize(vm::ptr thread, u32 group_id, u32 spu_num, vm::ptr img, vm::ptr attr, vm::ptr arg) diff --git a/rpcs3/Emu/Cell/lv2/sys_spu.h b/rpcs3/Emu/Cell/lv2/sys_spu.h index b65b7a6bf9..341315c011 100644 --- a/rpcs3/Emu/Cell/lv2/sys_spu.h +++ b/rpcs3/Emu/Cell/lv2/sys_spu.h @@ -290,7 +290,7 @@ error_code _sys_spu_image_get_information(vm::ps3::ptr img, vm::p error_code sys_spu_image_open(vm::ps3::ptr img, vm::ps3::cptr path); error_code _sys_spu_image_import(vm::ps3::ptr img, u32 src, u32 size, u32 arg4); error_code _sys_spu_image_close(vm::ps3::ptr img); -error_code _sys_raw_spu_image_load(vm::ps3::ptr img, u32 ptr, u32 arg3); +error_code _sys_spu_image_get_segments(vm::ps3::ptr img, vm::ps3::ptr segments, s32 nseg); error_code sys_spu_thread_initialize(vm::ps3::ptr thread, u32 group, u32 spu_num, vm::ps3::ptr, vm::ps3::ptr, vm::ps3::ptr); error_code sys_spu_thread_set_argument(u32 id, vm::ps3::ptr arg); error_code sys_spu_thread_group_create(vm::ps3::ptr id, u32 num, s32 prio, vm::ps3::ptr attr);