diff --git a/rpcs3/Emu/SysCalls/Modules/sys_libc.cpp b/rpcs3/Emu/SysCalls/Modules/sys_libc.cpp index ef7ee9b871..6264fc697f 100644 --- a/rpcs3/Emu/SysCalls/Modules/sys_libc.cpp +++ b/rpcs3/Emu/SysCalls/Modules/sys_libc.cpp @@ -1,4 +1,5 @@ #include "stdafx.h" +#include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/SysCalls/Modules.h" @@ -127,6 +128,16 @@ std::string ps3_fmt(PPUThread& context, vm::cptr fmt, u32 g_count, u32 f_c result += string.get_ptr(); continue; } + case 'u': + { + // unsigned decimal + const u64 value = context.get_next_gpr_arg(g_count, f_count, v_count); + + if (plus_sign || minus_sign || space_sign || number_sign || zero_padding || width || prec) break; + + result += fmt::to_udec(value); + continue; + } } throw EXCEPTION("Unknown formatting: '%s'", start.get_ptr()); @@ -332,12 +343,14 @@ s32 _sys_snprintf(PPUThread& ppu, vm::ptr dst, u32 count, vm::cptr f } } -s32 _sys_printf(vm::cptr fmt, ppu_va_args_t va_args) +s32 _sys_printf(PPUThread& ppu, vm::cptr fmt, ppu_va_args_t va_args) { - sysPrxForUser.Todo("_sys_printf(fmt=*0x%x, ...)", fmt); + sysPrxForUser.Warning("_sys_printf(fmt=*0x%x, ...)", fmt); + std::string result = ps3_fmt(ppu, fmt, va_args.g_count, va_args.f_count, va_args.v_count); - // probably, assertion failed - throw EXCEPTION("%s", fmt.get_ptr()); + LOG_ERROR(TTY, result); + + return CELL_OK; } s32 _sys_sprintf() diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp index 9f08e5d0b4..09c6653f11 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.cpp @@ -260,9 +260,13 @@ s32 sys_prx_get_module_id_by_address() return CELL_OK; } -s32 sys_prx_get_module_id_by_name() +s32 sys_prx_get_module_id_by_name(vm::cptr name, u64 flags, vm::ptr pOpt) { - sys_prx.Todo("sys_prx_get_module_id_by_name()"); + const char *realName = name.get_ptr(); + sys_prx.Todo("sys_prx_get_module_id_by_name(name=%s, flags=%d, pOpt=*0x%x)", realName, flags, pOpt); + + //if (realName == "?") ... + return CELL_PRX_ERROR_UNKNOWN_MODULE; } diff --git a/rpcs3/Emu/SysCalls/lv2/sys_prx.h b/rpcs3/Emu/SysCalls/lv2/sys_prx.h index 8702126a41..3a2c9afd63 100644 --- a/rpcs3/Emu/SysCalls/lv2/sys_prx.h +++ b/rpcs3/Emu/SysCalls/lv2/sys_prx.h @@ -101,6 +101,12 @@ struct sys_prx_param_t be_t unk2; }; +struct sys_prx_get_module_id_by_name_option_t +{ + be_t size; + vm::ptr base; +}; + // PRX file headers struct sys_prx_module_info_t { @@ -125,7 +131,6 @@ struct sys_prx_relocation_info_t vm::bptr ptr; }; - // Data types struct sys_prx_load_module_option_t { @@ -180,7 +185,7 @@ s32 sys_prx_unload_module(s32 id, u64 flags, vm::ptr name, u64 flags, vm::ptr pOpt); s32 sys_prx_get_module_info(); s32 sys_prx_register_library(vm::ptr library); s32 sys_prx_unregister_library(vm::ptr library);