From 6d0fae09c5980d7bc7cd8ad02868398dfd6c454e Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Fri, 12 Sep 2014 15:18:27 +0300 Subject: [PATCH 1/2] Implemented sys_get_random_number --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 2a9835a27c..801589fc69 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -24,7 +24,7 @@ Module *sysPrxForUser = nullptr; extern u32 LoadSpuImage(vfsStream& stream, u32& spu_ep); int _sys_heap_create_heap(const u32 heap_addr, const u32 align, const u32 size) -{ +{ sysPrxForUser->Warning("_sys_heap_create_heap(heap_addr=0x%x, align=0x%x, size=0x%x)", heap_addr, align, size); u32 heap_id = sysPrxForUser->GetNewId(new HeapInfo(heap_addr, align, size)); @@ -149,6 +149,15 @@ int sys_raw_spu_image_load(int id, vm::ptr img) return CELL_OK; } +int sys_get_random_number(u32 addr, u64 size) +{ + sysPrxForUser->Warning("sys_get_random_number(addr=0x%x, size=%d)", addr, size); + + addr = rand() % size; + + return CELL_OK; +} + vm::ptr _sys_memset(vm::ptr dst, s32 value, u32 size) { sysPrxForUser->Log("_sys_memset(dst_addr=0x%x, value=%d, size=%d)", dst.addr(), value, size); @@ -319,6 +328,9 @@ s32 _unnamed_E75C40F2(u32 dest) void sysPrxForUser_init() { + // Setup random number generator + srand(time(NULL)); + REG_FUNC(sysPrxForUser, sys_initialize_tls); REG_FUNC(sysPrxForUser, sys_lwmutex_create); @@ -378,6 +390,8 @@ void sysPrxForUser_init() sysPrxForUser->AddFunc(0x52aadadf, sys_lwcond_signal_to); sysPrxForUser->AddFunc(0x2a6d9d51, sys_lwcond_wait); + sysPrxForUser->AddFunc(0x71a8472a, sys_get_random_number); + sysPrxForUser->AddFunc(0x8c2bb498, sys_spinlock_initialize); sysPrxForUser->AddFunc(0xa285139d, sys_spinlock_lock); sysPrxForUser->AddFunc(0x722a0254, sys_spinlock_trylock); From 1098edea989d1aba8e47e9d0b341a007f2b535e2 Mon Sep 17 00:00:00 2001 From: Raul Tambre Date: Fri, 12 Sep 2014 18:11:04 +0300 Subject: [PATCH 2/2] Fixed assigning of the generated number --- rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp index 801589fc69..307138affd 100644 --- a/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sysPrxForUser.cpp @@ -153,7 +153,10 @@ int sys_get_random_number(u32 addr, u64 size) { sysPrxForUser->Warning("sys_get_random_number(addr=0x%x, size=%d)", addr, size); - addr = rand() % size; + if (size > 4096) + size = 4096; + + vm::write32(addr, rand() % size); return CELL_OK; }